<?php
	$program_version = "0.3.3";

	// Initial release by Julien
	// Wave preset names for S90 by RichardDuce
	// Voice categories by Werner Mairegger

	// TODO:
	//	- Samples in Songs/Patterns
	//  - A/D input
	
	// Untested: 
	// - Songs with MIDI data
	
	$user_voices_motif["PRE1"] = array("PowerGrand",  "Jazz Grand",  "Dark Grand",  "CP 80",  "CP80&EP",  "Yama EP's",  "BalladKeys",  "80s Layer",  "Piano&Strg",  "Piano Ooh",  "PianoBakup",  "Max Tine",  "Early Fusn",  "Vintage'74",  "Sweetness",  "DynoStrait",  "ChorusHard",  "VintagCase",  "ChorusDyno",  "80th Boost",  "Contempo",  "Early 70's",  "Tonight",  "E.PianoPad",  "TX802",  "ChorusBel",  "BellDX",  "Dark DX",  "GS Tines",  "Rich FM",  "FilteredDX",  "Ice Piano",  "WurliTrem",  "WurliAmped",  "TouchClavi",  "SuperClavi",  "StereoClav",  "HollowClav",  "Nu Phasing",  "Digi Clavi",  "PulseClavi",  "Twinkle",  "Stick Bell",  "Bell Chiff",  "FngrCymbl",  "ChorusBell",  "Tibetan",  "EastBell",  "Gamelan",  "IceBells",  "Digi Bell",  "Marimbell",  "16+8+5&1/3",  "Petit",  "Glassy",  "Jazzy",  "Slow Jam",  "Greasy",  "Swishie",  "Clean",  "Full/CVib",  "Mellow",  "Nu Shade",  "Cool Cat",  "Flutey",  "LeftManual",  "DrawContrl",  "Rocky",  "Expensive",  "Progressy",  "Crunchy",  "Early Bird",  "Jazz Split",  "GosplSplit",  "Tradi",  "Sunday",  "BreathPipe",  "Fluty Pipe",  "Reedy Pipe",  "OohPipes",  "Flamenco",  "Nylon Jam",  "BriteSteel",  "Strums",  "Big Steel",  "Folk Steel",  "18 String",  "HarpsiGtr",  "HybridGtr",  "JazzGTmelo",  "Velo Jazz",  "FM Jazz",  "For Funk",  "Spanky",  "Funkiest",  "Vin Strum",  "1CoilChors",  "CleanChors",  "ChorusPlus",  "SmoothChor",  "TexBoogie",  "Rockabilly",  "65 Combo",  "VinTremolo",  "Crunchoid",  "DynamicAmp",  "Feedback",  "VOODOOMAN",  "BlueLead",  "MeloRckLd",  "MetalMute",  "OverTheTop",  "RoundWound",  "FingerMan",  "PrecRW",  "PrecFW",  "HybridBass",  "Stand Up",  "Fretless",  "Slap&Fx",  "BriteSlap",  "Velo Bass",  "Bs+Cym+Vb",  "Boogie on",  "MiniDetune",  "Long Spit",  "Tack Bass",  "Fat Octave");
	$user_voices_motif["PRE2"] = array("Violin",  "Viola",  "Cello",  "SoloSpicat",  "2 Solos",  "Cello Duet",  "Trio",  "Chamber",  "Small Ens",  "Medium Ens",  "Ens Mix",  "Ensemble",  "Hard Ens",  "Background",  "BigSymphny",  "Str/Horns",  "Stringy",  "Polystring",  "JP Strings",  "MournStrgs",  "The Pizz",  "Fanfare",  "Hi Brass",  "Fat Sect",  "Sforzando",  "Symphony",  "Big Band",  "Big Band 2",  "SaxBigBand",  "MedmBrass",  "Soft Brass",  "SoftVeloBr",  "TrpRomantc",  "Phase Mute",  "Legend",  "Trombone",  "Flugelleaz",  "F.Horn Ens",  "SlowAttack",  "Strng/Bras",  "Movie Ens",  "Powered",  "ObStuff",  "Prophy",  "AnalogBras",  "After 1984",  "Soprano",  "Alto Vib",  "SaxEnsembl",  "Tenor Sax",  "Tenor Soft",  "The Winds",  "WindOrch",  "SweetFlute",  "PanBottle",  "AmpHarpMW",  "SmoothSaw",  "Lucky",  "Tri Solo",  "Syntrump",  "PWM Lead",  "Clicky Saw",  "Mini Pulse",  "Sync Lead",  "Altair",  "Analog",  "Sweetland",  "WarmSweepy",  "SinePad",  "Square",  "VoxPad",  "Pure Syn",  "MovingPad",  "SimpleSaws",  "X-Shower",  "PWM Pad",  "Bell Choir",  "ObSoft",  "MellowAnlg",  "Glasschoir",  "PeaceVox",  "StackChoir",  "Bronx",  "IceChoir",  "Fast Oohs",  "Ooze & OZ",  "NeoCrystal",  "Pop Synth",  "Fantasy",  "Heavenly",  "Retro",  "Airy Nylon",  "Antares",  "Pan Sphere",  "Tamburax",  "IndianFlai",  "SAKURA",  "RisingHigh",  "Champ",  "Gladiator",  "Hades",  "Glacy",  "Forest",  "MirrorRing",  "Poly",  "AnaTonk",  "Jaipur",  "Dulcitar",  "Cimbalon",  "EthncFlute",  "Hichiriki",  "Ryuteki",  "Gagaku",  "Kokyu",  "Digidoo",  "Bali",  "Indo",  "Trip East",  "Tabla",  "Djembe",  "Djerimbe",  "Udu",  "Tribal",  "Log&Drum",  "Afro",  "Japanesque",  "EthnoShock",  "Ethnology");
	$user_voices_motif["PRE3"] = array("Wide Comp",  "78rpmPiano",  "Bristol",  "Mono Comp",  "Dance",  "Houze",  "Glass EP",  "VintSwitch",  "Early Case",  "RdsScape",  "RichEcho",  "StringyPno",  "Champagne",  "Moet",  "Compact",  "1967 Keys",  "YD-45C",  "Gnarly",  "Modular",  "Dark Jack",  "OneVoice",  "Dry Syn",  "PlasticBas",  "Bassline",  "RubbaRap",  "Juicy",  "Dark",  "UniBass",  "Flyer",  "QuackBass",  "Moonbass",  "ClassicSub",  "DX100",  "Lately",  "FMBass",  "Oct String",  "3 Octave",  "TapeStrngs",  "VP Strings",  "BriteTeeth",  "XDance",  "Timeless",  "FatSynth",  "Big Syn",  "Bluesharp",  "Sync",  "Atk Reso",  "Singleline",  "Free LFO",  "Soft Lead",  "PulseWound",  "Big Drone",  "Big Tune",  "PowerWheel",  "Flangefilt",  "G-Funk",  "Maria AT",  "InThePast",  "FatSawPad",  "Wide Sweep",  "Sunbeams",  "BPFx",  "FrozenPad",  "MICHINOKU",  "Esmeralda",  "Romance",  "Circle",  "Dreamspher",  "Silverlake",  "Shadow",  "Platinum",  "Gently",  "Warming",  "PW-EMMY",  "X-fade Pad",  "Zosma",  "NoizRezz",  "Mira",  "MultiPulse",  "VoxWaves",  "LazySweep",  "Doomed",  "PerkaVox",  "Punchy",  "Eyeliner",  "Quieck",  "Aladdin",  "QuadSwell",  "Lilley Pad",  "Didje Baz",  "RING PAD",  "Chaser 1",  "Chaser 2",  "Spacebreat",  "Long HiPa",  "Action Y",  "Trancelan",  "Eternal",  "VirtualSyn",  "Interlude",  "Flying",  "TheSlayer",  "White Rabb",  "Siam",  "Ududu",  "Particle",  "Shaper",  "VintageArp",  "Aah Dance",  "Joker",  "Holiday",  "Android",  "Spacious",  "VoiceCuica",  "Pop Arp",  "Ping Pong",  "Amoeba",  "Landing",  "I was born",  "PsychoGtr",  "NoGravity",  "Pulser",  "Racer",  "Storm",  "Oscillatin",  "FamlyFeud",  "WatrForest",  "Spacecraft");
	$user_voices_motif["GM"]   = array("NaturlGrnd",  "Rock Brite",  "CP 2001",  "Honkytonk",  "E.Piano 1",  "E.Piano 2",  "Harpsicord",  "Brite Clav",  "Celeste",  "Glocken",  "Music Box",  "Vibes",  "Marimba",  "Xylophone",  "TublarBell",  "Dulcimar",  "Draw Organ",  "Perc Organ",  "Rock Organ",  "ChurchOrgn",  "Reed Organ",  "Accordion",  "Harmonica",  "TangoAccrd",  "Nylon",  "Steel",  "ModernJazz",  "Clean",  "Mute",  "Overdrive",  "Distortion",  "Harmonics",  "Accoustic",  "FingerBass",  "Pick Bass",  "Fretless 2",  "SimpleSlap",  "Velo Slap",  "SynthBass1",  "SynthBass2",  "Violin 2",  "Viola 2",  "Cello 2",  "Contrabass",  "TremoloStr",  "Pizz",  "Harp",  "Timpni+Cym",  "StereoSt1",  "StereoSt2",  "Grand Saw",  "SynStrings",  "Aah Choir",  "Ooh Choir",  "Syn Voice",  "Orch.Hit",  "Trumpet",  "Trombone 2",  "Tuba",  "MuteTrpt 2",  "F.Horns",  "Brass Sect",  "SynthBrass",  "Soft Brass",  "Soprano 2",  "Alto Sax",  "TenorSax 2",  "Bari Sax",  "Oboe",  "Eng.Horn",  "Bassoon",  "Clarinet",  "Piccolo",  "Flute",  "Recorder",  "Panflute",  "Bottle",  "Shakuhachi",  "Whistle",  "Ocarina",  "Square Ld",  "Saw Ld",  "Caliop Ld",  "Chiff Ld",  "Charan Ld",  "Voice Ld",  "Fifth Ld",  "Bass&Ld",  "New Age",  "Warm Pad",  "Poly Synth",  "Choir Pad",  "BowedPad",  "Metal Pad",  "Halo Pad",  "Sweep Pad",  "Rain Pad",  "SoundTrack",  "Crystal",  "Atmosphere",  "Brightness",  "Goblin",  "Echoes",  "Sci-Fi",  "Sitar",  "Banjo",  "Shamisen",  "Koto",  "Kalimba",  "Bagpipe",  "Fiddle",  "Shanai",  "Tinkerbel",  "Agogo",  "Steeldrum",  "Woodblock",  "Taikodrum",  "MelodicTom",  "Synth Drum",  "Rev Cymbal",  "Fret Noise",  "BreathNoiz",  "Seashore",  "Tweet",  "Telephone",  "Helicopter",  "Applause",  "Gunshot");
	$user_voices_motif["PDR"]  = array("PoweredStd",  "DryStandrd",  "RockSt1",  "RockSt2",  "RockMono1",  "Hip Hop1",  "Hip Hop2",  "HipStick1",  "T9HipKit1",  "R&B Kit1",  "R&B Kit2",  "AnalogT9",  "AnalogT8",  "Tekno Kit",  "House Kit1",  "House Kit2",  "Big Kit",  "Break Kit",  "Drum'nBass",  "Acid Kit",  "Jungle Kit",  "Electric",  "Human Kit",  "Hard Kit",  "DistrtdKit",  "AmbientKit",  "Jazz Kit",  "Hip Hop3",  "Hip Hop4",  "HipStick2",  "Garage",  "ALL-ROUND",  "Rock Multi",  "Hip Multi",  "Percussion",  "Latin Perc",  "Gtr/Bs Fx",  "Wacko Kit",  "Wood Bits",  "Metal Bits",  "Hands Kit",  "Scratches",  "AcstSnares",  "StSnares",  "AllKicks",  "DanceKicks",  "Snare & Fx",  "EasySnares");
	$user_voices_motif["GMDR"] = array("Stereo GM");
	
	// WEM: Tested for Motif Classic
	$voice_categories_motif = array("--", "Ap", "Kb", "Or", "Gt", "Ba", "St", "Br", "Rp", "Ld", "Pd", "Sc", "Cp", "Dr", "Se", "Me", "Co");
	$voice_categories_s80   = array("--", "Pf", "Cp", "Or", "Gt", "Ba", "St", "En", "Br", "Rd", "Pi", "Ld", "Pd", "Fx", "Et", "Pc", "Se", "Dr", "Sc", "Vo", "Co", "Wv", "Sq");
	
	$voice_sub_categories["--"] = array("--", "--", "--", "--");
	$voice_sub_categories["Ap"] = array("--", "A.Piano", "E.Piano", "Other");
	$voice_sub_categories["Kb"] = array("--", "E.Piano", "Clavi", "Other");
	$voice_sub_categories["Or"] = array("--", "Elec.", "Pipe", "Other");
	$voice_sub_categories["Gt"] = array("--", "A.Gtr", "E.Gtr", "Pluck");
	$voice_sub_categories["Ba"] = array("--", "A.Bass", "E.Bass", "Synth");
	$voice_sub_categories["St"] = array("--", "Solo", "Ensem.", "Synth");
	$voice_sub_categories["Br"] = array("--", "Solo", "Section", "Synth");
	$voice_sub_categories["Rp"] = array("--", "Sax/Rd", "Pipe", "Other");
	$voice_sub_categories["Ld"] = array("--", "Hard", "Soft", "--");
	$voice_sub_categories["Pd"] = array("--", "Bright", "Soft", "Choir");
	$voice_sub_categories["Sc"] = array("--", "Hard", "Soft", "--");
	$voice_sub_categories["Cp"] = array("--", "Malett", "Bell", "Perc.");
	$voice_sub_categories["Dr"] = array("--", "Drums", "Perc.", "--");
	$voice_sub_categories["Se"] = array("--", "Synth", "Natur.", "--");
	$voice_sub_categories["Me"] = array("--", "Motion", "Hit", "--");
	$voice_sub_categories["Co"] = array("--", "Split", "Seq", "--");
	
	$user_voices_motif_rack = $user_voices_motif;
	
	$user_voices_moes["PRE1"] = array("Full Grand","BriteGrand","Dark Grand","RomanticPf","Glasgow","Mono Grand","Tacky","Ragtime","Aggressive","HousePiano","Home Piano","Old Blues","1968","Mono Comp","78rpmPiano","BalladKey","80s Layer","BaladStack","PianoBack","Piano&Strg","Piano&Ooh","HardCP80","CP80&EP","Yama EP's","DynoStrait","ChorusDyno","ChorusHard","80th Boost","R&B Soft","Neo Soul","HrdVintage","Phaser Vin","1983","Soft Case","Early 70's","Vintage'74","Sweetness","VintagFase","Max Tine","Early Fusn","VintagCase","Contempo","Mr. Klank","E.PianoPad","BellChorus","FM E.Piano","BalladEP","SparkleTin","TX802","Bell DX","Dark DX","Beauty DX","GS Tines","AnaPiano","AhrAmI","Tine EP","Analog EP","WurliTrem","WurliAmped","Wurlix","Vintg Clav","SuperClavi","StereoClav","HollowClav","Nu Phasing","PulseClavi","TouchClavi","Marimbell1","Marimbell2","Kalimbell","Tibetan","Gamelan","HandBell","VibesBowMW","Metal Fish","BazaarBels","MysticBowl","Twinkle","Stick Bell","IceBells","ChorusBell","Bell Ice","Stack Bell","Bell Chiff","Nice Bell","NoisyBell","Sako Bell","J-Pop","SynStlDrm","ToyPiano","WoodBell","IslandBell","Log&Drum","Tmp/Bl/Glk","VelOrcPerc","Petit","Impromptu","Mixture","St. Paul","Fluty Pipe","St. Peter","Clean","Reed Split","Tradi","Sunday","BreathPipe","Reedy Pipe","Medieval","Prelude","Ooh Pipes","Green Tea","Bass Walk","Amped","Vintage C","Dave's B","2ndPerc","16+8+5&1/3","Jazzy 1","Jazzy 2","Glassy","Slow Jam","Greasy","Swishie","Full/CVib","Mellow","Nu Shade","Cool Cat","Flutey");
	$user_voices_moes["PRE2"] = array("LeftManual","DrawContrl","GosplSplit","Soulemn","Fully","Progressy","Crunchy","Rocky","DistFull","Early Bird","AnaDrwbr","Tiny","Paddy","Mellow Org","ResoDrbrs","OrgPad","Panther","SawCombo","1967 Keys","YD-45C","Compact","Spanish","Nylon+Harm","SimplSteel","SteelCmprs","Mute&Slide","Ac&Harmnic","SteelSwtch","Mega Steel","2StlStrngs","12Strings","12Str Mono","Mega 12str","El 12Strng","Strange 12","CleanEl&Ac","Jazzy Pick","JazzGtMelo","Velo Jazz","2CoilAmp1","2CoilAmp2","60sClean1","60sClean2","CleanSlap","Distant","SomeHair","MiddyTrem","CompDream","RotoGtr","Alt Rocker","Spanky","Vin Strum","1CoilChors","VinTremolo","HitItHard","PaddyClean","Policia","Rockabilly","Rotator","Baby","TouchWah","Mega Clean","OverDriven","TexBoogie","DynamicAmp","Drive","SnakeFingr","Feedbacker","KilrWhammy","Voodooman","CrunchyGtr","SmallAmp","LatinLover","Still Blue","59 Combo","BlueLead","Chugga","Metal Mute","OverTheTop","Beater","Mega OvrDv","Mega Dist","Upright","Groovin'Bs","VeloGrowl","Mega Acous","FingerPBs","PrecFW","RoundWound","ActiveP","FretBuzzy","3 Sixty Bs","S-VeeTee","GnarlyBs","Reggae","BaCement","MidRngFngr","HybridBs1","HybridBs2","PrecAmped","FingBsAmp","PBasFngDst","FuzzBass","MegaFngHrm","Velo Bass","SlapSwitch","Mega Fingr","Mega Slap","Chilli","PickOpen","PickPull","PickMuteDr","New Pick","Mega Pick","FretlesDry","FretlsSolo","Mega Frtls","Violin 1","Violin 2","Fiddler","Viola 1","Viola 2","Cello 1","Cello 2","Solo 1","Solo 2","SoloSpicat","ContraBass");
	$user_voices_moes["PRE3"] = array("2 Violins","2 Violas","2 Cellos","Cello Duet","2 Solos","CelloEnsem","ViolaEnsem","ViolnEnsem","CB. Sect","SmallSect1","SmallSect2","MediumEns","Violin Mix","SpicaLines","Hard Bow","BackGround","Hophead","HoleString","Ens Mix","Hard Ens","VeloString","BigStrings","Lush","MutedSect","BigSymphny","3 8ve Lush","3 8ve Hard","BeautyHarp","StereoHarp","PizzEns","PizzSect","Oct Pizz","OrchstrlPl","PWMStrings","Lightpad","Noble Pad","Romantic","Stringy","MournStrgs","JP Strings","3Osc Vintg","Superstrgs","VP Soft","PWM Simple","DblChorus","Old String","PhaseStrgs","Oct String","3 Octave","StrMachine","SS-40","TapeStrngs","SlowSuckr","TrpRomantc","PiccoloTpt","DynoTrumpt","SoftJazzTp","BaroqTrpt","Phase Mute","Legend","2 Trumpets","Fluegel","JazyFlugel","Trombone","BlownBone","BoneSectn","FrenchHorn","FrHornSect","Big French","MovieHorns","Symphonic","Symphony","SymphoBrs","SlowAttack","SoftVeloBr","Soft Brass","Velo Brass","SmlBrSect","Fanfare","Big&Brite","PowerSect","VeloFalls","StabDance","Mono Sect","Sforzando","Big Band 1","Big Band 2","SaxBigBand","Hybrid","HybridSect","VeloSynBr","CS-90","FM Brass","Thinth","QuietBrass","Big Syn","ObStuff","OberBrass","OberHorns","ObSoft","T Brass","BigSquish","Slow PWM","Soft 5th","Timeless","After 1984","Prophy","Kustom","Soprano","SoprnoSoft","Alto Vib","Velo Alto","Tenor Soft","TenorSax1","Hip Bari","4 Brothers","Sweet Oboe","SmoothOboe","BassoonVib","Clarinet 1","WW Trio","DblRdQuart","C Flute","SweetFlute","TapeFlute","IrishPipe","BluzDistrt","Campfire");
	$user_voices_moes["PRE4"] = array("TootsyHarp","WoodyHarp","Santur","Baglama","Kotoun","Kanun","Bazouk","Bouzuki","Oud","SazFeeze","IndianFlai","Tamburax","WhereAmI?","Sakura","Nomad","Ney","Kawala","Shukran","Zurna","Pungi","Shehnai 1","Digidoo","Gagaku","Kodo","Djerimbe","Mbira","GlassMbira","Tabla","Tabla 2","Tabla Zone","Udu","Djembe","Dhol","Kemence","Kemen Wet","Kokyu","Yayli","ChurchOohs","Dark Ooh","BrightHaah","Ooh-Aah","SynChoir","Nativity","PeaceVox","AngelVoice","SpaceChoir","Nebulae","GlassChoir","Shandala","AquaStop","Talk Box","Paradies","Westerlies","Tibet Ens.","Pan Sphere","Homesick","Atlantis","Forest","Analog","MellowAnlg","Square","BackPad MW","PWM Soft","Sine Pad","HighSine","The Synth","Ana Dreams","BrassMover","Dark Light","Twist Pad","Fat Eight","X-Shower","Digi Stuff","Pure Syn","Voxy Air","SmoothBlue","DarkVox","Ore","Fazer Pad","GreenGiant","Love me","Pearls","Ohm-Like","AllYouNeed","FrozenVox","Sand Pad","Digi Sheen","Eclipse","Arc-light","Grass Arp","SabreOrgan","Don't Cry!","Vapor","Silverlake","FrozenPad","Shine on","DarkTower","Sadness","Whisperer","MagicSquif","Keli Mutu","Mini Three","VintageSaw","Punch Lead","Bright Saw","OrbitSine","DuckLead","FunkyPulse","Trojan","Feeling","Crying","WoodPanel","VocoLead","JustASync","ThinkSync","Atk Reso","Early Lead","FlangeFilt","Free LFO","G-Funk","Lucky","PulseWound","PWM Lead","Rap Lead 1","Rap Lead 2","Soft RnB","Sine Lead","Singleline");
	$user_voices_moes["PRE5"] = array("Soft Lead","SpaceLead","I.C.U.2.","Mr. Finger","Mini Soft","Green Eyes","PulseWidth","Inda Night","NuMini","Clicky Saw","SimpleBass","Fat Sine","Dark Bass","OneVoice","BobbyBass","RnBass","Mini Sub","Fundamentl","FatSineRes","BalladBass","SingleOsc","Pro-Atack","SimpleReso","Funky Res","Unison","Moonbass","Long Spit","Sweeper","Bass&Comp!","Short PWM","Lately","Boogie A","Dark Uni","Boogie B","UniPunch","Boogie C","Clickie","Dry Syn","Bassline","KickBass","SomeDoubt","MiniClassc","West Coast","NeedleBs","Wazzo","VeloMaster","KeepDancin","Dave","Willows","Space","Network","Lazerzz","Wind Blows","Fire!","Bullrushes","Spacecraft","Storm","Liama Myst","Signals","FX-MWSweep","Dream Text","The Gate","Insanity","Crazy Mod","Doppler","Tron Blip","NevrRepeat","StoneArp","Hellfire","Omniflow","Flutter","Prisoner","Chromosome","Thieves","Lynch Mob","Ivi Atua","Cwmcarn","Alioth","China Bird","Arctis MW","Pad&Loop","Vespers","MIDI Rain","Missing","Algae","Glacy","Orch Hits","80's Hit","Chaser","CosmicRain","Galactic","Mckinley","Glass Tube","ModrnWinds","Red Dragon","Wireman","After All","QuickPunch","PolyMaster","BigComp","NoizRezz","RezzPunch","Straight","Light Comp","Cool Tech","Talker","Icing","Wobbly","A.J.","NightWatch","StringBell","Nightfall","Antares","Airy Nylon","Retro","NeoCrystal","Sweetland","Soleil","PopularSyn","Twilight","Long Walk","GX1","PWM Percu","ResoClavi","Ore-Tech","PlukdThing","PluckBells","Sine Comp");
	$user_voices_moes["PRE6"] = array("Aggressor","PNut Brit","British","Wavepanner","Pounder","Teck-no","FreshCut","Zhuffle","Vanilla","XDance","TrncHook","Portatone","Mayday MW","Moon Dots","Dyna Ring","Flangewall","Seraphim","BPFx","HPF+LPFpad","PWM Wall","Trance MW","Long HiPa","Pad&Syn","LFO String","Phat Dino","Big Drone","Big Lead","TrncMelody","FaaatDance","Fast PWM","Phat Three","BassPedal","Hypervelo","NoiseBass","Alias Bass","BassBubble","Boom Bass","Doom Bass","Pulse Step","Acidd","TranceBass","Ambi Bass","Deep Point","Phat Step","WinterBlue","Sprocket","Zippers","Ringvoxx","Crazy Bird","Bitzz MW","Dirtbox","P.S.O.L.","ProtoType","Bit Stream","Asp","XtremeRezz","Ambi Bite","RevReality","Francios","LoFi-Maj7","Ambi Pizz","Dark'n'Lit","MirrorRing","Clusters","Interlude","C Theme","Horizon","Talkmaster","Bit Space","Thexism","Cardomen","EkoWhistle","Fathoms","Moai","M-Trance","HPF Dance","PowerWheel","ShineChord","Hip Voice","Vocotouch","Voxy Ninth","Stabby","DetroitSta","Corrado","Hit&Down","FilterHit","Griffin","Olde Skool","Four Skids","TranceStab","UFOric","Strong Jam","Poly HPF","SweetNoize","Bollinger","Moet","Step Dance","QuadSwell","Slice Pad","Wake Up","CrushPadMW","EuroKidz","Oxide","DistortoBa","Old House","Dee Tune","VolumePedl","PolyTrance","SimplyRndm","Euro","Soft Ice","The Ripper","X-fade Pad","ChillGtr","QuietNight","Taken","Lost Ring","PlasmaWarp","Queens","Mizar","PulseSus","Pinz","Secrets","Ar-tic","My Reality","Gladiator","Chordz","Trancious");
	$user_voices_moes["PDR"]  = array("Hyper Std", "DryStandrd", "NewRock", "RockSt1", "RockSt2", "RockMono1", "RockMono2", "Hip Hop1", "Hip Hop2", "Hip Hop3", "Hip Hop4", "Hip Hop5", "Hip Hop6", "HipStick1", "HipStick2", "HipStick3", "HipStick4", "T9HipKit1", "T9HipKit2", "R&B Kit1", "R&B Kit2", "R&B Kit3", "AnalogT9", "AnalogT8", "Tekno Kit", "House Kit1", "House Kit2", "Big Kit", "Break Kit", "Drum'nBass", "Acid Kit", "Jungle Kit", "Electric", "Human Kit", "Hard Kit", "Distorted", "Ambiant", "Jazz Kit", "Orchestral", "Garage", "All Round", "Rock Multi", "Hip Multi", "Percussion", "Latin Perc", "Gtr/Bs Fx", "Wacko Kit", "Wood Bits", "Metal Bits", "Hands Kit", "Scratches", "AcstSnares", "StSnares", "AllKicks", "DanceKick", "EasySnares", "Cuban", "SynPopKit", "Arabic Mix", "BellyDance", "DanceSnare", "SpecialSFX", "Synthetic", "SFX Kit");
	$user_voices_moes["GM"]   = array("ConcertGnd","Rock Brite","CP 2001","Honkytonk","E.Piano 1","E.Piano 2","Harpsicord","Brite Clav","Celeste","Glocken","Music Box","Vibes","Marimba","Xylophone","TubulrBel","Dulcimar","Draw Organ","Perc Organ","Rock Organ","ChurchOrgn","Reed Organ","Accordion","Harmonica","TangoAccrd","Velo Nylon","Steel","ModernJazz","Clean Gt","Mute","Overdrive","Distortion","Harmonics","Acoustic","FingerBass","PickBass","Fretless","SimpleSlap","FingSlp SW","SynthBass1","SynthBass2","Violin 3","Viola 3","Cello 3","Contrabass","TremoloStr","Pizz","Harp","Tmpni+Cym","StereoSt1","StereoSt2","Grand Saw","SynString","Aah Choir","Ooh Choir","Syn Voice","Orch.Hit","Trumpet","Trombone2","Tuba","MuteTrpt","F.Horns","Brass Sect","SynthBrass","SoftBrs GM","Soprano2","Alto Sax","TenorSax2","Bari Sax","Oboe","Eng.Horn","Bassoon","Clarinet 2","Piccolo","Flute","Recorder","Panflute","Bottle","Shakuhachi","Whistle","Ocarina","Square Ld","Saw Ld","Caliop Ld","Chiff Ld","Charan Ld","Voice Ld","Fifth Ld","Bass&Ld","New Age","Warm Pad","Poly Synth","Choir Pad","BowedPad","Metal Pad","Halo Pad","Sweep Pad","Rain Pad","SoundTrack","Crystal","Atmosphere","Brightness","Goblin","Echoes","Sci-Fi","Sitar","Banjo","Shamisen","Koto","Kalimba","Bagpipe","Fiddle","Shehnai 2","Tinkerbel","Agogo","Steeldrum","Woodblock","Taikodrum","MelodicTom","Synth Drum","Rev Cymbal","Fret Noise","BreathNoiz","Seashore","Tweet","Telephone","Helicopter","Applause","Gunshot");
	$user_voices_moes["GMDR"] = array("Stereo GM");

	$user_voices_s90["PRE1"] = array("3LayerS700", "Soft Touch", "PowerGrand", "BriteRock", "Jazz Grand", "CP 80", "BalladKeys", "80's Layer", "S700&Strg", "S700&Ooh", "PianoBakup", "Max Tine", "Early Fusn", "Vintage'74", "Sweetness", "DynoStrait", "ChorusHard", "VintagCase", "ChorusDyno", "80th Boost", "Contempo", "Early 70's", "Tonight", "E.PianoPad", "TX802", "ChorusBel", "BellDX", "Dark DX", "GS Tines", "Rich FM", "FilteredDX", "Ice Piano", "WurliTrem", "WurliAmped", "TouchClavi", "SuperClavi", "StereoClav", "HollowClav", "Nu Phasing", "Digi Clavi", "PulseClavi", "Twinkle", "Stick Bell", "Bell Chiff", "FngrCymbl", "ChorusBell", "Tibetan", "EastBell", "Gamelan", "IceBells", "Digi Bell", "Marimbell", "16+8+5&1/3", "Petit", "Glassy", "Jazzy", "Slow Jam", "Greasy", "Swishie", "Clean", "Full/CVib", "Mellow", "Nu Shade", "Cool Cat", "Flutey", "LeftManual", "DrawContrl", "Rocky", "Expensive", "Progressy", "Crunchy", "Early Bird", "Jazz Split", "GosplSplit", "Tradi", "Sunday", "BreathPipe", "Fluty Pipe", "Reedy Pipe", "OohPipes", "Flamenco", "Nylon Jam", "BriteSteel", "Strums", "Big Steel", "Folk Steel", "18 String", "HarpsiGtr", "HybridGtr", "JazzGTmelo", "Velo Jazz", "FM Jazz", "For Funk", "Spanky", "Funkiest", "Vin Strum", "1CoilChors", "CleanChors", "ChorusPlus", "SmoothChor", "TexBoogie", "Rockabilly", "65 Combo", "VinTremolo", "Crunchoid", "DynamicAmp", "Feedback", "VOODOOMAN", "BlueLead", "MeloRckLd", "MetalMute", "OverTheTop", "RoundWound", "FingerMan", "PrecRW", "PrecFW", "HybridBass", "Stand Up", "Fretless", "Slap&Fx", "BriteSlap", "Velo Bass", "Bs+Cym+Vb", "Boogie on", "MiniDetune", "Long Spit", "Tack Bass", "Fat Octav");
	$user_voices_s90["PRE2"] = array("Violin",  "Viola",  "Cello",  "SoloSpicat",  "2 Solos",  "Cello Duet",  "Trio",  "Chamber",  "Small Ens",  "Medium Ens",  "Ens Mix",  "Ensemble",  "Hard Ens",  "Background",  "BigSymphny",  "Str/Horns",  "Stringy",  "Polystring",  "JP Strings",  "MournStrgs",  "The Pizz",  "Fanfare",  "Hi Brass",  "Fat Sect",  "Sforzando",  "Symphony",  "Big Band",  "Big Band 2",  "SaxBigBand",  "MedmBrass",  "Soft Brass",  "SoftVeloBr",  "TrpRomantc",  "Phase Mute",  "Legend",  "Trombone",  "Flugelleaz",  "F.Horn Ens",  "SlowAttack",  "Strng/Bras",  "Movie Ens",  "Powered",  "ObStuff",  "Prophy",  "AnalogBras",  "After 1984",  "Soprano",  "Alto Vib",  "SaxEnsembl",  "Tenor Sax",  "Tenor Soft",  "The Winds",  "WindOrch",  "SweetFlute",  "PanBottle",  "AmpHarpMW",  "SmoothSaw",  "Lucky",  "Tri Solo",  "Syntrump",  "PWM Lead",  "Clicky Saw",  "Mini Pulse",  "Sync Lead",  "Altair",  "Analog",  "Sweetland",  "WarmSweepy",  "SinePad",  "Square",  "VoxPad",  "Pure Syn",  "MovingPad",  "SimpleSaws",  "X-Shower",  "PWM Pad",  "Bell Choir",  "ObSoft",  "MellowAnlg",  "Glasschoir",  "PeaceVox",  "StackChoir",  "Bronx",  "IceChoir",  "Fast Oohs",  "Ooze & OZ",  "NeoCrystal",  "Pop Synth",  "Fantasy",  "Heavenly",  "Retro",  "Airy Nylon",  "Antares",  "Pan Sphere",  "Tamburax",  "IndianFlai",  "SAKURA",  "RisingHigh",  "Champ",  "Gladiator",  "Hades",  "Glacy",  "Forest",  "MirrorRing",  "Poly",  "AnaTonk",  "Jaipur",  "Dulcitar",  "Cimbalon",  "EthncFlute",  "Hichiriki",  "Ryuteki",  "Gagaku",  "Kokyu",  "Digidoo",  "Bali",  "Indo",  "Trip East",  "Tabla",  "Djembe",  "Djerimbe",  "Udu",  "Tribal",  "Log&Drum",  "Afro",  "Japanesque",  "EthnoShock",  "Ethnology");  
	$user_voices_s90["PRE3"] = array("Wide Comp",  "78rpmPiano",  "1968 45rpm",  "1971 33rpm",  "DigiGrand1",  "Harp&Piano",  "Glass EP",  "VintSwitch",  "Early Case",  "RdsScape",  "Feathers",  "StringyPno",  "Champagne",  "Moet",  "Compact",  "1967 Keys",  "YD-45C",  "Gnarly",  "Modular",  "Dark Jack",  "OneVoice",  "Dry Syn",  "PlasticBas",  "Bassline",  "RubbaRap",  "Juicy",  "Dark",  "UniBass",  "Flyer",  "QuackBass",  "Moonbass",  "ClassicSub",  "DX100",  "Lately",  "FMBass",  "Oct String",  "3 Octave",  "TapeStrngs",  "VP Strings",  "BriteTeeth",  "XDance",  "Timeless",  "FatSynth",  "Big Syn",  "Bluesharp",  "Sync",  "Atk Reso",  "Singleline",  "Free LFO",  "Soft Lead",  "PulseWound",  "Big Drone",  "Big Tune",  "PowerWheel",  "Flangefilt",  "G-Funk",  "Maria AT",  "InThePast",  "FatSawPad",  "Wide Sweep",  "Sunbeams",  "BPFx",  "FrozenPad",  "MICHINOKU",  "Esmeralda",  "Romance",  "Circle",  "Dreamspher",  "Silverlake",  "Shadow",  "Platinum",  "Gently",  "Warming",  "PW-EMMY",  "X-fade Pad",  "Zosma",  "NoizRezz",  "Mira",  "MultiPulse",  "VoxWaves",  "LazySweep",  "Doomed",  "PerkaVox",  "Punchy",  "Eyeliner",  "Quieck",  "Aladdin",  "QuadSwell",  "Lilley Pad",  "Didje Baz",  "RING PAD",  "Chaser 1",  "Chaser 2",  "Spacebreat",  "Long HiPa",  "Action Y",  "Trancelan",  "Eternal",  "VirtualSyn",  "Interlude",  "Flying",  "TheSlayer",  "White Rabb",  "Siam",  "Ududu",  "Particle",  "Shaper",  "VintageArp",  "Aah Dance",  "Joker",  "Holiday",  "Android",  "Spacious",  "VoiceCuica",  "Pop Arp",  "Ping Pong",  "Amoeba",  "Landing",  "was born",  "PsychoGtr",  "NoGravity",  "Pulser",  "Racer",  "Storm",  "Oscillatin",  "FamlyFeud",  "WatrForest",  "Spacecraft");
	$user_voices_s90["GM"]   = array("NaturlGrnd",  "Rock Brite",  "CP 2001",  "Honkytonk",  "E.Piano 1",  "E.Piano 2",  "Harpsicord",  "Brite Clav",  "Celeste",  "Glocken",  "Music Box",  "Vibes",  "Marimba",  "Xylophone",  "TublarBell",  "Dulcimar",  "Draw Organ",  "Perc Organ",  "Rock Organ",  "ChurchOrgn",  "Reed Organ",  "Accordion",  "Harmonica",  "TangoAccrd",  "Nylon",  "Steel",  "ModernJazz",  "Clean",  "Mute",  "Overdrive",  "Distortion",  "Harmonics",  "Accoustic",  "FingerBass",  "Pick Bass",  "Fretless 2",  "SimpleSlap",  "Velo Slap",  "SynthBass1",  "SynthBass2",  "Violin 2",  "Viola 2",  "Cello 2",  "Contrabass",  "TremoloStr",  "Pizz",  "Harp",  "Timpni+Cym",  "StereoSt1",  "StereoSt2",  "Grand Saw",  "SynStrings",  "Aah Choir",  "Ooh Choir",  "Syn Voice",  "Orch.Hit",  "Trumpet",  "Trombone 2",  "Tuba",  "MuteTrpt 2",  "F.Horns",  "Brass Sect",  "SynthBrass",  "Soft Brass",  "Soprano 2",  "Alto Sax",  "TenorSax 2",  "Bari Sax",  "Oboe",  "Eng.Horn",  "Bassoon",  "Clarinet",  "Piccolo",  "Flute",  "Recorder",  "Panflute",  "Bottle",  "Shakuhachi",  "Whistle",  "Ocarina",  "Square Ld",  "Saw Ld",  "Caliop Ld",  "Chiff Ld",  "Charan Ld",  "Voice Ld",  "Fifth Ld",  "Bass&Ld",  "New Age",  "Warm Pad",  "Poly Synth",  "Choir Pad",  "BowedPad",  "Metal Pad",  "Halo Pad",  "Sweep Pad",  "Rain Pad",  "SoundTrack",  "Crystal",  "Atmosphere",  "Brightness",  "Goblin",  "Echoes",  "Sci-Fi",  "Sitar",  "Banjo",  "Shamisen",  "Koto",  "Kalimba",  "Bagpipe",  "Fiddle",  "Shanai",  "Tinkerbel",  "Agogo",  "Steeldrum",  "Woodblock",  "TaikoDrum",  "MelodicTom",  "Synth Drum",  "Rev Cymbal",  "Fret Noise",  "BreathNoiz",  "Seashore",  "Tweet",  "Telephone",  "Helicopter",  "Applause",  "Gunshot");
	$user_voices_s90["PDR"]  = array("PoweredStd",  "DryStandrd",  "RockSt1",  "RockSt2",  "RockMono1",  "Hip Hop1",  "Hip Hop2",  "HipStick1",  "T9HipKit1",  "R&B Kit1",  "R&B Kit2",  "AnalogT9",  "AnalogT8",  "Tekno Kit",  "House Kit1",  "House Kit2",  "Big Kit",  "Break Kit",  "Drum'nBass",  "Acid Kit",  "Jungle Kit",  "Electric",  "Human Kit",  "Hard Kit",  "DistrtdKit",  "AmbientKit",  "Jazz Kit",  "Hip Hop3",  "Hip Hop4",  "HipStick2",  "Garage",  "ALL-ROUND",  "Rock Multi",  "Hip Multi",  "Percussion",  "Latin Perc",  "Gtr/Bs Fx",  "Wacko Kit",  "Wood Bits",  "Metal Bits",  "Hands Kit",  "Scratches",  "AcstSnares",  "StSnares",  "AllKicks",  "DanceKicks",  "Snare & Fx",  "EasySnares");
	$user_voices_s90["GMDR"] = array("Stereo GM");
	
	$user_voices_s90es["PRE1"] = array("Natural S",  "Elegant S",  "Bright S",  "Dark S",  "Intimate",  "Mono S",  "Full Grand",  "Tacky",  "Ragtime",  "Aggressive",  "HousePiano",  "Old Blues",  "1968",  "Mono Comp",  "78rpmPiano",  "BalladKey",  "80s Layer",  "BaladStack",  "PianoBack",  "Piano&Str",  "Piano&Ooh",  "DigiGrand",  "HardCP80",  "CP80&EP",  "Yama EP's",  "DynoStrait",  "ChorusDyno",  "ChorusHard",  "80th Boost",  "R&B Soft",  "Neo Soul",  "HrdVintage",  "Phaser Vin",  "1983",  "Soft Case",  "Early 70's",  "Vintage'74",  "Sweetness",  "VintagFase",  "Max Tine",  "Early Fusn",  "VintagCase",  "Contempo",  "Mr. Klank",  "E.PianoPad",  "BellChorus",  "FM E.Piano",  "BalladEP",  "SparkleTin",  "TX802",  "Bell DX",  "Dark DX",  "Beauty DX",  "GS Tines",  "AnaPiano",  "AhrAmI",  "Tine EP",  "Analog EP",  "WurliTrem",  "WurliAmped",  "Wurlix",  "Vintg Clav",  "SuperClavi",  "StereoClav",  "HollowClav",  "Nu Phasing",  "PulseClavi",  "TouchClavi",  "Marimbell1",  "Marimbell2",  "Kalimbell",  "Tibetan",  "Gamelan",  "HandBell",  "VibesBowMW",  "Metal Fish",  "BazaarBels",  "MysticBowl",  "Twinkle",  "Stick Bell",  "IceBells",  "ChorusBell",  "Bell Ice",  "Stack Bell",  "Bell Chiff",  "Nice Bell",  "NoisyBell",  "Sako Bell",  "J-Pop",  "SynStlDrm",  "ToyPiano",  "WoodBell",  "IslandBell",  "Log&Drum",  "Tmp/Bl/Glk",  "VelOrcPerc",  "Petit",  "Impromptu",  "Mixture",  "St. Paul",  "Fluty Pipe",  "St. Peter",  "Clean",  "Reed Split",  "Tradi",  "Sunday",  "BreathPipe",  "Reedy Pipe",  "Medieval",  "Prelude",  "Ooh Pipes",  "Green Tea",  "Bass Walk",  "Amped",  "Vintage C",  "Dave's B",  "2ndPerc",  "16+8+5&1/3",  "Jazzy 1",  "Jazzy 2",  "Glassy",  "Slow Jam",  "Greasy",  "Swishie",  "Full/CVib",  "Mellow",  "Nu Shade",  "Cool Cat");
	$user_voices_s90es["PRE2"] = array("Flutey",  "LeftManual",  "DrawContrl",  "GosplSplit",  "Soulemn",  "Fully",  "Progressy",  "Crunchy",  "Rocky",  "DistFull",  "Early Bird",  "AnaDrwbr",  "Tiny",  "Paddy",  "Mellow Org",  "ResoDrbrs",  "OrgPad",  "Panther",  "SawCombo",  "1967 Keys",  "YD-45C",  "Compact",  "Spanish",  "Nylon+Harm",  "SimplSteel",  "SteelCmprs",  "Mute&Slide",  "Ac&Harmnic",  "SteelSwtch",  "Mega Steel",  "2StlStrngs",  "12Strings",  "12Str Mono",  "Mega 12str",  "El 12Strng",  "Strange 12",  "CleanEl&Ac",  "Jazzy Pick",  "JazzGtMelo",  "Velo Jazz",  "2CoilAmp1",  "2CoilAmp2",  "60sClean1",  "60sClean2",  "CleanSlap",  "Distant",  "SomeHair",  "MiddyTrem",  "CompDream",  "RotoGtr",  "Alt Rocker",  "Spanky",  "Vin Strum",  "1CoilChors",  "VinTremolo",  "HitItHard",  "PaddyClean",  "Policia",  "Rockabilly",  "Rotator",  "Baby",  "TouchWah",  "Mega Clean",  "OverDriven",  "TexBoogie",  "DynamicAmp",  "Drive",  "SnakeFingr",  "Feedbacker",  "KilrWhammy",  "Voodooman",  "CrunchyGtr",  "SmallAmp",  "LatinLover",  "Still Blue",  "59 Combo",  "BlueLead",  "Chugga",  "Metal Mute",  "OverTheTop",  "Beater",  "Mega OvrDv",  "Mega Dist",  "Upright",  "Groovin'Bs",  "VeloGrowl",  "Mega Acous",  "FingerPBs",  "PrecFW",  "RoundWound",  "ActiveP",  "FretBuzzy",  "3 Sixty Bs",  "S-VeeTee",  "GnarlyBs",  "Reggae",  "BaCement",  "MidRngFngr",  "HybridBs1",  "HybridBs2",  "PrecAmped",  "FingBsAmp",  "PBasFngDst",  "FuzzBass",  "MegaFngHrm",  "Velo Bass",  "SlapSwitch",  "Mega Fingr",  "Mega Slap",  "Chilli",  "PickOpen",  "PickPull",  "PickMuteDr",  "New Pick",  "Mega Pick",  "FretlesDry",  "FretlsSolo",  "Mega Frtls",  "Violin 1",  "Violin 2",  "Fiddler",  "Viola 1",  "Viola 2",  "Cello 1",  "Cello 2",  "Solo 1",  "Solo 2",  "SoloSpicat");
	$user_voices_s90es["PRE3"] = array("Contrabas1",  "2 Violins",  "2 Violas",  "2 Cellos",  "Cello Duet",  "2 Solos",  "CelloEnsem",  "ViolaEnsem",  "ViolnEnsem",  "CB. Sect",  "SmallSect1",  "SmallSect2",  "MediumEns",  "Violin Mix",  "SpicaLines",  "Hard Bow",  "BackGround",  "Hophead",  "HoleString",  "Ens Mix",  "Hard Ens",  "VeloString",  "BigStrings",  "Lush",  "MutedSect",  "BigSymphny",  "3 8ve Lush",  "3 8ve Hard",  "BeautyHarp",  "StereoHarp",  "PizzEns",  "PizzSect",  "Oct Pizz",  "OrchstrlPl",  "PWMStrings",  "Lightpad",  "Noble Pad",  "Romantic",  "Stringy",  "MournStrgs",  "JP Strings",  "3Osc Vintg",  "Superstrgs",  "VP Soft",  "PWM Simple",  "DblChorus",  "Old String",  "PhaseStrgs",  "Oct String",  "3 Octave",  "SS-40",  "TapeStrngs",  "TrpRomantc",  "PiccoloTpt",  "DynoTrumpt",  "SoftJazzTp",  "BaroqTrpt",  "Phase Mute",  "Legend",  "2 Trumpets",  "Fluegel",  "JazyFlugel",  "Trombone1",  "BlownBone",  "BoneSectn",  "FrenchHorn",  "FrHornSect",  "Big French",  "MovieHorns",  "Symphonic",  "Symphony",  "SymphoBrs",  "SlowAttack",  "SoftVeloBr",  "Soft Brass",  "Velo Brass",  "SmlBrSect",  "Fanfare",  "Big&Brite",  "PowerSect",  "VeloFalls",  "StabDance",  "Mono Sect",  "Sforzando",  "Big Band 1",  "Big Band 2",  "SaxBigBand",  "Hybrid",  "HybridSect",  "VeloSynBr",  "CS-90",  "FM Brass",  "Thinth",  "QuietBrass",  "Big Syn",  "ObStuff",  "OberBrass",  "OberHorns",  "ObSoft",  "T Brass",  "BigSquish",  "Slow PWM",  "Soft 5th",  "Timeless",  "After 1984",  "Prophy",  "Kustom",  "Soprano1",  "SoprnoSoft",  "Alto Vib",  "Velo Alto",  "Tenor Soft",  "TenorSax1",  "Hip Bari",  "4 Brothers",  "Sweet Oboe",  "SmoothOboe",  "BassoonVib",  "Clarinet 1",  "WW Trio",  "DblRdQuart",  "C Flute",  "SweetFlute",  "IrishPipe",  "BluzDistrt",  "Campfire",  "TootsyHarp",  "WoodyHarp");
	$user_voices_s90es["PRE4"] = array("Santur",  "Baglama",  "Kotoun",  "Kanun",  "Bazouk",  "Bouzuki",  "Oud",  "IndianFlai",  "WhereAmI?",  "Sakura",  "Nomad",  "Ney",  "Kawala",  "Shukran",  "Zurna",  "Pungi",  "Shehnai 1",  "Digidoo",  "Gagaku",  "Kodo",  "Djerimbe",  "Mbira",  "Tabla",  "Tabla 2",  "Tabla Zone",  "Udu",  "Djembe",  "Dhol",  "Kemence",  "Kemen Wet",  "Kokyu",  "Yayli",  "ChurchOohs",  "BrightHaah",  "Ooh-Aah",  "PeaceVox",  "GlassChoir",  "AquaStop",  "Talk Box",  "Paradies",  "Westerlies",  "Tibet Ens.",  "Pan Sphere",  "Atlantis",  "Analog",  "MellowAnlg",  "Square",  "PWM Soft",  "The Synth",  "BrassMover",  "Dark Light",  "Fat Eight",  "SmoothBlue",  "Fazer Pad",  "FrozenVox",  "Eclipse",  "Arc-light",  "Silverlake",  "FrozenPad",  "Shine on",  "Whisperer",  "Mini Three",  "VintageSaw",  "Bright Saw",  "DuckLead",  "Feeling",  "Crying",  "ThinkSync",  "Lucky",  "PulseWound",  "PWM Lead",  "Rap Lead 1",  "Rap Lead 2",  "Soft RnB",  "Singleline",  "Inda Night",  "SimpleBass",  "Fat Sine",  "OneVoice",  "Fundamentl",  "BalladBass",  "SimpleReso",  "Unison",  "Moonbass",  "Sweeper",  "Boogie 1",  "Dark Uni",  "Boogie 2",  "Clickie",  "KickBass",  "MiniClassc",  "Wazzo",  "Lazerzz",  "The Gate",  "Insanity",  "NevrRepeat",  "StoneArp",  "Hellfire",  "Omniflow",  "Flutter",  "Chromosome",  "Cwmcarn",  "Alioth",  "China Bird",  "Missing",  "Glacy",  "Orch Hits",  "80's Hit",  "Chaser",  "CosmicRain",  "Mckinley",  "Glass Tube",  "QuickPunch",  "BigComp",  "NoizRezz",  "Wobbly",  "StringBell",  "Nightfall",  "Antares",  "Airy Nylon",  "GX1",  "PWM Percu",  "Ore-Tech",  "PluckBells",  "Vanilla",  "Seraphim",  "NoiseBass",  "Lost Ring");
	$user_voices_s90es["GM"]   = array("ConcertGnd",  "Rock Brite",  "CP 2001",  "Honkytonk",  "E.Piano 1",  "E.Piano 2",  "Harpsicord",  "Brite Clav",  "Celeste",  "Glocken",  "Music Box",  "Vibes",  "Marimba",  "Xylophone",  "TubulrBel",  "Dulcimar",  "Draw Organ",  "Perc Organ",  "Rock Organ",  "ChurchOrgn",  "Reed Organ",  "Accordion",  "Harmonica",  "TangoAccrd",  "Velo Nylon",  "Steel",  "ModernJazz",  "Clean Gt",  "Mute",  "Overdrive",  "Distortion",  "Harmonics",  "Acoustic",  "FingerBass",  "PickBass",  "Fretless",  "SimpleSlap",  "FingSlp SW",  "SynthBass1",  "SynthBass2",  "Violin 3",  "Viola 3",  "Cello 3",  "Contrabas2",  "TremoloStr",  "Pizz",  "Harp",  "Tmpni+Cym",  "StereoSt1",  "StereoSt2",  "Grand Saw",  "SynString",  "Aah Choir",  "Ooh Choir",  "Syn Voice",  "Orch.Hit",  "Trumpet",  "Trombone2",  "Tuba",  "MuteTrpt",  "F.Horns",  "Brass Sect",  "SynthBrass",  "SoftBrs GM",  "Soprano2",  "Alto Sax",  "TenorSax2",  "Bari Sax",  "Oboe",  "Eng.Horn",  "Bassoon",  "Clarinet 2",  "Piccolo",  "Flute",  "Recorder",  "Panflute",  "Bottle",  "Shakuhachi",  "Whistle",  "Ocarina",  "Square Ld",  "Saw Ld",  "Caliop Ld",  "Chiff Ld",  "Charan Ld",  "Voice Ld",  "Fifth Ld",  "Bass&Ld",  "New Age",  "Warm Pad",  "Poly Synth",  "Choir Pad",  "BowedPad",  "Metal Pad",  "Halo Pad",  "Sweep Pad",  "Rain Pad",  "SoundTrack",  "Crystal",  "Atmosphere",  "Brightness",  "Goblin",  "Echoes",  "Sci-Fi",  "Sitar",  "Banjo",  "Shamisen",  "Koto",  "Kalimba",  "Bagpipe",  "Fiddle",  "Shehnai 2",  "Tinkerbel",  "Agogo",  "Steeldrum",  "Woodblock",  "Taikodrum",  "MelodicTom",  "Synth Drum",  "Rev Cymbal",  "Fret Noise",  "BreathNoiz",  "Seashore",  "Tweet",  "Telephone",  "Helicopter",  "Applause",  "Gunshot");
	$user_voices_s90es["PDR"]  = array("Hyper Std",  "DryStandrd",  "NewRock",  "RockSt1",  "RockSt2",  "RockMono1",  "RockMono2",  "Hip Hop1",  "Hip Hop2",  "Hip Hop3",  "Hip Hop4",  "Hip Hop5",  "Hip Hop6",  "HipStick1",  "HipStick2",  "HipStick3",  "HipStick4",  "T9HipKit1",  "T9HipKit2",  "R&B Kit1",  "R&B Kit2",  "R&B Kit3",  "AnalogT9",  "AnalogT8",  "Tekno Kit",  "House Kit1",  "House Kit2",  "Big Kit",  "Break Kit",  "Drum'nBass",  "Acid Kit",  "Jungle Kit",  "Electric",  "Human Kit",  "Hard Kit",  "Distorted",  "Ambient",  "Jazz Kit",  "Orchestral",  "Garage",  "All Round",  "Rock Multi",  "Hip Multi",  "Percussion",  "Latin Perc",  "Gtr/Bs Fx",  "Wacko Kit",  "Wood Bits",  "Metal Bits",  "Hands Kit",  "Scratches",  "AcstSnares",  "StSnares",  "AllKicks",  "DanceKick",  "EasySnares",  "Cuban",  "SynPopKit",  "Arabic Mix",  "BellyDance",  "DanceSnare",  "SpecialSFX",  "Synthetic",  "SFX Kit");
	$user_voices_s90es["GMDR"] = array("Stereo GM");
	
	$user_voices_mo["PRE1"] = array("Full Grand",  "BriteGrand",  "Dark Grand",  "Tacky",  "HousePiano",  "Mono Comp",  "1968",  "78rpmPiano",  "Ragtime",  "BalladKey",  "PianoBack",  "Piano&Ooh",  "HardCP80",  "Yama EP's",  "DynoStrait",  "ChorusHard",  "R&B Soft",  "Phaser Vin",  "Vintage'74",  "Sweetness",  "Max Tine",  "VintagCase",  "Contempo",  "E.PianoPad",  "SparkleTin",  "TX802",  "Bell DX",  "Dark DX",  "GS Tines",  "WurliTrem",  "WurliAmped",  "SuperClavi",  "StereoClav",  "HollowClav",  "Nu Phasing",  "TouchClavi",  "Tibetan",  "Twinkle",  "ChorusBell",  "Stack Bell",  "J-Pop",  "WoodBell",  "Tmp/Bl/Glk",  "St. Paul",  "Fluty Pipe",  "St. Peter",  "Tradi",  "Sunday",  "Reedy Pipe",  "Prelude",  "Green Tea",  "Vintage C",  "16+8+5&1/3",  "Jazzy 1",  "Jazzy 2",  "Slow Jam",  "Swishie",  "Flutey",  "DrawContrl",  "Fully",  "Progressy",  "Crunchy",  "Rocky",  "Early Bird",  "1967 Keys",  "Compact",  "Nylon+Harm",  "SteelCmprs",  "Ac&Harmnic",  "Mega Steel",  "12Strings",  "CleanEl&Ac",  "JazzGtMelo",  "2CoilAmp",  "CleanSlap",  "SomeHair",  "MiddyTrem",  "CompDream",  "Spanky",  "1CoilChors",  "VinTremolo",  "Policia",  "Rockabilly",  "Rotator",  "TouchWah",  "Mega Clean",  "OverDriven",  "TexBoogie",  "Feedbacker",  "Voodooman",  "LatinLover",  "BlueLead",  "Metal Mute",  "OverTheTop",  "Mega Dist",  "Groovin'Bs",  "Mega Acous",  "FingerPBs",  "PrecFW",  "RoundWound",  "FretBuzzy",  "S-VeeTee",  "MidRngFngr",  "FingBsAmp",  "PBasFngDst",  "MegaFngHrm",  "Velo Bass",  "Mega Slap",  "PickOpen",  "PickMuteDr",  "Mega Pick",  "FretlsSolo",  "Mega Frtls",  "Violin 1",  "Viola 1",  "Cello 1",  "Solo",  "SoloSpicat",  "ContraBas1",  "CelloEnsem",  "ViolaEnsem",  "ViolnEnsem",  "SmallSect",  "MediumEns",  "SpicaLines",  "BackGround",  "Hophead",  "Ens Mix");
	$user_voices_mo["PRE2"] = array("Hard Ens",  "BigStrings",  "MutedSect",  "BigSymphny",  "3 8ve Lush",  "BeautyHarp",  "PizzSect",  "Oct Pizz",  "PWMStrings",  "Noble Pad",  "Stringy",  "MournStrgs",  "JP Strings",  "Superstrgs",  "VP Soft",  "PhaseStrgs",  "Oct String",  "3 Octave",  "StrMachine",  "DynoTrumpt",  "SoftJazzTp",  "Phase Mute",  "Fluegel",  "Trombone1",  "BoneSectn",  "FrenchHorn",  "FrHornSect",  "Symphony",  "SlowAttack",  "Fanfare",  "Big&Brite",  "VeloFalls",  "Sforzando",  "Big Band",  "SaxBigBand",  "Hybrid",  "CS-90",  "FM Brass",  "Thinth",  "ObStuff",  "OberBrass",  "OberHorns",  "T Brass",  "BigSquish",  "Soft 5th",  "After 1984",  "SoprnoSoft",  "Alto Vib",  "Velo Alto",  "Tenor Soft",  "Hip Bari",  "4 Brothers",  "Sweet Oboe",  "BassoonVib",  "Clarinet 1",  "WW Trio",  "DblRdQuart",  "SweetFlute",  "TapeFlute",  "BluzDistrt",  "TootsyHarp",  "Santur",  "Kotoun",  "Kanun",  "Bouzuki",  "Oud",  "WhereAmI?",  "Ney",  "Zurna",  "Digidoo",  "Tabla Zone",  "Kokyu",  "ChurchOohs",  "Ooh-Aah",  "SynChoir",  "SpaceChoir",  "AquaStop",  "Paradies",  "Westerlies",  "Tibet Ens.",  "Atlantis",  "Forest",  "Analog",  "MellowAnlg",  "Square",  "BackPad MW",  "PWM Soft",  "Sine Pad",  "Ana Dreams",  "BrassMover",  "Dark Light",  "Twist Pad",  "Voxy Air",  "Ore",  "Fazer Pad",  "GreenGiant",  "Ohm-Like",  "Arc-light",  "Grass Arp",  "Vapor",  "Silverlake",  "FrozenPad",  "Sadness",  "Whisperer",  "Mini Three",  "VintageSaw",  "Punch Lead",  "Bright Saw",  "OrbitSine",  "DuckLead",  "FunkyPulse",  "Trojan",  "Feeling",  "Crying",  "WoodPanel",  "JustASync",  "ThinkSync",  "FlangeFilt",  "Lucky",  "PulseWound",  "Rap Lead",  "Soft RnB",  "Sine Lead",  "Singleline",  "Soft Lead",  "SpaceLead",  "Mr. Finger",  "Mini Soft");
	$user_voices_mo["PRE3"] = array("PulseWidth",  "NuMini",  "Clicky Saw",  "SimpleBass",  "Fat Sine",  "Dark Bass",  "OneVoice",  "RnBass",  "Fundamentl",  "SingleOsc",  "SimpleReso",  "Unison",  "Moonbass",  "Long Spit",  "Sweeper",  "Bass&Comp!",  "Short PWM",  "Lately",  "Boogie A",  "Dry Syn",  "NeedleBs",  "Wazzo",  "VeloMaster",  "Network",  "Lazerzz",  "Spacecraft",  "The Gate",  "NevrRepeat",  "Prisoner",  "Chromosome",  "Lynch Mob",  "Alioth",  "China Bird",  "Vespers",  "Glacy",  "Orch Hits",  "80's Hit",  "CosmicRain",  "Mckinley",  "Glass Tube",  "ModrnWinds",  "Wireman",  "After All",  "BigComp",  "NoizRezz",  "Cool Tech",  "Talker",  "Icing",  "Wobbly",  "NightWatch",  "StringBell",  "Antares",  "Airy Nylon",  "Retro",  "PopularSyn",  "PWM Percu",  "Ore-Tech",  "PlukdThing",  "PluckBells",  "Sine Comp",  "Aggressor",  "British",  "Wavepanner",  "Pounder",  "FreshCut",  "Zhuffle",  "Vanilla",  "XDance",  "TrncHook",  "Portatone",  "Flangewall",  "HPF+LPFpad",  "Trance MW",  "Long HiPa",  "Pad&Syn",  "Phat Dino",  "Big Lead",  "FaaatDance",  "Fast PWM",  "BassPedal",  "Hypervelo",  "NoiseBass",  "Alias Bass",  "Pulse Step",  "Acidd",  "Sprocket",  "Ringvoxx",  "Crazy Bird",  "ProtoType",  "Asp",  "XtremeRezz",  "Ambi Bite",  "RevReality",  "LoFi-Maj7",  "Clusters",  "Interlude",  "C Theme",  "Horizon",  "Bit Space",  "Thexism",  "EkoWhistle",  "Moai",  "HPF Dance",  "Hit&Down",  "Griffin",  "Olde Skool",  "TranceStab",  "UFOric",  "Strong Jam",  "Poly HPF",  "SweetNoize",  "Bollinger",  "Step Dance",  "EuroKidz",  "Oxide",  "DistortoBa",  "Dee Tune",  "SimplyRndm",  "Soft Ice",  "The Ripper",  "X-fade Pad",  "Lost Ring",  "PlasmaWarp",  "Queens",  "Mizar",  "My Reality",  "Gladiator",  "Chordz");
	$user_voices_mo["PRE4"] = array("OnTheVerge",  "EleXon MW",  "Stuttrtron",  "Alaska",  "Bros&Sist",  "ChillDown",  "Champ Arp",  "NeedlzVlSw",  "Das Sneak",  "Ibizagruv",  "Droid",  "SQ02 Wheel",  "Tamburiza",  "AiryChill",  "Inverted",  "Pizza No.1",  "WorkerAnt",  "XtremeHarp",  "i-Vox",  "Zippet",  "Electronix",  "Sensual",  "Valvolex",  "SimpleArp",  "TekkNow MW",  "Traxxx",  "Voodoo Key",  "Oztralian",  "Polarized",  "Trans-D",  "TranceTaO",  "W Phaser",  "CoolTrance",  "Echo Comp",  "Tuxedo",  "Equatorial",  "P5AnaPunch",  "SilkRoad",  "DPCM Atack",  "Power Hook",  "Dirty Hook",  "Push Ahead",  "Tekk Glide",  "Growl Tekk",  "Cool Body",  "minor3rd",  "Sonix",  "LdDuck",  "Screameemy",  "Schoolday",  "DynmcMini",  "PinzLead",  "Sutra",  "BlownTube",  "101 Bass",  "Growler",  "MonsterBas",  "Biting",  "Pulse Stop",  "TackyPulse",  "BigBass",  "Acid Bass",  "Crush Bass",  "Komprssr",  "Competitor",  "Ice Rink",  "Zircon",  "Xdreams",  "Cold Day",  "Livin Pad",  "SharpTeeth",  "MothrEarth",  "Royal",  "SoftBrassy",  "Turbulence",  "Tranquil",  "DreamShift",  "YelloRiver",  "The Breath",  "High Wire",  "Humanity",  "Climber",  "Deception",  "Chorus Pad",  "OnTheWater",  "Pianyl",  "DigiOrg",  "RandomBell",  "Anime Box",  "Clackbel",  "Hard Bell",  "TronStr",  "TronVln",  "TronFlt",  "Irish",  "Felicity",  "Vibrancy",  "Metalflake",  "RadioVenus",  "Molecule",  "Clock",  "Elec Blue",  "Undersea",  "Echo",  "Slipstream",  "Chyo Ethno",  "MetalShapr",  "Mystix",  "Memories",  "Mstrvrt",  "Calculator",  "Hitori",  "Stutter",  "Excavator",  "Warptek",  "CosmicDust",  "VinylHit",  "UndrGround",  "NoControl",  "Propagate",  "UndrForest",  "PilotPlant",  "Expansion",  "Eggoo",  "Modulator",  "Water Hit",  "Toukai",  "Khol");
	$user_voices_mo["GM"]   = array("ConcertGnd",  "Rock Brite",  "CP 2001",  "Honkytonk",  "E.Piano 1",  "E.Piano 2",  "Harpsicord",  "Brite Clav",  "Celeste",  "Glocken",  "Music Box",  "Vibes",  "Marimba",  "Xylophone",  "TubulrBel",  "Dulcimar",  "Draw Organ",  "Perc Organ",  "Rock Organ",  "ChurchOrgn",  "Reed Organ",  "Accordion",  "Harmonica",  "TangoAccrd",  "Velo Nylon",  "Steel",  "ModernJazz",  "Clean Gt",  "Mute",  "Overdrive",  "Distortion",  "Harmonics",  "Acoustic",  "FingerBass",  "PickBass",  "Fretless",  "SimpleSlap",  "FingSlp SW",  "SynthBass1",  "SynthBass2",  "Violin 2",  "Viola 2",  "Cello 2",  "ContraBas2",  "TremoloStr",  "Pizz",  "Harp",  "Tmpni+Cym",  "StereoSt1",  "StereoSt2",  "Grand Saw",  "SynString",  "Aah Choir",  "Ooh Choir",  "Syn Voice",  "Orch.Hit",  "Trumpet",  "Trombone2",  "Tuba",  "MuteTrpt",  "F.Horns",  "Brass Sect",  "SynthBrass",  "SoftBrs GM",  "Soprano",  "Alto Sax",  "TenorSax",  "Bari Sax",  "Oboe",  "Eng.Horn",  "Bassoon",  "Clarinet 2",  "Piccolo",  "Flute",  "Recorder",  "Panflute",  "Bottle",  "Shakuhachi",  "Whistle",  "Ocarina",  "Square Ld",  "Saw Ld",  "Caliop Ld",  "Chiff Ld",  "Charan Ld",  "Voice Ld",  "Fifth Ld",  "Bass&Ld",  "New Age",  "Warm Pad",  "Poly Synth",  "Choir Pad",  "BowedPad",  "Metal Pad",  "Halo Pad",  "Sweep Pad",  "Rain Pad",  "SoundTrack",  "Crystal",  "Atmosphere",  "Brightness",  "Goblin",  "Echoes",  "Sci-Fi",  "Sitar",  "Banjo",  "Shamisen",  "Koto",  "Kalimba",  "Bagpipe",  "Fiddle",  "Shehnai",  "Tinkerbel",  "Agogo",  "Steeldrum",  "Woodblock",  "Taikodrum",  "MelodicTom",  "Synth Drum",  "Rev Cymbal",  "Fret Noise",  "BreathNoiz",  "Seashore",  "Tweet",  "Telephone",  "Helicopter",  "Applause",  "Gunshot");
	$user_voices_mo["PDR"]  = array("Hyper Std",  "DryStandrd",  "NewRock",  "RockSt1",  "RockSt2",  "RockMono1",  "RockMono2",  "Hip Hop1",  "Hip Hop2",  "Hip Hop3",  "Hip Hop4",  "Hip Hop5",  "Hip Hop6",  "HipStick1",  "HipStick2",  "HipStick3",  "HipStick4",  "T9HipKit1",  "T9HipKit2",  "R&B Kit1",  "R&B Kit2",  "R&B Kit3",  "AnalogT9",  "AnalogT8",  "Tekno Kit",  "House Kit1",  "House Kit2",  "Big Kit",  "Break Kit",  "Drum'nBass",  "Acid Kit",  "Jungle Kit",  "Electric",  "Human Kit",  "Hard Kit",  "Distorted",  "Ambient",  "Jazz Kit",  "Orchestral",  "Garage",  "All Round",  "Rock Multi",  "Hip Multi",  "Percussion",  "Latin Perc",  "Gtr/Bs Fx",  "Wacko Kit",  "Wood Bits",  "Metal Bits",  "Hands Kit",  "Scratches",  "AcstSnares",  "StSnares",  "AllKicks",  "DanceKick",  "EasySnares",  "Cuban",  "SynPopKit",  "Arabic Mix",  "BellyDance",  "DanceSnare",  "SpecialSFX",  "Synthetic",  "SFX Kit");
	$user_voices_mo["GMDR"] = array("Stereo GM");

	$user_voices_cs6x["PRE1"] = array("Grand", "Ivories", "For Ballad", "BasicRoadz", "DF Roadz", "RT Roadz", "SunShine", "Club Daz", "Fusion", "CP2000", "DXAtacky", "Dark DX", "Wurli", "Clavint", "Clav Wah", "Full", "Perc Org", "E Bird", "4 Bars", "Jazz", "Swish", "Vox", "Tube", "Gospel", "ClickOrgan", "Jimmy", "Accordion", "Monica", "18 String", "New Nylon", "JazzGtmelo", "Elec-Acous", "Acoustic", "ChorStrat", "Cry", "Blood", "Birdy", "Mute", "Feedback", "100 Watts", "Prec Bass", "Fing Sting", "Fretless", "Slap", "Upright", "Lately", "Mini", "Dry Syn", "Dark", "Deep Rez", "Background", "CelloSmall", "Big String", "Cello Big", "Mellow Str", "Pizzicato", "Small Anna", "ObiStrings", "AnaStrings", "Soft Syn", "Violin", "Agitato", "Harp", "Aah Choir", "Ooh Choir", "Choir Tak", "Med Brass", "Combi", "Fanfare", "Dark Brass", "Trombones", "Trumpet", "Mute Tpt", "Horns", "Oberhorns", "PowerSynth", "Fat Brazz", "Stabs", "Moon", "Brass", "Tenor Sax", "Alto Sax", "Soprano", "Clarinet", "Oboe", "Bassoon", "Pan Flute", "Breathy", "Smooth Saw", "Europe", "Lucky", "Sneaky", "Phazefilt", "Mini Pulse", "BreathSaw", "Lovely", "Swan", "Nuages", "Sleep", "Brassy", "5th Breath", "The Pad!", "Kemistry", "JM Pad", "Starlight", "Sitar", "Steel Drum", "Cyba Whip", "ChimeTree", "Glocken", "Marimba", "Eastern", "Gamelan", "Vibes", "Fingerbell", "Tiny Bell", "Pulsate", "TX 802", "Power Keys", "Arena Syn", "Strat Pad", "Wind Orch", "Soft Dream", "Amandla", "Turntables", "Rainstorm", "Sirens", "Helicopta");
	$user_voices_cs6x["PRE2"] = array("BriteGrand", "Slamming", "Danzze", "House", "M25", "AcidFly", "Garage Rds", "Road Case", "Amp Wurli", "Ibiza", "Meltpiano", "Ritzy", "Old Skool", "Fluffy", "Orbital", "Vox Conti", "First Bars", "RhoBassFiz", "Miles", "Sad Guitar", "P.F. Echo", "Trancy", "Mutiny", "Bassline", "DX100", "Modular", "Strobe", "D-sub", "Sine Sub", "Compton", "Velo", "Boom Bass", "Network", "Sonicbass", "Snoop", "Biscuit", "Monty", "Downright", "Drone", "Additive", "FM Perko", "Mediale", "Big Syn", "Chocolate", "Chorus", "Richchoir", "Chandelier", "Topia", "Sutra", "Panmonks", "Voicey", "TekkBrass", "CS80", "One Horn", "T-Eight", "EgoSix", "HausBrass", "MX Sax", "Hoppy Sax", "Tech Lead", "Rap Lead 1", "Rap Lead 2", "Rap Lead 3", "is more", "EchoSaw", "Sync Lead", "X-File", "Oasis", "Fat Sweep", "Luminosity", "Sartori", "Jupiter", "Wahbrass", "Sine Pad", "RoundGlass", "White Pad", "Dark Angel", "Warmer", "Dazed", "CM Pad", "Panorama", "Glacier", "Sunnydaze", "Cronen", "Sprinkler", "Nush", "Ethereal", "HPFx", "Sleep", "Chlorophyl", "Mayflower", "Light Ray", "Algae", "So Deep", "Jets", "Plukker", "G-na-G", "Del Mar", "Pulse Clav", "Rezzo", "Sebastian", "Saw Perc", "PolyPoly", "Portachord", "Play Hip", "Thin Man", "Spitter", "Straight", "Arabesque", "Tranzkor", "Percolator", "AnalogSplt", "Opener", "Collusion", "Double Arp", "DX Flangi", "Circle", "Laizer", "Healer", "Chips", "3D Light", "Chordal", "Soft Attck", "Orgmatic", "Short Cut", "StepSeq", "Alone", "Spectral");
	$user_voices_cs6x["PRE-DR"]  = array("Rock Kit", "House Kit", "Hip Kit", "Trance Kit", "Nasty Kit", "Brush Kit", "Pop Kit", "8o8 Kit");

	$user_voices_s80["PRE1"] = array("StereoGrnd", "StereoGnd2", "CF Grand M", "Dark Grand", "Difference", "Piano/Ep", "Piano/Strg", "Piano/Oohs", "CP2000", "Piano/DX", "Wurlitrm", "DF EP IV", "DF EP III", "Herb Roadz", "BasicRoadz", "19 Roadz", "Vic'sRoadz", "ErlyFusion", "Grapevine", "VintgCond", "DXAtacky", "DigiX Wave", "Dark DX", "Ice Piano", "ChorusBel", "Bel Roadz", "Glass EP", "SuperDyno", "PowerKeys", "Harpsicode", "Clav", "Clav Wah", "Perc Org", "Cool", "ClickOrgan", "Jazz", "Soft Rock", "Tube", "Contnental", "Swish", "4 Bars", "Full", "GiantDrbr", "Sunday", "Pipes", "New Nylon", "JazzGTmelo", "Melo Trmlo", "Strat Chor", "StratChor2", "18 String", "Acoustic", "MuteGtr", "DirtyTwn", "Feedback", "VOODOO MAN", "Rockabilly", "Funk It!!", "Upright", "Finger", "PickBass", "Fretless", "Slap", "Fngr & RW", "Background", "Big String", "Cello Big", "Chamberz", "SmallSect", "CelloSmall", "Pizz", "Harp", "Oboe", "Bssoon", "Clarnet", "Wind Orch", "SynthStrgs", "ObiStrings", "Fanfare", "MediumBrss", "Two Brass", "Brass&Sax", "Dark Class", "Stereo Brs", "Trumpet", "Mute Trpt", "Tenor Sax", "Alto Sax", "Bari Sax", "Soprano", "ObrBrass", "PowerSynth", "Synth Horn", "M Brass", "Moon AT", "SquishBrs", "Ooh Choir", "Ahh Choir", "Panmonks", "Pad Ooh", "Soft Pad", "FatSweep", "Cumulus", "Big Wing", "Slide in", "BPFx", "DigiSweep", "JM Pad", "Vermillion", "Magenta", "Liquito", "Shadow", "Vibes", "Marimba", "Gamelan", "Xylo", "Glocken", "Crotales", "Timpani", "SteelDrum", "Sitar", "BrthFlute", "Pan Flute", "Accordion", "Monica", "BluesHarp", "Amandla", "AnalogSplt");
	$user_voices_s80["PRE2"] = array("1001 Sub", "Trancy", "Velo", "Wonk", "Mini 1", "Mini 2", "D-sub", "Lately", "Dark", "Moonbass", "Snoop Bs", "LoTic Bass", "Taurus", "Fuzzline", "Deep One", "Squbase", "Portachrd", "Thin man", "PopularSyn", "Straight", "Poly", "Zap Comp", "AnaTonk", "Insomnia", "Q Hit", "BPF1", "T-Eight", "L7 octs", "NoizRezz", "GX", "Noise Harp", "Syntax", "Tri Solo", "Smooth Saw", "Frontline", "Lucky", "Sneaky", "Rap Lead 1", "Rap Lead 2", "Rap Lead 3", "PhazFilter", "SpaceWhirl", "X-File", "BreathSaw", "1 is more", "Mini Pulse", "Syntrump", "Eagle", "Oberweich", "5thBreath", "Rain Pad", "Vortex", "Sprinkler", "Astronaut", "BrassyPad", "Sine Pad", "Big Syn", "Berlin", "Filtopia", "Poppy Vox", "Arabesque", "Crecendar", "Soft Dream", "ChimzArt", "Seal", "Shine Seq", "Kickwheel", "Supersnap", "Opener", "Rosy", "LAizer", "2 Friends", "Synfonic", "Hard road", "Quartz", "Atom", "Chordal", "Orgmatic", "Ana Plus", "Frequencyz", "Psycho", "S - E", "Voltage", "Ectoplasm", "Millenium", "Noire", "Falling", "Topnotched", "Drumnotize", "Creature", "Develop", "Twilight", "RisingHigh", "90th Jimi", "Dew-drop", "SpaceTrain", "Brown Eyes", "Glacier", "Sahara", "Sunnydaze", "Starlight", "Roxy", "Bel Air", "Answers", "Bassline", "Boom Bass", "Drone", "Sweepy", "Super DX", "GangstaM", "FM Perko", "DX100", "BriteGrand", "Slamming", "Danzze", "House", "M25", "AcidFly", "Nite Roadz", "GS Brassy", "Grand Pad", "Ibiza", "Meltpiano", "HonkyTonk", "For Ballad", "ShineHarmo", "TripleDark", "StageBrite");
	$user_voices_s80["PRE-DR"]  = array("Rock Kit", "House Kit", "Hip Kit", "Trance Kit", "Nasty Kit", "Brush Kit", "Pop Kit", "8o8 Kit");
	
	$preset_waves["Motif Classic"] = array(1=>"Piano1 St", "Piano1 L", "Piano1 R", "Piano1Mono", "Piano1 St+", "Piano1 L+", "Piano1 R+", "Piano1 St-", "Piano1 L-", "Piano1 R-", "Piano2 St", "Piano2 L", "Piano2 R", "Piano2Mono", "Piano2 St+", "Piano2 L+", "Piano2 R+", "Piano2 St-", "Piano2 L-", "Piano2 R-", "Brite Pno", "Brite Pno-", "CP80", "CP80+", "CP80-", "EP1 Soft", "EP1 Soft+", "EP1 Soft-", "EP1 Med", "EP1 Med+", "EP1 Med-", "EP1 Hard", "EP1 Hard+", "EP1 Hard-", "EP2 Soft1", "EP2 Soft1+", "EP2 Soft1-", "EP2 Soft2", "EP2 Soft2+", "EP2 Soft2-", "EP2 Hard1", "EP2 Hard1+", "EP2 Hard1-", "EP2 Hard2", "EP2 Hard2+", "EP2 Hard2-", "EP3 Soft1", "EP3 Soft1+", "EP3 Soft1-", "EP3 Soft2", "EP3 Soft2+", "EP3 Soft2-", "EP3 Hard1", "EP3 Hard1+", "EP3 Hard1-", "EP3 Hard2", "EP3 Hard2+", "EP3 Hard2-", "Wurli", "Wurli+", "Wurli-", "DX1", "DX2", "DX3", "DX4", "DX5", "Clav1", "Clav1+", "Clav1-", "Clav2", "Clav2+", "Clav2-", "Clav3", "Clav3+", "Clav3-", "Harpsicord", "Celeste", "Vibraphone", "Mairmba", "Glocken", "Xylophone", "Tubular", "Bell", "BellSt1", "BellSt2", "BrBell", "SmBell", "Hibasi", "FingerCym", "StoneH", "StoneS", "Timpani", "RockVb", "RockPc", "Click", "Rock2", "Rock2+", "Rock2-", "JazzPrc", "JazzPrc-", "Jazz", "Jazz+", "Jazz-", "Full", "Full+", "Full-", "Swish", "Swish-", "Compact", "Compact-", "Portable", "Portable-", "BowNv", "BowVb", "Gospel", "Soul", "1stFour", "Draw 16'", "Draw 5 1/3", "Draw 8'", "Draw 4'", "Draw 2 2/3", "Draw 2'", "Draw 1 3/5", "Draw 1 1/3", "Draw 1'", "Draw 1+3", "Draw 1+3+", "Draw 1+3-", "Draw 2+4", "Draw 2+4+", "Draw 2+4-", "Draw Even", "Draw Even+", "Draw Even-", "Draw Odd", "Draw Odd+", "Draw Odd-", "Perc", "Perc+", "Perc-", "Rotar", "Clack", "RotarWhstl", "RotarGrit", "RotarGrit2", "SftTmp", "Pipe1St", "Pipe1L", "Pipe1R", "Pipe2", "Pipe3St", "Pipe3L", "Pipe3R", "Pipe4", "Pipe5", "Pipe6", "Pipe7", "Accordion", "TangoAcd", "Nylon", "Nylon Hi", "NylonHarm", "Steel Gtr1", "SteelGtrHi", "SteelGtrLo", "SteelHarm", "Steel Gtr2", "SteelGt2St", "SteelGt2Hi", "SteelGtr2-", "Jazz Gtr", "VintAmpA", "VintAmpB", "Strat", "StratN", "StratF", "StratSl", "StratSp", "StratMute", "StratHarm", "Front", "Dist Gtr 1", "Dist2", "DistMt", "Feedback", "PwrChrdSt", "PwrChdMono", "PlayFx", "PChdSt&Fx", "PChd&Fx", "Banjo", "A Bass", "A Bass+", "A Bass-", "A Bass FX", "PickBass", "FingerMM", "FingerMM+", "FingerMM-", "PrecRW", "PrecRW+", "PrecRW-", "PrecFW", "PrecFW+", "PrecFW-", "FingerWW", "FingerWW+", "FingerWW-", "SlapThmbmf", "SlapThmbff", "SlapPull", "SlapHarm", "SlapFxSoft", "SlapFxHard", "Thmb&Fx-mf", "Thmb&Fx-ff", "Pull&Fx", "Fretless", "Fretless+", "Fretless-", "ViolinVb", "ViolinVb+", "ViolinVb-", "ViolinSpc", "ViolinSpc+", "ViolinSpc-", "ViolaVb", "ViolaVb+", "ViolaVb-", "ViolaSpc", "ViolaSpc+", "ViolaSpc-", "CelloVb", "CelloVb+", "CelloVb-", "CelloSpc", "CelloSpc+", "CelloSpc-", "SoloVbCmb", "SoloVbCmb+", "SoloVbCmb-", "SoloSpcCmb", "SoloSpCmb+", "SoloSpCmb-", "ContraBass", "EnsMix", "EnsMixSt", "EnsMixL", "EnsMixR", "EnsMute", "EnsMute-", "EnsMuteSt", "HardEnsSt", "HardEnsSt+", "HardEnsSt-", "HardEnsL", "HardEnsL+", "HardEnsL-", "HardEnsR", "HardEnsR+", "HardEnsR-", "EnsMxLPSt", "EnsMxLP L", "EnsMxLP R", "EnsMuteLP", "EnsMuteLP-", "EnsMutLPSt", "HrdEnsLPSt", "HrdEnsLP L", "HrdEnsLP R", "Pizzicato", "PopPizz", "Harp", "BrsSctSt", "BrsSctSt+", "BrsSctSt-", "BrsSctL", "BrsSctL+", "BrsSctL-", "BrsSctR", "BrsSctR+", "BrsSctR-", "Trumpet", "Trumpet+", "Trumpet-", "Trumpet2", "Trumpet2+", "Trumpet2-", "Trombone", "Trombone-", "Trombone2", "SiftTrb", "SoftFlugel", "SoftFlugl-", "TrmptMute", "TrmptMute2", "TrumptMed", "TrumptSoft", "PicolTrmpt", "F.Horn", "F.Horn+", "F.Horn-", "Tuba", "Combi1", "Combi2", "Combi3", "Combi4", "SopranoSax", "SopranSax+", "SopranSax-", "AltoSaxVb", "AltoSaxNv", "AltoSaxNv+", "AltoSaxNv-", "TenorSax", "TenorSax+", "TenorSax-", "BaritonSax", "Clarinet", "Oboe", "EnglishHrn", "Basoon", "Bagpipe1", "Bagpipe2", "SaxBreath", "Harmonica", "FluteVb", "FluteVbAtk", "Flute", "Flute+", "Flute-", "PanFlute", "PanFlute-", 
											"Shakuhachi", "Recorder", "Bottle", "Ocarina", "Whistle", "BreathO.S.", "SteelDrum", "Sitar", "SitarWv1", "SitarWv2", "SitarWv3", "SitarWv4", "SitarWv5", "SitarWv6", "Tambura", "TamburaWv1", "TamburaWv2", "TamburaWv3", "HmDulcimar", "Shamisen", "Koto", "Kalimba", "Gamelan1", "Gamelan2", "Didgerido1", "Didgerido2", "Didgerido3", "DidgCmb1", "DidgCmb2", "Sho", "Log1", "Log2", "Wataiko", "DjembeEd", "DjembeMt", "DjembeOp", "DjembeCmb", "TabraBya", "TabraNah", "TablaMut", "TabraCmb", "UdoFinger", "Udo Hi", "Udo Low", "UduCombi", "Aahs St", "Aahs L", "Aahs R", "Ooh St", "Ooh L", "Ooh R", "ChoBreathL", "ChoBreathR", "ChoAahLPSt", "ChoAahLPL", "ChoAahLPR", "ChoOohLPSt", "ChoOohLPL", "ChoOohLPR", "SynVox", "VoxNoiz", "Itopia", "ModSaw", "FatSaw", "FatSaw-", "OBModSaw", "VPStrngSt", "VPStrngL", "VPStrngR", "OBStrings", "SyzleStrng", "Padd", "Darklight", "OBBrass", "Sync", "SyncLd", "PWMfast", "PWMslow", "CS80Brass", "P5Saw", "OBSaw", "Saw2", "3o3Saw", "3o3Saw2", "3o3Squ", "1o1Saw", "1o1Sub", "SawSqu", "SquSaw", "MgRamp", "MgBass1", "MgBass2", "MgBass3", "ModBass", "AnaBass1", "AnaBass2", "UniBass", "AnaBass3", "AnaBass4", "AnaBass5", "AnaBass6", "T8KickBass", "FMBass1", "FMBass2", "FMBass3", "FMBass4", "FMBass5", "FMBass6", "FMSquare", "FMShaper", "FMMetal1", "FMMetal2", "FMOrgan1", "FMOrgan2", "FMOrgan3", "FMOrgan4", "FMFunk", "FMGuitar", "FSBuzz", "WetPluck", "Lately-S", "Lately-L", "P10-1", "P10-2", "P10-3", "P25-1", "P25-2", "P50-1", "P50-2", "TriWv", "Digi01", "Digi02", "Digi03", "Digi04", "Digi05", "Digi06", "Digi07", "Digi08", "Digi09", "Digi10", "Digi11", "Digi12", "Bel1Wv", "Bel2Wv", "DigiVox1", "DigiVox2", "DigiVox3", "DigiVox4", "DigiVox5", "VoxG2", "VoxE3", "EP Wave 1", "EP Wave 2", "EP Wave 3", "EP Wave 4", "EP Wave 5", "EP Wave 6", "Org Wave1", "Org Wave2", "Org Wave3", "Sine", "Noise", "Mallet", "PnoNP", "EPNP", "VibeNP", "OrchHit", "VoxBell", "Melow", "WindChime", "BellAir", "BigSyn", "TranCho", "StabOrgLP", "Eery", "Electer", "HH Hit", "VoxAlk", "HiLo", "MultiPiano", "AirHoseSt", "AirHoseL", "AirHoseR", "Bubble", "Swarm", "Mother", "Lektronica", "SpaceScrem", "Resonator", "RadioNz", "OohFB", "Fairwave", "Hoo", "Mind Bell", "Loop145", "X-Fade", "ResoXFade", "Quiek", "LfoSeq", "Sonar1", "Sonar2", "HitOrch1", "HitBrass", "StabOrch", "StabGiant", "StabHard", "StabOrgan2", "StabAah", "Hit Uhh", "HitOrch2", "VoxDrum", "Ripper", "Glass", "IndusTom", "NzBurst", "Zap1", "Zap2", "HiQ1", "HiQ2", "VoxHitRev", "Bomb", "TapeRewnd", "FxGun2", "FxGun1", "Thunder", "TurnTable", "Police", "DoorSqk", "Heartbeat", "Helicopter", "Seashore", "Telephone", "TelRing", "Bird", "Stream", "Gunshot", "Applause", "RainLoop", "Scratch H", "Scratch L", "ScratchDwn", "ScratchHiF", "ScratchHiR", "ScratchLoF", "ScratchLoR", "ScratchBdF", "ScratchBdR", "ScratchSdF", "ScratchSdR", "ScratchVoF", "ScratchVoR", "ScratchStp", "ScratchSpn", "ScrathcHip", "ScratchHp2", "ScratchCmb", "ScratchCb2", "ScratchCb3", "ScratchCb4", "PickNoise1", "PickNoise2", "PickNoise3", "FretNoise", "PlayFxGt1", "PlayFxGt2", "PlayFxGt3", "PlayFxGt4", "PlayFxGt5", "PlayFxGt6", "PlayFxGt7", "PlayFxGt8", "PlayFxGt9", "PlayFxGt10", "PlayFxGt11", "PlayFxGt12", "PlayFxGt13", "PlayFxABa1", "PlayFxABa2", "PlayFxABa3", "PlayFxABa4", "PlayFxABa5", "PlayFxABa6", "PlayFxABa7", "PlayFxABa8", "PlayFxABa9", "PlyFxABa10", "PlyFxSlp1S", "PlyFxSlp1H", "PlyFxSlp2S", "PlyFxSlp2H", "PlyFxSlp3S", "PlyFxSlp3H", "PlyFxSlp4S", "PlyFxSlp4H", "PlyFxSlp5S", "PlyFxSlp5H", "PlyFxSlp6S", "PlyFxSlp6H", "PlyFxSlp7S", "PlyFxSlp7H", "PlyFxSlp8S", "PlyFxSlp8H", "PlyFxSlp9S", "PlyFxSlp9H", "PlyFxSl10S", "PlyFxSl10H", "PlyFxSl11S", "PlyFxSl11H", "PlyFxSl12S", "PlyFxSl12H", "PlyFxSl13S", "PlyFxSl13H", "PlyFxSl14S", "PlyFxSl14H", "PlyFxSl15S", "PlyFxSl15H", "PlyFxSl16S", "PlyFxSl16H", "PlyFxSl17S", "PlyFxSl17H", "PlyFxSl18S", "PlyFxSl18H", "PlyFxSl19S", "PlyFxSl19H", "PlyFxSl20S", "PlyFxSl20H", "CongaOp", "CongaSlp", "CongaTip", "CongaHeel", "QuintOp", "QuintSlp", "QuintTip", "QuintHeel", "TumbaOp", "TumbaSlp", "TumbaTip", "TumbaHeel", 
											"CuicaLo", "CuicaHi", "BongoHi1-2", "BongoHi1", "BongoHi2", "BongoHHeel", "BongoLo1-3", "BongoLo1", "BongoLo2", "BongoLo3", "TmbaleH1-3", "TimbaleHi1", "TimbaleHi2", "TimbaleHi3", "TmbaleL1-3", "TimbaleLo1", "TimbaleLo2", "TmblPailaH", "TmblPailaL", "GanzaAc", "GanzaBk", "GanzaFw", "Maracas1-2", "MaracasSlr", "MaracasStc", "Cabasa1-2", "Cabasa1", "Cabasa2", "Caxixi1-2", "Caxixi1", "Caxixi2", "Shaker1-2", "Shaker1", "Shaker2", "ShakerHip1", "ShakerHip2", "ShakerHip3", "ShakerHip4", "ShekereDw", "ShekereUp", "ShekereSap", "TambrnSw", "TambrnHit", "TambrnShk", "PandieroOp", "PandierThm", "PandierTip", "PandroHeel", "TmbourimOp", "TmbourmFng", "TmbourimMt", "AgogoHi", "AgogoLo", "AgogoLoTap", "GuiroLong", "GuiroShort", "GuiroSwp", "SurdoOp", "SurdoMt", "Stick", "Stick2", "Castanet", "Clave", "WoodBlock", "Vibraslap", "Whistle", "TriangleSw", "TriangleOp", "TriangleMt", "HandClapSt", "HandClapL", "HandClapR", "Cowbel1", "Cowbell2", "MamboBel", "MamboBdy", "ChaCha", "SleighBel", "BellTree", "ClapT9", "ClapAnSm", "CongaT8", "CowBelT8", "CowBelRX11", "CowBelAnCR", "AnaShaker", "TambrnRX5", "TambrnAnCR", "MarcsT8", "ClaveT8", "AnaClick", "BdNmSt1-2", "BdNm1St", "BdNm2St", "BdNmL1-2", "BdNmR1-2", "BdNm1L", "BdNm1R", "BdNm2L", "BdNm2R", "BdFkSt1-2", "BdFk1St", "BdFk2St", "BdFkL1-2", "BdFkR1-2", "BdFkML", "BdFkMR", "BdFkHL", "BdFkHR", "BdHiSt", "BdHiL", "BdHiR", "BdLoSt", "BdLoL", "BdLoR", "BdHSonSt", "BdHSonL", "BdHSonR", "BdLSonSt", "BdLSonL", "BdLSonR", "BdFkSonSt", "BdFkSonL", "BdFkSonR", "BdRk1St", "BdRk1L", "BdRk1R", "BdRk2St", "BdRk2L", "BdRk2R", "BdDry1", "BdDry2", "BdPop", "BdVar1", "BdVar2", "BdRoom1", "BdRoom2", "BdRoom3", "BdGate", "BdFXGate", "BdT9-1", "BdT9-2", "BdT9-3", "BdT9-4", "BdT9Hd1", "BdT9Hd2", "BdT9Hd3", "BdT8-1", "BdT8-2", "BdT8-3", "BdAnSm", "BdAnCR", "BdHuman1", "BdHuman2", "BdBlip", "BdBlpHd", "BdJngl1", "BdJngl2", "BdJngl3", "BdD&B1", "BdD&B2", "BdR&B1", "BdR&B2", "BdHipDp", "BdBrkDp", "BdBreak1", "BdBreak2", "BdBreakHvy", "BdBreakHrd", "BdDist1", "BdDist2", "BdDist3", "BdDist4", "BdDist5", "BdDistRM", "Bd+HH", "BdFxHmr", "BdZapHrd", "BdZapMid", "BdSus", "BdTekPower", "BdHardLong", "BdATite", "BdAnHard", "BdLofi", "BdThkSkn", "BdSlimy", "SdNmSt1-4", "SdNmSt1-3", "SdNmSt2-4", "SdNmSt1-2", "SdNmSt2-3", "SdNmSt3-4", "SdNm1St", "SdNm2St", "SdNm3St", "SdNm4St", "SdNmL1-4", "SdNmR1-4", "SdNm1L", "SdNm1R", "SdNm2L", "SdNm2R", "SdNm3L", "SdNm3R", "SdNm4L", "SdNm4R", "SdFkSt1-3", "SdFkSt1-2", "SdFkSt2-3", "SdFkSt1/3", "SdFk1St", "SdFk2St", "SdFk3St", "SdFkL1-3", "SdFkR1-3", "SdFk1L", "SdFk1R", "SdFk2L", "SdFk2R", "SdFk3L", "SdFk3R", "SdFkAySt", "SdFkAyL", "SdFkAyR", "SdBsSt1-3", "SdBsSt1-2", "SdBsSt2-3", "SdBsSt1/3", "SdBs1St", "SdBs2St", "SdBs3St", "SdBsL1-3", "SdBsR1-3", "SdBs1L", "SdBs1R", "SdBs2L", "SdBs2R", "SdBs3L", "SdBs3R", "SdSonSt1-4", "SdSonSt1-3", "SdSonSt2-4", "SdSonSt1-2", "SdSonSt2-3", "SdSonSt3-4", "SdSon1St", "SdSon2St", "SdSon3St", "SdSon4St", "SdSonL1-4", "SdSonR1-4", "SdSon1L", "SdSon1R", "SdSon2L", "SdSon2R", "SdSon3L", "SdSon3R", "SdSon4L", "SdSon4R", "SdBlSt1-3", "SdBlSt1-2", "SdBlSt2-3", "SdBlSt1/3", "SdBl1St", "SdBl2St", "SdBl3St", "SdBlL1-3", "SdBlR1-3", "SdBl1L", "SdBl1R", "SdBl2L", "SdBl2R", "SdBl3L", "SdBl3R", "SdBhSt1-3", "SdBhSt1-2", "SdBhSt2-3", "SdBhSt1/3", "SdBh1St", "SdBh2St", "SdBh3St", "SdBhL1-3", "SdBhR1-3", "SdBh1L", "SdBh1R", "SdBh2L", "SdBh2R", "SdBh3L", "SdBh3R", "SdLdwSt1-4", "SdLdwSt1-3", "SdLdwSt2-4", "SdLdwSt1-2", "SdLdwSt2-3", "SdLdwSt3-4", "SdLdw1St", "SdLdw2St", "SdLdw3St", "SdLdw4St", "SdLdwL1-4", "SdLdwR1-4", "SdLdw1L", "SdLdw1R", "SdLdw2L", "SdLdw2R", "SdLdw3L", "SdLdw3R", "SdLdw4L", "SdLdw4R", "SdHipSt1-2", "SdHip1St", "SdHip2St", "SdHipL1-2", "SdHipR1-2", "SdHip1L", "SdHip1R", "SdHip2L", "SdHip2R", "SdRkOp1St", "SdRkOp1L", "SdRkOp1R", "SdRkMte1St", "SdRkMte1L", "SdRkMte2R", "SdRkRim1St", "SnRkRim1L", "SdRkRim1R", "SdRkOp2St", "SdRkOp2L", "SdRkOp2R", "SdRkMte2St", "SdRkMte2L", "SdRkMte2R", "SdRkRim2St", "SdRkRim2L", "SdRkRim2R", "SdRkFlmSt", "SdRkFlmL", "SdRkFlmR", "SdPicol", "SdPcRim", 
											"SdPcRim2", "SdMid", "SdMdRim", "SdAmb", "SdGate1", "SdGate2", "SdLdwHMono", "SdBrRim", "SdDry", "SdHeavy", "SdGM", "SdRkStk1St", "SdRkStk1L", "SnRkStk1R", "SdRkStk2St", "SdRkStk2L", "SdRkStk2R", "SdHpStk1", "SdHpStk2", "SdHpStk3", "SdHpStk4", "SdHpStk5", "SdHpStk6St", "SdHpStk6L", "SdHpStk6R", "SdHpStk7", "SdHipStk8", "SdClRmSt", "SdClRmL", "SdClRmR", "SdClRim2", "SdClRim3", "SdRkRolSt", "SdRkRolL", "SdRkRolR", "SdRkRolDSt", "SdRkRolDL", "SdRkRolDR", "SnLvRolSt", "SnLvRolL", "SnLvRolR", "SdRollMono", "SdBrMtSt", "SdBrMtL", "SdBrMtR", "SdBrMt2St", "SdBrMt2L", "SdBrMt2R", "SdBrSwrSt", "SdBrSwrL", "SdBrSwrR", "SdBSwrAtSt", "SdBrSwrAtL", "SdBrSwrAtR", "SdT9-1", "SdT9-2", "SdT9-3", "SdT9-4", "SdT9-5", "SdT9Gate", "SdT9Rim", "SdT8-1", "SdT8-2", "SdT8-3", "SdT8-4", "SdT8-5", "SdT8Rim", "SdAnSm", "SdAnSmRim", "SdAnCR", "SdAnCRRim", "SdHuman1", "SdHuman2", "SdJngl1", "SdJngl2", "SdJngl3", "SdJnglFx", "SdD&B1", "SdD&B2", "SdD&B3", "SdD&B4", "SdR&B1", "SdR&B1Rm", "SdR&B2", "SdHip1", "SdHip2", "SdHip3", "SdHipGate", "SdHipRm1", "SdHipRm2", "SdHipRm3", "SdHipRm4", "SdHipRm5", "SdBreak1", "SdBreak2", "SdBreak3", "SdBreakHvy", "SdBreakRol", "SdFx1", "SdFx2", "SdFx3", "SdFx4", "SdClpAna", "SdDist", "SdCut", "SdDodgH", "SdDodgL", "SdFM", "SdFMRim", "SdSyn", "SdClappy", "SdTimber", "SdWood", "SdHammer", "SdLofi", "SdRimSE", "HHClSt1-4", "HHCl1St", "HHCl2St", "HHCl3St", "HHCl4St", "HHClL1-4", "HHClR1-4", "HHCl1L", "HHCl1R", "HHCl2L", "HHCl2R", "HHCl3L", "HHCl3R", "HHCl4L", "HHCl4R", "HHPdlSt", "HHPdlL", "HHPdlR", "HHOpSt", "HHOpL", "HHOpR", "HHClFtSt", "HHClFtL", "HHClFtR", "HHHlf2St", "HHHlf2L", "HHHlf2R", "HHOp2St", "HHOp2L", "HHOp2R", "HHClRkStSw", "HHClRkSSt", "HHClRkHSt", "HHClRkLSw", "HHClRkRSw", "HHClRkSL", "HHClRkSR", "HHClRkHL", "HHClRkHR", "HHPdRkStSw", "HHPdlRkLSw", "HHPdlRkRSw", "HHClRk2St", "HHClRk2L", "HHClRk2R", "HHPdlRkSt", "HHPdlRkL", "HHPdlRkR", "HHOpRkStSw", "HHOpRkSt", "HHHfOpRkSt", "HHOpRkLSw", "HHOpRkRSw", "HHOpRkL", "HHOpRkR", "HHHlfOpRkL", "HHHlfOpRkR", "HHClMono", "HHOpMono", "HHPdlMono", "HHClT9", "HHOpT9", "HHClT8-1", "HHOpT8-1", "HHClT8-2", "HHOpT8-2", "HHClRX5", "HHClAnCR", "HHOpAnCR", "HHClBreak", "HHPdlBreak", "HHClD&B", "HHPdlD&B", "HHOpD&B", "HHRvD&B", "HHClTek", "HHOpTek", "HHClHip", "HHPdlHip", "HHOpHip", "HHClLoFi", "HHOpLoFi", "HHClSyn", "HHOpSyn", "HHClFx", "HHOpFx", "HHOpHuman", "TomHiSt", "TomHiL", "TomHiR", "TomMdSt", "TomMdL", "TomMdR", "TomLoSt", "TomLoL", "TomLoR", "TomFlSt", "TomFlL", "TomFlR", "TomRkHiSt", "TomRkHiL", "TomRkHiR", "TomRkMdSt", "TomRkMdL", "TomRkMdR", "TomRkLoSt", "TomRkLoL", "TomRkLoR", "TomMonoHi", "TomMonoLo", "TomDryHi", "TmDryLo", "TomAmbHi", "TomAmbLo", "TomT9Hi", "TomT9Lo", "TomT8", "TomSyn1", "TomSyn2", "TomAnSm", "TomDistHi", "TomDistLo", "CrashSt", "CrashL", "CrashR", "Crash", "Crash2", "RideSt", "RideL", "RideR", "CupSt", "CupL", "CupR", "RideMono", "CupMono", "CupMono2", "ChinaSt", "ChinaL", "ChinaR", "China", "SplashSt", "SplashL", "SplashR", "CrashT9", "CrashT8", "CrashSyn", "RideT9", "RevCymbal", "HHClRL1-4", "HHCl1RL", "HHCl2RL", "HHCl3RL", "HHCl4RL", "HHPdlRL", "HHOpRL", "HHClFtRL", "HHHlf2RL", "HHOp2RL", "HHClRkRLSw", "HHClRkSRL", "HHClRkHRL", "HHPdRkRLSw", "HHClRk2RL", "HHPdlRkRL", "HHOpRkRLSw", "HHOpRkRL", "HHHfOpRkRL", "TomHiRL", "TomMdRL", "TomLoRL", "TomFlRL", "TomRkHiRL", "TomRkMdRL", "TomRkLoRL", "CrashRL", "RideRL", "CupRL", "ChinaRL", "SplashRL");
	
	$preset_waves["S90"] = array_merge($preset_waves["Motif Classic"], array("GndSoftS", "GndSoftL", "GndSoftR", "GndSoftM", "GndSoftS", "GndSoftL", "GndSoftR", "GndSoftM", "GndSoftS", "GndSoftL", "GndSoftR", "GndSoftM", "GndMedSt", "GndMedL", "GndMedR", "GndMedMn", "GndMedSt", "GndMedL+", "GndMedR+", "GndMedMn", "GndMedSt", "GndMedL-", "GndMedR-", "GndMedMn", "GndHardS", "GndHardL", "GndHardR", "GndHardM", "GndHardS", "GndHardL", "GndHardR", "GndHardM", "GndHardS", "GndHardL", "GndHardR", "GndHardM", "GndSwSt1", "GndSwSt2"));
	
	$preset_waves["Motif ES"] = array(1=>"GrndStSw1", "GrndStSw2", "GrndStS", "GrndStM", "GrndStH", "GrndMnSw1", "GrndMnSw2", "GrndMnS", "GrndMnM", "GrndMnH", "GrndStSw1+", "GrndStSw2+", "GrndStS+", "GrndStM+", "GrndStH+", "GrndMnSw1+", "GrndMnSw2+", "GrndMnS+", "GrndMnM+", "GrndMnH+", "GrndStSw1-", "GrndStSw2-", "GrndStS-", "GrndStM-", "GrndStH-", "GrndMnSw1-", "GrndMnSw2-", "GrndMnS-", "GrndMnM-", "GrndMnH-", "Brite Pno", "Brite Pno-", "CP80", "CP80+", "CP80-", "EP1 Soft", "EP1 Soft+", "EP1 Soft-", "EP1 Med", "EP1 Med+", "EP1 Med-", "EP1 Hard", "EP1 Hard+", "EP1 Hard-", "EP2 Soft1", "EP2 Soft1+", "EP2 Soft1-", "EP2 Soft2", "EP2 Soft2+", "EP2 Soft2-", "EP2 Hard1", "EP2 Hard1+", "EP2 Hard1-", "EP2 Hard2", "EP2 Hard2+", "EP2 Hard2-", "EP3 Soft1", "EP3 Soft1+", "EP3 Soft1-", "EP3 Soft2", "EP3 Soft2+", "EP3 Soft2-", "EP3 Hard1", "EP3 Hard1+", "EP3 Hard1-", "EP3 Hard2", "EP3 Hard2+", "EP3 Hard2-", "Wurli", "Wurli+", "Wurli-", "DX1", "DX2", "DX3", "DX4", "DX5", "Clav1", "Clav1+", "Clav1-", "Clav2", "Clav2+", "Clav2-", "Clav3", "Clav3+", "Clav3-", "Harpscd", "Celeste", "Vibraphone", "Mairmba", "GlockenSpl", "Xylophone", "TubularBel", "Bell", "BellSt1", "BellSt2", "BrBell", "SmBell", "FingerCym", "HandBell", "Hibasi", "StoneH", "StoneS", "WoodBell1", "WoodBell2", "TimpStSw", "TimpStSft", "TimpStHrd", "TimpSw L", "TimpSft L", "TimpHrd L", "TimpSw R", "TimpSft R", "TimpHrd R", "RockVb", "RockPc", "Click", "Rock2", "Rock2+", "Rock2-", "JazzPrc", "JazzPrc-", "Jazz", "Jazz+", "Jazz-", "Full", "Full+", "Full-", "Swish", "Swish-", "Compact", "Compact-", "Portable", "Portable-", "BowNv", "BowVb", "Gospel", "Soul", "1stFour", "Draw 16'", "Draw 5 1/3", "Draw 8'", "Draw 4'", "Draw 2 2/3", "Draw 2'", "Draw 1 3/5", "Draw 1 1/3", "Draw 1'", "Draw 1+3", "Draw 1+3+", "Draw 1+3-", "Draw 2+4", "Draw 2+4+", "Draw 2+4-", "Draw Even", "Draw Even+", "Draw Even-", "Draw Odd", "Draw Odd+", "Draw Odd-", "Perc", "Perc+", "Perc-", "Rotar", "Clack", "RotarWhstl", "RotarGrit", "RotarGrit2", "SftTmp", "Pipe1St", "Pipe1L", "Pipe1R", "Pipe2", "Pipe3St", "Pipe3L", "Pipe3R", "Pipe4", "Pipe5", "Accordion", "TangoAcd", "Nylon St", "Nylon L", "Nylon R", "NylonHrmSt", "NylonHrm L", "NylonHrm R", "StlOpnM St", "StlOpnM L", "StlOpnM R", "StlOpnH St", "StlOpnH L", "StlOpnH R", "StlHmmr St", "StlHmmr L", "StlHmmr R", "StlSld St", "StlSld L", "StlSld R", "StlHarm St", "StlHarm L", "StlHarm R", "StlMute St", "StlMute L", "StlMute R", "StlDead St", "StlDead L", "StlDead R", "StlFx St", "StlFx L", "StlFx R", "StlSw St", "StlSw Mn", "StlHmHmSt", "StlHmHmMn", "StlMtDdSt", "StlMtDdMn", "StlFxSdHrm", "StlFxSwHmr", "StlFxMtHmr", "StlFxDdHmr", "StlDdMtHmr", "HiStr S St", "HiStr S L", "HiStr S R", "HiStr H St", "HiStr H L", "HiStr H R", "HiStrFXSt", "HiStrFX L", "HiStrFX R", "HiStr FX2", "ClnOpenM", "ClnOpenH", "ClnHmmr", "ClnSlap", "ClnSlide", "ClnHarmo", "ClnMute", "ClnDead", "ClnFX", "ClnSwSlpFX", "ClnHmrHrm", "ClnMutDed", "ClnFxSdHrm", "ClFxSwSlHm", "ClnFxSwHmr", "ClnFxMtHmr", "ClnFxDdHmr", "ClnDdMtHmr", "Jazz Gtr", "VintAmpA", "VintAmpB", "Front", "HmBckrM", "HmBckrH", "Dist Open", "Dist Harmo", "Dist Mute", "Ovrdrv Opn", "Ovrdrv Mut", "Dist FX", "Dist/OvrFX", "FeedBack", "PwrChrdSt", "PwrChdMono", "PlayFx Mix", "PChdSt&Fx", "PChd&Fx", "Banjo", "Aco M", "Aco H", "Aco Harmo", "Aco Dead", "Aco FX", "Aco FX2", "Aco Ded FX", "Aco Sw", "Aco M+", "Aco H+", "Aco M-", "Aco H-", "PickOpen", "PickHarm", "PickMute", "PickDead", "Pick FX", "Pick Mt FX", "Pick Dd FX", "Pick+", "Pick Mt+", "Pick-", "Pick Mt-", "PickFxHrm", "PickFxOpn", "PickFxMute", "PickFxDead", "PickOpHarm", "Fing M", "Fing H", "FingHarmo", "Fng-Ded-FX", "Fing Sw", "Fing M+", "Fing H+", "Fing M-", "Fing H-", "Fing Dead", "PrecRW M", "PrecRW H", "PrecRW M+", "PrecRW H+", "PrecRW M-", "PrecRW H-", "PrecFW", "PrecFW+", "PrecFW-", "Slap", "Slap2", "SlapHarmo", "Frtls", "Frtls Hrm", "Frtls-DdFX", "Frtls+", "Frtls-", "Frtls Dead", "EBassFX", "ViolnStrt", "ViolnStrt+", "ViolnStrt-", "ViolinVb", "ViolinVb+", "ViolinVb-", "ViolinVb2", "ViolinVb2+", "ViolinVb2-", "ViolaVb", "ViolaVb+", "ViolaVb-", "ViolaVb2", "ViolaVb2+", 
										"ViolaVb2-", "CelloVb", "CelloVb+", "CelloVb-", "CelloVb2", "CelloVb2+", "CelloVb2-", "Contrabass", "Contrabas+", "Contrabas-", "SoloVbCmb", "SoloVbCmb+", "SoloVbCmb-", "SoloVbCmb2", "SoloVbCm2+", "SoloVbCm2-", "SoloSpcCmb", "SoloSpCmb+", "SoloSpCmb-", "Pizz1 St", "Pizz1 Mn", "Pizz2", "Pizz3", "PopPizz", "EnsMix", "EnsMixSt", "EnsMixL", "EnsMixR", "EnsMute", "EnsMute-", "EnsMuteSt", "HardEnsSt", "HardEnsSt+", "HardEnsSt-", "HardEnsL", "HardEnsL+", "HardEnsL-", "HardEnsR", "HardEnsR+", "HardEnsR-", "EnsMxLPSt", "EnsMxLP L", "EnsMxLP R", "EnsMuteLP", "EnsMuteLP-", "EnsMutLPSt", "HrdEnsLPSt", "HrdEnsLP L", "HrdEnsLP R", "Harp", "BrsSctSt", "BrsSctSt+", "BrsSctSt-", "BrsSctL", "BrsSctL+", "BrsSctL-", "BrsSctR", "BrsSctR+", "BrsSctR-", "BrassFall", "Trumpet1", "Trumpet2M", "Trumpet2H", "TrmptMute", "PicolTrmpt", "Trombone", "Trombone-", "Trombone2", "SoftTrb", "SoftFlugel", "SoftFlugl-", "FlugelHorn", "FrncHrn St", "FrncHrn L", "FrncHrn R", "FrncHrnSt+", "FrncHrn L+", "FrncHrn R+", "FrncHrnSt-", "FrncHrn L-", "FrncHrn R-", "FrncHrSol", "FrncHrSol+", "FrncHrSol-", "Tuba", "Soprano", "Soprano2", "Alto", "Alto2", "AltoSaxVb", "Tenor", "Tenor2", "Baritone", "Clarinet", "Clarinet2", "Oboe", "OboeVb", "EngHorn1", "EngHorn2", "Bassoon1", "Bassoon2", "Bagpipe1", "Bagpipe2", "SaxBreath", "Harmonica", "ChrmtcHarp", "BluesHarp", "Flute", "FluteVb", "FluteVbAtk", "Piccolo", "PanFlute", "PanFlute-", "IrishPipe", "Shakuhachi", "Recorder", "Bottle", "Ocarina", "Whistle", "BreathO.S.", "Didgerido1", "Didgerido2", "Didgerido3", "DidgCmb1", "DidgCmb2", "Sho", "Shanai", "Ney", "Kaval", "Keman", "Sitar", "SitarWv1", "SitarWv2", "SitarWv3", "SitarWv4", "SitarWv5", "SitarWv6", "Tambura", "TamburaWv1", "TamburaWv2", "TamburaWv3", "Santur", "Ud", "Kanun", "Baglama", "Bouzouk", "Shamisen", "Koto", "Kalimba", "Gamelan1", "Gamelan2", "SteelDrum", "Log1", "Log2", "Wataiko", "DjembeEd", "DjembeMt", "DjembeOp", "DjembeCmb", "TablaBya", "TablaNah", "TablaMut", "TablaCmb", "SmlTablDom", "SmlTablSnp", "SmlTablSak", "SmlTablTak", "BigTablDom", "BigTablTak", "BigTablSak", "TablaDom", "TablaTak1", "TablaTak2", "TablaTik1", "TablaTik2", "TablaTik3", "TablaSak1", "TablaTrem", "UdoFinger", "Udo Hi", "Udo Low", "UduCombi", "Dohol L", "Dohol H", "BarasimDom", "BarasimSak", "BarasimTak", "Segal Dom", "Segal Tak", "Twaisat", "Twaisat2", "Twaisat3", "Twaisat4", "LamaCym", "Mondira", "TibetanBel", "TibetnBowl", "Ghunghuru", "HahChoirSt", "HahChoir L", "HahChoir R", "OohChoirSt", "OohChoir L", "OohChoir R", "Ooh St", "Ooh L", "Ooh R", "ChoBreathL", "ChoBreathR", "ChoOohLPSt", "ChoOohLPL", "ChoOohLPR", "SynVox", "VoxNoiz", "Itopia", "PWMStrg St", "PWMStrg Mn", "LongSaw", "FatSaw St", "FatSawMn", "FatSawMn-", "OBModSaw", "VPStrngSt", "VPStrngL", "VPStrngR", "OBStrings", "SyzleStrng", "Padd", "Darklight", "OBBrass", "Trance St", "Trance Mn", "RingMod", "SyncLFO", "Sync", "SyncLd", "PWMfast", "PWMslow", "CS80Brass", "P5SawLp", "P5SawAtk", "P5SawAtRnd", "OBSaw", "Saw2", "3o3Saw", "3o3Saw2", "3o3Squ", "1o1Saw", "1o1Sub", "SawSqu", "SquSaw", "MiniBa1", "MiniBa2", "MiniBa3", "MiniBa3-a", "MiniBa3-b", "Synbass", "Punch", "SynthBa1", "SynthBa2", "BlipBass", "KlickBass", "PulsBass", "ShortUni", "NoiseBass", "MgRamp", "MgBass1", "MgBass2", "MgBass3", "ModBass", "AnaBass1", "AnaBass2", "UniBass", "AnaBass3", "AnaBass4", "AnaBass5", "AnaBass6", "T8KickBass", "FMBass1", "FMBass2", "FMBass3", "FMBass4", "FMBass5", "FMBass6", "MiniBlip1", "MiniBlip2", "MiniBlip3", "MiniBlip4", "MiniBlip5", "MiniBlip6", "FMSquare", "FMShaper", "FMMetal1", "FMMetal2", "FMOrgan1", "FMOrgan2", "FMOrgan3", "FMOrgan4", "DarkOrgan", "FMFunk", "FMGuitar", "FSBuzz", "WetPluck", "Lately-S", "Lately-L", "P10-1", "P10-2", "P10-3", "P25-1", "P25-2", "P50-1", "P50-2", "TriWv", "Digi01", "Digi02", "Digi03", "Digi04", "Digi05", "Digi06", "Digi07", "Digi08", "Digi09", "Digi10", "Digi11", "Digi12", "Bel1Wv", "Bel2Wv", "DigiVox1", "DigiVox2", "DigiVox3", "DigiVox4", "DigiVox5", "VoxG2", "VoxE3", "DigiEb", "DigiEg", "DigiBow1", "DigiBow2", 
										"DigiOsc1", "DigiOsc2", "DigiOsc3", "DigiOsc4", "DigiOsc5", "DigiOc6", "DigiOsc7", "Wave 1", 
										"Wave 2", "Wave 3", "Wave 4", "Wave 5", "EP Wave 6", "Org Wave1", "Org Wave2", "Org Wave3", "DigiBell1", "DigiBell2", "DigiBell3", "DigiBell4", "DigiBell5", "DigiBell6", "DigiBell7", "Spectrum1", "Spectrum2", "Spectrum3", "Sine", "Noise", "VibeNP", "Birch St", "Birch L", "Birch R", "Willow St", "Willow L", "Willow R", "Anemone St", "Anemone L", "Anemone R", "MagnitudSt", "Magnitud L", "Magnitud R", "SabreTone", "StrngPadSt", "StrngPad L", "StrngPad R", "VocalRes", "OrchHit1St", "OrchHit1 L", "OrchHit1 R", "OrchHit2St", "OrchHit2 L", "OrchHit2 R", "OrchHit3", "VoxBell", "Melow", "WindChime", "BellAir", "BigSyn", "TranCho", "StabOrgLP", "Eery", "Electer", "HH Hit", "VoxAlk", "MultiPiano", "BellChoir", "DirtyPerc", "HiLo", "AirHoseSt", "AirHoseL", "AirHoseR", "Bubble", "Swarm", "Lektronica", "SpaceScrem", "RadioNz", "OohFB", "Fairwave", "Hoo", "Mind Bell", "Loop145", "X-Fade", "ResoXFade", "Quiek", "LfoSeq", "HopFX1", "HopFX2", "Sonar1", "Sonar2", "HitOrch1", "HitBrass", "StabOrch", "StabGiant", "StabHard", "StabOrgan2", "StabAah", "Hit Uhh", "HitOrch2", "VoxDrum", "Raspberry", "DigiBreath", "EngnRoomSt", "EngnRoom L", "EngnRoom R", "DigiHeli", "Shower St", "Shower L", "Shower R", "ComputerSt", "Computer L", "Computer R", "Chatter", "Ripper", "Glass", "BellFX1", "BellFX2", "IndusTom", "NzBurst", "Zap1", "Zap2", "ElPerc1", "ElPerc2", "ElPerc3", "ElPerc4", "ElPerc5", "ElPerc6", "ElPerc7", "ElPerc8", "ElPerc9", "ElPerc10", "ElPerc11", "ElPerc12", "ElPerc13", "ElPerc14", "ElPerc15", "HiQ1", "HiQ2", "VoxHitRev", "Bomb", "TapeRewnd", "FxGun2", "FxGun1", "Thunder", "TurnTable", "Police", "DoorSqk", "HeartBeat", "Helicopter", "Seashore", "Telephone", "TelRing", "Bird", "Stream", "Gunshot", "Applause", "RainLoop", "Scratch H", "Scratch L", "ScratchDwn", "ScratchHiF", "ScratchHiR", "ScratchLoF", "ScratchLoR", "ScratchBdF", "ScratchBdR", "ScratchSdF", "ScratchSdR", "ScratchVoF", "ScratchVoR", "ScratchStp", "ScratchSpn", "ScratchHip", "ScratchHp2", "ScratchAtk", "ScratchR&B", "ScratchCmb", "ScratchCb2", "ScratchCb3", "ScratchCb4", "Conga Opn", "CongaOpSlp", "CongaTip", "CongaBtm", "CongaStick", "Quint1Opn", "Quint1Slp", "Quint2Opn", "Quint2Heel", "TumbaOpen", "TumbaSlp", "TumbaTip", "TumbaHeel", "CuicaLo", "CuicaHi", "Bongo L", "Bongo H1", "Bongo H2", "TmbaleH1-3", "TimbaleHi1", "TimbaleHi2", "TimbaleHi3", "TmbaleL1-3", "TimbaleLo1", "TimbaleLo2", "TimbaleRim", "TmblPailaH", "TmblPailaL", "Paila L", "Paila H", "GanzaAc", "GanzaBk", "GanzaFw", "Maracas1-2", "MaracasSlr", "MaracasStc", "Cabasa1-2", "Cabasa1", "Cabasa2", "Caxixi1-2", "Caxixi1", "Caxixi2", "Shaker 1", "Shaker 2", "Shaker 3", "ShakerHip1", "ShakerHip2", "ShakerHip3", "ShakerHip4", "ShekereDw", "ShekereUp", "ShekereSap", "Tumbo 1", "Tumbo 2", "Tumbo 3", "TambrnSw", "TambrnHit", "TambrnShk", "PandieroOp", "PandierThm", "PandierTip", "PandroHeel", "TmbourimOp", "TmbourmFng", "TmbourimMt", "AgogoHi", "AgogoLo", "AgogoLoTap", "GuiroLong", "GuiroShort", "GuiroSwp", "SurdoOp", "SurdoMt", "Stick", "Stick2", "Castanet", "Clave", "WoodBlock", "Vibraslap", "Whistle", "TriangleSw", "TriangleOp", "TriangleMt", "HandClapSt", "HandClapL", "HandClapR", "Handbell L", "Handbell H", "Cowbell1", "Cowbell2", "MamboBl1", "MamboBl2", "MamboBdy", "ChaCha", "SleighBel", "BellTree", "ClapT9", "ClapAnSm", "ElClap1", "ElClap2", "CongaT8", "CowBelT8", "CowBelRX11", "CowBelAnCR", "ElCowbell", "AnaShaker", "TambrnRX5", "TambrnAnCR", "ElTambrn1", "ElTambrn2", "MarcsT8", "ElMarcs", "ClaveT8", "ElTriangl", "AnaClick", "BdSnap1-2", "BdSnap1", "BdSnap2", "BdSnapL1-2", "BdSnapR1-2", "BdSnapL1", "BdSnapL2", "BdSnapR1", "BdSnapR2", "BdTigt1-2", "BdTigt1", "BdTigt2", "BdTigtL1-2", "BdTigtR1-2", "BdTigtL1", "BdTigtL2", "BdTigtR1", "BdTigtR2", "BdAmb1-2", "BdAmb1", "BdAmb2", "BdAmbL1-2", "BdAmbR1-2", "BdAmbL1", "BdAmbL2", "BdAmbR1", "BdAmbR2", "BdNmSt1-2", "BdNm1St", "BdNm2St", "BdNmL1-2", "BdNmR1-2", "BdNm1L", "BdNm1R", "BdNm2L", "BdNm2R", "BdFkSt1-2", "BdFk1St", "BdFk2St", "BdFkL1-2", "BdFkR1-2", "BdFkML", 
										"BdFkMR", "BdFkHL", "BdFkHR", "BdHiSt", "BdHiL", "BdHiR", "BdLoSt", "BdLoL", "BdLoR", "BdHSonSt", "BdHSonL", "BdHSonR", "BdLSonSt", "BdLSonL", "BdLSonR", "BdFkSonSt", "BdFkSonL", "BdFkSonR", "BdRk1St", "BdRk1L", "BdRk1R", "BdRk2St", "BdRk2L", "BdRk2R", "BdDry1", "BdDry2", "BdPop", "BdVar1", "BdVar2", "BdRoom1", "BdRoom2", "BdRoom3", "GrnCasOpSt", "GrnCasOp L", "GrnCasOp R", "GrnCasMtSt", "GrnCasMt L", "GrnCasMt R", "BdGate", "BdFXGate", "BdT9-1", "BdT9-2", "BdT9-3", "BdT9-4", "BdT9Hd1", "BdT9Hd2", "BdT9Hd3", "BdT8-1", "BdT8-2", "BdT8-3", "BdAnSm", "BdAnCR", "BdHuman1", "BdHuman2", "BdBlip", "BdBlpHd", "BdJngl1", "BdJngl2", "BdJngl3", "BdD&B1", "BdD&B2", "BdR&B1", "BdR&B2", "BdHipDp", "BdBrkDp", "BdBreak1", "BdBreak2", "BdBreakHvy", "BdBreakHrd", "BdDist1", "BdDist2", "BdDist3", "BdDist4", "BdDist5", "BdDistRM", "Bd+HH", "BdFxHmr", "BdZapHrd", "BdZapMid", "BdSus", "BdTekPower", "BdHardLong", "BdATite", "BdAnHard", "BdLofi", "BdThkSkn", "BdSlimy", "BdElec1", "BdElec2", "BdElec3", "BdElec4", "BdElComp1", "BdElComp2", "BdElComp3", "BdElFX1", "BdElFX2", "BdElGate", "BdElClick", "BdElPwr1", "BdElPwr2", "SdBldSt1-4", "SdBldSt1-3", "SdBldSt2-4", "SdBldSt1-2", "SdBldSt2-3", "SdBldSt3-4", "SdBldSt1", "SdBldSt2", "SdBldSt3", "SdBldSt4", "SdBldL1-4", "SdBldR1-4", "SdBldL1", "SdBldL2", "SdBldL3", "SdBldL4", "SdBldR1", "SdBldR2", "SdBldR3", "SdBldR4", "SdSolSt1-4", "SdSolSt1-3", "SdSolSt2-4", "SdSolSt1-2", "SdSolSt2-3", "SdSolSt3-4", "SdSolL1-4", "SdSolR1-4", "SdSolSt1", "SdSolSt2", "SdSolSt3", "SdSolSt4", "SdSolL1", "SdSolL2", "SdSolL3", "SdSolL4", "SdSolR1", "SdSolR2", "SdSolR3", "SdSolR4", "SdPwrSt1-4", "SdPwrSt1-3", "SdPwrSt2-4", "SdPwrSt1-2", "SdPwrSt2-3", "SdPwrSt3-4", "SdPwrSt1", "SdPwrSt2", "SdPwrSt3", "SdPwrSt4", "SdPwrL1-4", "SdPwrR1-4", "SdPwrL1", "SdPwrL2", "SdPwrL3", "SdPwrL4", "SdPwrR1", "SdPwrR2", "SdPwrR3", "SdPwrR4", "SdRngSt1-4", "SdRngSt1-3", "SdRngSt2-4", "SdRngSt1-2", "SdRngSt2-3", "SdRngSt3-4", "SdRngSt1", "SdRngSt2", "SdRngSt3", "SdRngSt4", "SdRngL1-4", "SdRngR1-4", "SdRngL1", "SdRngL2", "SdRngL3", "SdRngL4", "SdRngR1", "SdRngR2", "SdRngR3", "SdRngR4", "SdNmSt1-4", "SdNmSt1-3", "SdNmSt2-4", "SdNmSt1-2", "SdNmSt2-3", "SdNmSt3-4", "SdNm1St", "SdNm2St", "SdNm3St", "SdNm4St", "SdNmL1-4", "SdNmR1-4", "SdNm1L", "SdNm1R", "SdNm2L", "SdNm2R", "SdNm3L", "SdNm3R", "SdNm4L", "SdNm4R", "SdFkSt1-3", "SdFkSt1-2", "SdFkSt2-3", "SdFkSt1/3", "SdFk1St", "SdFk2St", "SdFk3St", "SdFkL1-3", "SdFkR1-3", "SdFk1L", "SdFk1R", "SdFk2L", "SdFk2R", "SdFk3L", "SdFk3R", "SdFkAySt", "SdFkAyL", "SdFkAyR", "SdBsSt1-3", "SdBsSt1-2", "SdBsSt2-3", "SdBsSt1/3", "SdBs1St", "SdBs2St", "SdBs3St", "SdBsL1-3", "SdBsR1-3", "SdBs1L", "SdBs1R", "SdBs2L", "SdBs2R", "SdBs3L", "SdBs3R", "SdSonSt1-4", "SdSonSt1-3", "SdSonSt2-4", "SdSonSt1-2", "SdSonSt2-3", "SdSonSt3-4", "SdSon1St", "SdSon2St", "SdSon3St", "SdSon4St", "SdSonL1-4", "SdSonR1-4", "SdSon1L", "SdSon1R", "SdSon2L", "SdSon2R", "SdSon3L", "SdSon3R", "SdSon4L", "SdSon4R", "SdBlSt1-3", "SdBlSt1-2", "SdBlSt2-3", "SdBlSt1/3", "SdBl1St", "SdBl2St", "SdBl3St", "SdBlL1-3", "SdBlR1-3", "SdBl1L", "SdBl1R", "SdBl2L", "SdBl2R", "SdBl3L", "SdBl3R", "SdBhSt1-3", "SdBhSt1-2", "SdBhSt2-3", "SdBhSt1/3", "SdBh1St", "SdBh2St", "SdBh3St", "SdBhL1-3", "SdBhR1-3", "SdBh1L", "SdBh1R", "SdBh2L", "SdBh2R", "SdBh3L", "SdBh3R", "SdTgtSt1-4", "SdTgtSt1-3", "SdTgtSt2-4", "SdTgtSt1-2", "SdTgtSt2-3", "SdTgtSt3-4", "SdTgt1St", "SdTgt2St", "SdTgt3St", "SdTgt4St", "SdTgtL1-4", "SdTgtR1-4", "SdTgt1L", "SdTgt1R", "SdTgt2L", "SdTgt2R", "SdTgt3L", "SdTgt3R", "SdTgt4L", "SdTgt4R", "SdHipSt1-2", "SdHip1St", "SdHip2St", "SdHipL1-2", "SdHipR1-2", "SdHip1L", "SdHip1R", "SdHip2L", "SdHip2R", "SdRkOp1St", "SdRkOp1L", "SdRkOp1R", "SdRkMte1St", "SdRkMte1L", "SdRkMte1R", "SdRkRim1St", "SnRkRim1L", "SdRkRim1R", "SdRkOp2St", "SdRkOp2L", "SdRkOp2R", "SdRkMte2St", "SdRkMte2L", "SdRkMte2R", "SdRkRim2St", "SdRkRim2L", "SdRkRim2R", "SdRkFlmSt", "SdRkFlmL", "SdRkFlmR", "SdPicol", "SdPcRim", "SdPcRim2", "SdMid", "SdMdRim", "SdAmb", "SdGate1", "SdGate2", "SdLdwHMono", "SdBrRim", "SdDry", "SdHeavy", "SdGM", 
										"SdRkStk1St", "SdRkStk1L", "SnRkStk1R", "SdRkStk2St", "SdRkStk2L", "SdRkStk2R", "SdHpStk1", "SdHpStk2", "SdHpStk3", "SdHpStk4", "SdHpStk5", "SdHpStk6St", "SdHpStk6L", "SdHpStk6R", "SdHpStk7", "SdHipStk8", "SdClRmSt", "SdClRmL", "SdClRmR", "SdClRim2", "SdClRim3", "SdRkRolSt", "SdRkRolL", "SdRkRolR", "SdRkRolDSt", "SdRkRolDL", "SdRkRolDR", "SdLvRolSt", "SdLvRolL", "SdLvRolR", "SdRollMono", "SdBrMtSt", "SdBrMtL", "SdBrMtR", "SdBrMt2St", "SdBrMt2L", "SdBrMt2R", "SdBrSwrSt", "SdBrSwrL", "SdBrSwrR", "SdBSwrAtSt", "SdBrSwrAtL", "SdBrSwrAtR", "SdMrc1SwSt", "SdMrc1S St", "SdMrc1H St", "SdMrc1Sw", "SdMrc1Sw", "SdMrc1S L", "SdMrc1H L", "SdMrc1S R", "SdMrc1H R", "SdMrc2SwSt", "SdMrc2S St", "SdMrc2H St", "SdMrc2Sw", "SdMrc2Sw", "SdMrc2S L", "SdMrc2H L", "SdMrc2S R", "SdMrc2H R", "SdMrcRolSt", "SdMrcRol L", "SdMrcRol R", "SdElec1", "SdElec2", "SdElec3", "SdElec4", "SdElec5", "SdElec6", "SdElec7", "SdElec8", "SdElec9", "SdElec10", "SdElec11", "SdElec12", "SdT9-1", "SdT9-2", "SdT9-3", "SdT9-4", "SdT9-5", "SdT9Gate", "SdT9Rim", "SdT8-1", "SdT8-2", "SdT8-3", "SdT8-4", "SdT8-5", "SdT8Rim", "SdAnSm", "SdAnSmRim", "SdAnCR", "SdAnCRRim", "SdHuman1", "SdHuman2", "SdJngl1", "SdJngl2", "SdJngl3", "SdJnglFx", "SdD&B1", "SdD&B2", "SdD&B3", "SdD&B4", "SdR&B1", "SdR&B1Rm", "SdR&B2", "SdHip1", "SdHip2", "SdHip3", "SdHipGate", "SdHipRm1", "SdHipRm2", "SdHipRm3", "SdHipRm4", "SdHipRm5", "SdBreak1", "SdBreak2", "SdBreak3", "SdBreakHvy", "SdBreakRol", "SdFx1", "SdFx2", "SdFx3", "SdFx4", "SdClpAna", "SdDist", "SdCut", "SdDodgH", "SdDodgL", "SdFM", "SdFMRim", "SdSyn", "SdClappy", "SdTimbr", "SdWood", "SdHammr", "SdLofi", "SdRimSE", "HHCls1-4St", "HHCls1 St", "HHCls2 St", "HHCls3 St", "HHCls4 St", "HHCls1-4 L", "HHCls1-4 R", "HHCls1 L", "HHCls2 L", "HHCls3 L", "HHCls4 L", "HHCls1 R", "HHCls2 R", "HHCls3 R", "HHCls4 R", "HHCls1-4RL", "HHCls1 RL", "HHCls2 RL", "HHCls3 RL", "HHCls4 RL", "HHPdl1-3St", "HHPdl1 St", "HHPdl2 St", "HHPdl3 St", "HHPdl1-3 L", "HHPdl1-3 R", "HHPdl1 L", "HHPdl2 L", "HHPdl3 L", "HHPdl1 R", "HHPdl2 R", "HHPdl3 R", "HHPdl1-3RL", "HHPdl1 RL", "HHPdl2 RL", "HHPdl3 RL", "HHOpn1-2St", "HHOpn1 St", "HHOpn2 St", "HHOpn1-2 L", "HHOpn1-2 R", "HHOpn1 L", "HHOpn2 L", "HHOpn1 R", "HHOpn2 R", "HHOpn1-2RL", "HHOpn1 RL", "HHOpn2 RL", "HHClFtSt", "HHClFtL", "HHClFtR", "HHClFtRL", "HHHlf2St", "HHHlf2L", "HHHlf2R", "HHHlf2RL", "HHOp2St", "HHOp2L", "HHOp2R", "HHOp2RL", "HHClRkStSw", "HHClRkRLSw", "HHClRkSSt", "HHClRkSRL", "HHClRkHSt", "HHClRkHRL", "HHClRkLSw", "HHClRkRSw", "HHClRkSL", "HHClRkSR", "HHClRkHL", "HHClRkHR", "HHPdRkStSw", "HHPdRkRLSw", "HHPdlRkLSw", "HHPdlRkRSw", "HHClRk2St", "HHClRk2L", "HHClRk2R", "HHClRk2RL", "HHPdlRkSt", "HHPdlRkL", "HHPdlRkR", "HHPdlRkRL", "HHOpRkStSw", "HHOpRkRLSw", "HHOpRkSt", "HHOpRkRL", "HHHfOpRkSt", "HHOpRkLSw", "HHOpRkRSw", "HHOpRkL", "HHOpRkR", "HHHlfOpRkL", "HHHlfOpRkR", "HHHfOpRkRL", "HHClMono", "HHOpMono", "HHPdlMono", "HHClT9", "HHOpT9", "HHClT8-1", "HHOpT8-1", "HHClT8-2", "HHOpT8-2", "HHClRX5", "HHClAnCR", "HHOpAnCR", "HHClBreak", "HHPdlBreak", "HHClD&B", "HHPdlD&B", "HHOpD&B", "HHRvD&B", "HHClTek", "HHOpTek", "HHClHip", "HHPdlHip", "HHOpHip", "HHClLoFi", "HHOpLoFi", "HHClSyn", "HHOpSyn", "HHClFx", "HHOpFx", "HHOpHuman", "TomHi St", "TomHi L", "TomHi R", "TomHi RL", "TomMid St", "TomMid L", "TomMid R", "TomMid RL", "TomLow St", "TomLow L", "TomLow R", "TomLow RL", "TomFlr St", "TomFlr L", "TomFlr R", "TomFlr RL", "TomRkHiSt", "TomRkHiL", "TomRkHiR", "TomRkHiRL", "TomRkMdSt", "TomRkMdL", "TomRkMdR", "TomRkMdRL", "TomRkLoSt", "TomRkLoL", "TomRkLoR", "TomRkLoRL", "TomMonoHi", "TomMonoLo", "TomDryHi", "TmDryLo", "TomAmbHi", "TomAmbLo", "TomT9Hi", "TomT9Lo", "TomT8", "TomSyn1", "TomSyn2", "TomAnSm", "TomDistHi", "TomDistLo", "CrashCymSt", "CrashCym L", "CrashCym R", "CrashCymRL", "CrashSt", "CrashL", "CrashR", "CrashRL", "Crash", "Crash2", "HndCymOpSt", "HndCymOp L", "HndCymOp R", "HndCymMtSt", "HndCymMt L", "HndCymMt R", "RideCym St", "RideCym L", "RideCym R", "RideCym RL", "RideSt", "RideL", "RideR", "RideRL", "RideCup St", "RideCup L", "RideCup R", "RideCup RL", 
										"CupSt", "CupL", "CupR", "CupRL", "RideMono", "CupMono", "CupMono2", "ChinaSt", "ChinaL", "ChinaR", "ChinaRL", "China", "SplashSt", "SplashL", "SplashR", "SplashRL", "CrashT9", "CrashT8", "CrashSyn", "RideT9", "RevCymbal", "Ag FX01 St", "Ag FX01 L", "Ag FX01 R", "Ag FX02 St", "Ag FX02 L", "Ag FX02 R", "Ag FX03 St", "Ag FX03 L", "Ag FX03 R", "Ag FX04 St", "Ag FX04 L", "Ag FX04 R", "Ag FX05 St", "Ag FX05 L", "Ag FX05 R", "Ag FX06 St", "Ag FX06 L", "Ag FX06 R", "Ag FX07 St", "Ag FX07 L", "Ag FX07 R", "Ag FX08 St", "Ag FX08 L", "Ag FX08 R", "Ag FX09 St", "Ag FX09 L", "Ag FX09 R", "Ag FX10 St", "Ag FX10 L", "Ag FX10 R", "Ag FX11 St", "Ag FX11 L", "Ag FX11 R", "Ag FX12 St", "Ag FX12 L", "Ag FX12 R", "Ag FX13 St", "Ag FX13 L", "Ag FX13 R", "Ag FX14 St", "Ag FX14 L", "Ag FX14 R", "Ag FX15 St", "Ag FX15 L", "Ag FX15 R", "Ag FX16 St", "Ag FX16 L", "Ag FX16 R", "Ag FX17 St", "Ag FX17 L", "Ag FX17 R", "Ag FX18 St", "Ag FX18 L", "Ag FX18 R", "Ag FX19 St", "Ag FX19 L", "Ag FX19 R", "Ag FX20 St", "Ag FX20 L", "Ag FX20 R", "Ag FX21 St", "Ag FX21 L", "Ag FX21 R", "Ag FX22 St", "Ag FX22 L", "Ag FX22 R", "Ag FX23 St", "Ag FX23 L", "Ag FX23 R", "Ag FX24 St", "Ag FX24 L", "Ag FX24 R", "Ag FX25 St", "Ag FX25 L", "Ag FX25 R", "Ag FX26 St", "Ag FX26 L", "Ag FX26 R", "Ag FX27 St", "Ag FX27 L", "Ag FX27 R", "Ag FX28 St", "Ag FX28 L", "Ag FX28 R", "Ag FX29 St", "Ag FX29 L", "Ag FX29 R", "Ag FX30 St", "Ag FX30 L", "Ag FX30 R", "Eg FX01", "Eg FX02", "Eg FX03", "Eg FX04", "Eg FX05", "Eg FX06", "Eg FX07", "Eg FX08", "Eg FX09", "Eg FX10", "Eg FX11", "Eg FX12", "Eg FX13", "Eg FX14", "Eg FX15", "Eg FX16", "Eg FX17", "Eg FX18", "Eg FX19", "Eg FX20", "Eg FX21", "Eg FX22", "Eg FX23", "Ab FX01", "Ab FX02", "Ab FX03", "Ab FX04", "Ab FX05", "Ab FX06", "Ab FX07", "Ab FX08", "Ab FX09", "Eb FX 01", "Eb FX 02", "Eb FX 03", "Eb FX 04", "Eb FX 05", "Eb FX 06", "Eb FX 07", "Eb FX 08", "Eb FX 09", "Eb FX 10", "Eb FX 11", "Eb FX 12", "Eb FX 13", "Eb FX 14", "Eb FX 15", "Eb FX 16", "Eb FX 17", "Eb FX 18", "Eb FX 19", "Eb FX 20", "Eb FX 21", "Eb FX 22", "Eb FX 23");
	
	$preset_waves["S90ES"] = array_merge($preset_waves["Motif ES"], array("S700ppSt", "S700ppL", "S700ppR", "S700ppMn", "S700ppSt+", "S700ppL+", "S700ppR+", "S700ppMn+", "S700ppSt-", "S700ppL-", "S700ppR-", "S700ppMn-", "S700mfSt", "S700mfL", "S700mfR", "S700mfMn", "S700mfSt+", "S700mfL+", "S700mfR+", "S700mfMn+", "S700mfSt-", "S700mfL-", "S700mfR-", "S700mfMn-", "S700ffSt", "S700ffL", "S700ffR", "S700ffMn", "S700ffSt+", "S700ffL+", "S700ffR+", "S700ffMn+", "S700ffSt-", "S700ffL-", "S700ffR-", "S700ffMn-", "S700SwSt1", "S700SwSt2", "S700ppSt", "S700ppL", "S700ppR", "S700ppMn", "S700ppSt+", "S700ppL+", "S700ppR+", "S700ppMn+", "S700ppSt-", "S700ppL-", "S700ppR-", "S700ppMn-", "S700mfSt", "S700mfL", "S700mfR", "S700mfMn", "S700mfSt+", "S700mfL+", "S700mfR+", "S700mfMn+", "S700mfSt-", "S700mfL-", "S700mfR-", "S700mfMn-", "S700ffSt", "S700ffL", "S700ffR", "S700ffMn", "S700ffSt+", "S700ffL+", "S700ffR+", "S700ffMn+", "S700ffSt-", "S700ffL-", "S700ffR-", "S700ffMn-", "S700SwSt1", "S700SwSt2"));
	
	$preset_waves["CS6x"] = array(1=>"Grand", "Grand+", "Grand-", "Brit", "Brit+", "Brit-", "CP80", "CP80+", "CP80-", "Rho1P", "Rho1P+", "Rho1P-", "Rho1L", "Rho1L+", "Rho1L-", "Rho2S", "Rho2S+", "Rho2S-", "Rho2M", "Rho2M+", "Rho2M-", "Rho2H", "Rho2H+", "Rho2H-", "Rho3", "Rho3+", "Rho3-", "Rho4", "Rho4+", "Rho4-", "Wurli", "Wurli+", "Wurli-", "DX1", "DX2", "DX3", "Clav1", "Clav1+", "Clav1-", "Clav2", "Clav2+", "Clav2-", "Clav3", "Clav3+", "Clav3-", "Hrpscd", "JmPrc", "JmPrc-", "Jazz", "Jazz+", "Jazz-", "Rock", "Rock+", "Rock-", "Argent", "BowVb", "BowNv", "Gospel", "Green", "Santana", "Farfis", "Farfi-", "VoxOrg", "VxOrg-", "Swish", "Swish-", "Dw1+3", "Dw1+3+", "Dw1+3-", "Dw2+4", "Dw2+4+", "Dw2+4-", "DrwEv", "DrwEv+", "DrwEv-", "DrwOd", "DrwOd+", "DrwOd-", "D16", "D5 1/3", "D8", "D4", "D2 2/3", "D2", "D1 3/5", "D1 1/3", "D1", "LesGrt", "LesGr2", "Rotar", "Clack", "LesWho", "SftTmp", "Perc", "Perc+", "Perc-", "Harmnc", "Acrdn", "Acrdn+", "Acrdn-", "FngCym", "Hibasi", "StoneH", "StoneS", "Gamln1", "Gamln2", "Glock", "Marimb", "Vibra", "Xylo", "HndBel", "Crotls", "Timpni", "SectnL", "SectnR", "SctnSt", "SctnL-", "SctnR-", "SctSt-", "Sctn2L", "Sctn2R", "Sct2St", "Sct2L+", "SctnR+", "Sct2S+", "Sct2L-", "Sct2R-", "Sct2S-", "Trmbn", "Trmbn-", "SftTrb", "SftFlg", "SftFl-", "Hermn", "Strgt", "TrpMed", "TrpSft", "Trmpt", "Trmpt+", "Trmpt-", "PiclTp", "Horn", "Combi1", "Combi2", "Combi3", "Combi4", "Vln", "Vln2", "Cello", "EnsMx", "EnsMx-", "SmlEns", "SmlEn+", "SmlEn-", "Pizz", "Pizz2", "Harp", "Nylon", "NylnHi", "Nylhrm", "Steel", "StelHi", "StelLo", "JzGtr", "Strt", "StrtN", "StrtSl", "StrtSp", "StrtMt", "Front", "Single", "SnglHi", "StrtF", "ES335", "DistCl", "DistMt", "FeedBk", "StlHrm", "StrHrm", "Dist2", "Acstic", "Acstc+", "Acstc-", "Fing", "Fing+", "Fing-", "Harmnc", "Precsn", "Prcsn+", "Pecsn-", "PrsRw", "PrsRw+", "PrsRw-", "Pick", "Slap", "Slap+", "Slap-", "Slap2", "Slap2+", "Slap2-", "Frtl1", "Frtl1+", "Frtl1-", "Frtl2", "Frtl2+", "Frtl2-", "SyBass", "SynVox", "VxNoiz", "Aah", "Aah+", "Aah-", "Oooo", "Oooo+", "Oooo-", "Itopia", "Alto", "Alto+", "Alto-", "Tenor", "Tenor+", "Tenor-", "Bari", "BigSx1", "BigSx2", "SxBrth", "Soprn", "Soprn+", "Soprn-", "Clari", "Clari+", "Clari-", "Oboe", "Oboe+", "Oboe-", "Basoon", "Basoon+", "Basoon-", "Flute", "Flute+", "Flute-", "PnFlt", "PnFlt-", "ModSaw", "ObStr", "JpStr", "SyzStr", "Padd", "ObBrs", "SyncLd", "CS80Br", "3o3Saw", "3o3Sw2", "3o3Squ", "MogBs1", "MogBs2", "MogBs3", "FMBs1", "FMBs2", "FMBs3", "FMBs4", "FMBs5", "FMBs6", "FMFnk", "FMGtr", "Late-S", "Late-L", "P5Saw", "Saw2", "1o1Saw", "1o1Sub", "SawSqu", "SquSaw", "MgRamp", "P10-1", "P10-2", "P10-3", "P25-1", "P25-2", "P50-1", "P50-2", "Tri", "Digi01", "Digi02", "Digi03", "Digi04", "Digi05", "Digi06", "Digi07", "Digi08", "Digi09", "Digi10", "Digi11", "Digi12", "Bel1Wv", "Bel2Wv", "DgVox1", "DgVox2", "DgVox3", "DgVox4", "DgVox5", "VoxG2", "VoxE3", "Ep1", "Ep2", "Ep3", "Ep4", "Ep5", "EP6", "Org1Wv", "Org2Wv", "Org3Wv", "Sin", "Noise", "PnoNP", "EPNP", "VibeNP", "VoxBel", "Melow", "WndChm", "BelAir", "BigSyn", "TrnCho", "HanSol", "Eery", "Electr", "HH Hit", "VxAlk", "HiLo", "MltPno", "AHoseL", "AHoseR", "StlDrm", "Sitar", "BongoL", "BongoH", "CongaL", "CongaH", "CngSlp", "Cowbel", "AgogoL", "GuiroL", "GiroCl", "TmblsL", "TmblsH", "CuicaL", "CuicaH", "Wdblck", "Cabasa", "Claves", "Castnt", "Maracs", "Shaker", "Tmborn", "TrangL", "VbSlp", "JnglBl", "Clap", "Whistl", "Bltree", "AnvlHt", "AnvlPp", "Scrch1", "Scrch2", "VoxDrm", "Ripper", "CONG", "StlClp", "WdBlk", "BdStd", "BdPop", "BdHby", "BdLoJz", "BdVar1", "BdVar2", "BdVar3", "BdVar4", "BdVar5", "BdAna", "SdGM", "SdBldS", "SdBldH", "SdFsnH", "SdLdwH", "SdSonA", "SdSonD", "SdHvy", "SdPclH", "SdPcBH", "SdPrmH", "SdWdH", "SdVar1", "SdVar2", "SdRim1", "SdRim2", "SdAmb1", "SdAmb2", "SdAmb3", "SdBkBt", "SdDry", "SdSwep", "SdBrsS", "SdBrsH", "SdBrsL", "SdRoll", "C.Rim1", "C.Rim2", "Stick", "TomF", "TomL", "TomM", "TomHL", "TomHH", "TmJzL", "TmJzM", "TmJzH", "Tom2H", "Tom2L", "HHCl1", "HHCL2", "HHCl3", "HHCl4", "HHCl5", "HHPdl", "HHPdl2", 
									"HHOpn", "HHOpn2", "HHTip", "Ride", "Ride2", "Cup", "Cup2", "Crash", "Crash2", "China", "China2", "T8BdBm", "T8Bd", "T8SD1", "T8SD2", "T8SD3", "T8SD4", "T8Side", "T8Rmst", "T8Clap", "T8Tom", "T8HHCl", "T8HHOp", "T8Crsh", "T8CngL", "T8CngM", "T8CngH", "T8Cwbl", "T8Clve", "T8Mrcs", "T9BD1", "T9BD2", "T9BD3", "T9SD1", "T9SD2", "T9SD3", "T9SD4", "T9SD5", "T9SD6", "T9Clap", "T9Rim", "T9TomL", "T9TomM", "T9TomH", "T9HHC1", "T9HHC2", "T9HHO1", "T9HHO2", "T9Crsh", "T9Ride", "EuroBD", "DstKik", "Bd Kit", "Sn Kit");

	$preset_waves["S80"] = array_merge($preset_waves["CS6x"], array("Grand2", "Grand2St", "Grand2L", "Grand2R", "Grand2+", "Grnd2St+", "Grand2L+", "Grand2R+", "Grand2-", "Grnd2St-", "Grand2L-", "Grand2R-", "Grand3", "Grand3St", "Grand3L", "Grand3R", "Grand3+", "Grnd3St+", "Grand3L+", "Grand3R+", "Grand3-", "Grnd3St-", "Grand3L-", "Grand3R-", "Rho5H", "Rho5M", "Rho5L", "Rho5H+", "Rho5M+", "Rho5L+", "Rho5HNo.", "Rho5M-", "Rho5L-", "Rho6H", "Rho6L", "Rho6H+", "Rho6L+", "Rho6H-", "Rho6L-", "Pipe1St", "Pipe1L", "Pipe1R", "Pipe2", "Pipe3St", "Pipe3L", "Pipe3R", "Pipe4", "Pipe5", "Pipe6", "Pipe7", "AahSt", "AahL", "AahR", "AahC", "AahSt+", "AahL+", "AahR+", "AahC+", "AahSt-", "AahL-", "AahR-", "AahC-", "OohSt", "OohL", "OohR", "OohRich", "OohSt+", "OohL+", "OohR+", "OohRich+", "OohSt-", "OohL-", "OohR-", "OohRich-"));
	
	$preset_waves["Motif Rack"] 	= &$preset_waves["Motif Classic"];
	$preset_waves["Motif Rack ES"] 	= &$preset_waves["Motif ES"];
	$preset_waves["MO"] 			= &$preset_waves["Motif ES"];
	
	$obj_types = array(
						0x0000 => "ROT|PCH|WFM", 
						0x03B4 => "NVC|MXV", 
						0x13C9 => "DVC", 
						0x015D => "PVC", 
						0x032B => "PFM", 
						0x0053 => "MST",
						0x012C00 => "ARP", 
						0x0780 => "SNG", 
						0x1000 => "SNG", 
						0x0700 => "SMT|PMT", 
						0x0200 => "PST|PPT", 
						0x0F80 => "PTN", 
						0x1380 => "PTN", 
						0x1500 => "PTN", 
						0x1580 => "PTN", 
						0x1680 => "PTN", 
						0x1700 => "PTN", 
						0x1780 => "PTN", 
						0x1880 => "PTN", 
						0x1980 => "PTN", 
						0x1F80 => "PTN", 
						0xCC20 => "SYS"
				);

	// Convert a BYTE program number (0..127) to the Yamaha form A01..H16
	function yam_program($program_number) {
		$prog_letter = chr(ord('A') + floor($program_number/16));
		$prog_number = sprintf("%02d", ($program_number%16)+1);
		return $prog_letter . $prog_number;
	}	

	function bank_select($msb, $lsb, $the_gear="") {
		global $gear;
		
		if ($the_gear == "")
			$the_gear = $gear;
		
		if ($the_gear == "S80") {
			if ($msb == 0x00 && $lsb == 0x00)
				return "INT";
			if ($msb == 0x7F && $lsb == 0x00)
				return "UDR";
			if ($msb == 0x3F) 
				return which($lsb, array(0 => "PRE1", 1 => "PRE2", 8 => "INT", 9 => "EXT", 24 => "PLG1", 25 => "PLG2",
											32 => "PRE-DR", 40 => "INT-DR", 41 => "EXT-DR"));
			return "???";
		}
		
		if ($msb == 0x00)
			return "GM";
		if ($msb == 0x7F)
			return "GMDR";
		if ($msb == 0x3F)
			return which($lsb, array(0 => "PRE1", 1 => "PRE2", 2 => "PRE3", 3 => "PRE4", 4 => "PRE5", 5 => "PRE6", 
									8 => "USR1", 9 => "USR2", 32 => "PDR", 40 => "UDR", 50 => "SMPL", 60 => "MIXV",
									24 => "PLGUSR1", 25 => "PLGUSR2", 26 => "PLGUSR3",
									70 => "PLGPRE1(1)", 71 => "PLGPRE2(1)", 72 => "PLGPRE3(1)",
									73 => "PLGPRE1(2)", 74 => "PLGPRE2(2)", 75 => "PLGPRE3(2)",
									76 => "PLGPRE1(3)", 77 => "PLGPRE2(3)", 78 => "PLGPRE3(3)"));
		return "???";
	}

	function which($index, $the_array, $base=0) {
		if (!is_array($the_array))
			return "!!!NOT AN ARRAY!!!";
		$res = $the_array[$base+$index];
		if (!isset($res))
			return "!!!OUT OF RANGE!!!";
		return $the_array[$base+$index];
	}

	function hexbyte($byte) {
		return sprintf("%02Xh", $byte);
	}
	
	function decword($byte1, $byte2) {
		return ((($byte2 & 0x7F) << 1) + ($byte1 << 8)) >> 1;
	}
	
	function off($v, $off_value=0, $txt_off="Off") {
		if ($v == $off_value)
			return $txt_off;
		return $v;
	}
	
	function dump_raw_data($prefix, $ofs, $nb) {
		global $show_raw_data, $dump, $bytes;
		
		if (!$show_raw_data)
			return;
	
		$dump .= "$prefix = {";
		for ($i=0; $i<$nb; $i++)
			$dump .= sprintf("%02X ", ord($bytes[$ofs+$i]));
		$dump .= "}\n";
	}
	
	///////////////////////////////////

	$inputs = array();
	$outputs = array();

	// Check wether we're running on a HTTP server
	if (isset($_SERVER["HTTP_HOST"])) {
		if ($_GET["show_code"]) {
			header("Content-Type: text/php");
			readfile($_SERVER["SCRIPT_FILENAME"]);
			exit;
		}
		
		$sz = $_FILES["bininput1"]["size"];
		if ($sz) { // Use the uploaded file instead
			$tmp_fd = fopen($_FILES["bininput1"]["tmp_name"], "rb");
			$bytes = fread($tmp_fd, $sz);
			fclose($tmp_fd);
		}
		else 
			die("No input file");
	}
	else { // Standalone command-line invocation
		@list($cmd, $fname) = $argv;
		
		if ($fname == "") 
			die("Usage: $cmd <file>\n");

		$job = "";
			
		$fd = fopen($fname, "rb");
		if (!$fd)
			die("Couldn't open file $fname\n");
			
		$sz = filesize($fname);
		$bytes = fread($fd, $sz);
		fclose($fd);
	}

	$show_ids = false;
	
	$dump = "";
		
	$gear_ver = substr($bytes, 0, 5);

	$nb_parts_per_perf = 4;

	if ($gear_ver == "A0745") {
		$gear = "Motif ES";
		$max_normal_user_voices = 256;
		$max_user_drumkits = 32;
		$max_plugin_voices = 3*64;
		$max_performances = 128;
		$normal_voice_common_size = 312;
		$normal_voice_element_size = 159;
		$perf_common_size = 365;
		$perf_part_size = 58;
		$mix_common_sz = 365;
		$mix_parts_sz = 58;
		$nb_user_arps = 256;
		$nb_plg_boards = 3;
		$user_voices = $user_voices_moes;
		$voice_categories = $voice_categories_motif;
	}
	else if ($gear_ver == "A0793") {
		$gear = "Motif Rack ES";
		$max_normal_user_voices = 384;
		$max_user_drumkits = 32;
		$max_plugin_voices = 2*64;
		$max_performances = 128;
		$normal_voice_common_size = 316; // !!! Unlike the Motif ES
		$normal_voice_element_size = 159;
		$perf_common_size = 365;
		$perf_part_size = 58;
		$mix_common_sz = 365;
		$mix_parts_sz = 58;
		$nb_user_arps = 0;
		$nb_plg_boards = 2;
		$user_voices = $user_voices_moes;
		$voice_categories = $voice_categories_motif;
	}
	else if ($gear_ver == "A0682") {
		$gear = "S90";
		$max_normal_user_voices = 128;
		$max_user_drumkits = 8;
		$max_plugin_voices = 3*64;
		$max_performances = 128;
		$normal_voice_common_size = 257;
		$normal_voice_element_size = 152;
		$perf_common_size = 263;
		$perf_part_size = 45;
		$nb_user_arps = 128;
		$nb_plg_boards = 3;
		$mix_common_sz = 263;
		$mix_parts_sz = 45;
		$user_voices = $user_voices_s90;
		$voice_categories = $voice_categories_motif;
	}
	else if ($gear_ver == "A0636") {
		$gear = "Motif Classic";
		$user_voices = $user_voices_motif;
		$mix_common_sz = 263;
		$mix_parts_sz = 45;
		
		$max_normal_user_voices = 128;
		$max_user_drumkits = 8;
		$max_plugin_voices = 3*64;
		$max_performances = 128;
		$normal_voice_common_size = 257;
		$normal_voice_element_size = 152;
		$perf_common_size = 263;
		$perf_part_size = 45;
		$nb_plg_boards = 3;
		$nb_user_arps = 128;
		$voice_categories = $voice_categories_motif;
	}
	else if ($gear_ver == "A0728") {
		$gear = "Motif Rack";
		$user_voices = $user_voices_motif_rack;
		
		$max_normal_user_voices = 256;
		$max_user_drumkits = 32;
		$max_plugin_voices = 2*64;
		$normal_voice_common_size = 298;
		$normal_voice_element_size = 155;
		$nb_plg_boards = 2;
		$voice_categories = $voice_categories_motif;
	}
	else if ($gear_ver == " 8E24") {
		$gear = "S90ES";
		$max_normal_user_voices = 256;
		$max_user_drumkits = 32;
		$user_voices = $user_voices_s90es;
		$normal_voice_common_size = 312;
		$normal_voice_element_size = 161;
		
		$max_plugin_voices = 3*64;
		$max_performances = 128;
		$perf_common_size = 365;
		$perf_part_size = 58;
		$mix_common_sz = 365;
		$mix_parts_sz = 58;
		$nb_user_arps = 256;
		$nb_plg_boards = 3;
		$voice_categories = $voice_categories_motif;
	}
	else if ($gear_ver == " 8E57") {
		$gear = "MO";
		$max_performances = 256;
		$user_voices = $user_voices_mo;
		
		$max_normal_user_voices = 256;
		$max_user_drumkits = 32;
		$max_plugin_voices = 3*64;
		$normal_voice_common_size = 312;
		$normal_voice_element_size = 159;
		$perf_common_size = 365;
		$perf_part_size = 58;
		$mix_common_sz = 365;
		$mix_parts_sz = 58;
		$nb_user_arps = 256;
		$nb_plg_boards = 0;
		$voice_categories = $voice_categories_motif;
	}
	else if ($gear_ver == "A0478") {
		$gear = "S80";
		$user_voices = $user_voices_s80;
		$max_normal_user_voices = 256;
		$normal_voice_common_size = 218;
		$normal_voice_element_size = 131;
		$max_user_drumkits = 4;
		$max_performances = 192;
		$perf_common_size = 271;
		$perf_part_size = 37;
		$nb_parts_per_perf = 16;
		$nb_plg_boards = 2;
		$max_plugin_voices = $nb_plg_boards*64;
		$voice_categories = $voice_categories_s80;
	}
	else 
		die("Gear not recognized (signature: \"$gear_ver\")\n");
	
	if ($gear == "S80") 
		$file_ver = substr($bytes, 6, 9);
	else 
		$file_ver = substr($bytes, 6, 26);
	
	if ($file_ver == "ALL       Ver 01.00       " || $file_ver == "ALL V1.00") 
		$file_type = "All";
	else if ($file_ver == "VOICE     Ver 01.00       ") 
		$file_type = "Voice";
	else if ($file_ver == "SONG      Ver 01.00       ") 
		$file_type = "Song";	
	else if ($file_ver == "PATTERN   Ver 01.00       ") 
		$file_type = "Pattern";
	else if ($file_ver == "WAVEFORM  Ver 01.00       ") 
		$file_type = "Waveform";
	else if ($file_ver == "ARPEGGIO  Ver 01.00       ") 
		$file_type = "Arpeggio";
	else if ($file_ver == "VCE EDITORVer 01.00       ") 
		$file_type = "Voice Editor";
	else if (substr($file_ver, 0, 9) == "VCE V1.00")
		$file_type = "Voice Editor for Rack";
	else
		die("File format not recognized\n");
		
	$is_rack = $file_type == "Voice Editor for Rack";		
	
	$dump_binary = false;
	if (isset($_POST["job"])) {
		$job = $_POST["job"];
		$dump_binary = true;
		if ($job == "plg_mute") {
			$job_slot = $_POST["job1_slot"];
			$job_what = $_POST["job1_what"];
			if ($job_slot < 0 || $job_slot > 3)
				die("Bad slot");
			if (!in_array($job_what, array("both", "songs", "patterns", "mix"))) 
				die("Bad object");
		}
		else if ($job == "wav_replace") {
			$job_src_bank = $_POST["job2_src_bank"];
			$job_src_wave = $_POST["job2_src_wave"];
			$job_dst_bank = $_POST["job2_dst_bank"];
			$job_dst_wave = $_POST["job2_dst_wave"];
			if ($job_src_bank != 0 && $job_src_bank != 1)
				die("Bad src bank");
			if ($job_src_wave <= 0)
				die("Bad src wave");
			if ($job_dst_bank != 0 && $job_dst_bank != 1)
				die("Bad dst bank");
			if ($job_dst_wave <= 0)
				die("Bad dst wave");
			if ($job_src_bank == 0 && $job_src_wave > 1859)
				die("Bad src wave");
			if ($job_src_bank == 1 && $job_src_wave > 1024)
				die("Bad src wave");
			$job_dst_wave--;
			$job_dst_wave_msb = $job_dst_wave >> 7;
			$job_dst_wave_lsb = $job_dst_wave & 0x7F;
			if ($job_dst_wave_msb)
				$job_dst_wave_lsb |= 0x80;
		}
		else if ($job == "m7a_to_w7a") {
			$job_perf_start = $_POST["job3_perf"];
			if ($job_perf_start != 1 && $job_perf_start != 129)
				die("Bad performance start number");
			if ($gear != "MO" || $file_type != "All") 
				die("Sorry, this file isn't an ALL file (.M7A) for MO6/8");
		}
		else if ($job == "browse")
			$dump_binary = false;
	}
	$actual_gear = $gear;
	if ($gear == "S80" && strlen($bytes) > 0x70400 && substr($bytes, 0x70400, 15) == "A0478 CLP V1.00") {
		$actual_gear = "CS6x";
		$user_voices_s80 = $user_voices_cs6x;
		$preset_waves["S80"] = $preset_waves["CS6x"];
	}
	$dump .= "<h1>File type: $file_type / $actual_gear</h1>\n";
	$dump .= "<p><i>Program version: $program_version</i></p>\n";
	
	// Load sections offsets
	$sections_offsets = array();
	$sections_index_ofs = 0x80;
	for ($i=0; $i<36; $i++) {
		$key = substr($bytes, $sections_index_ofs + $i*8, 4);
		$ofs = $sections_index_ofs + $i*8 + 4;
		$value = (ord($bytes[$ofs]) << 24) + (ord($bytes[$ofs+1]) << 16) + (ord($bytes[$ofs+2]) << 8) + ord($bytes[$ofs+3]);
		$sections_offsets[$key] = $value;
	}

	// Load object headers
	$nb_mixing_voices = 0;
	$sections_4cc = array_keys($sections_offsets);
	$objects = array();
	foreach ($sections_4cc as $fcc) {
		if (!(substr($fcc, 0, 1) == "E")) 
			continue;
		$base = $sections_offsets[$fcc];
		if ($fcc == "ESCH") { // Every rule have exceptions
			$name = "SongChain";
			$id = (ord($bytes[$base+60]) << 24) + (ord($bytes[$base+61]) << 16) + (ord($bytes[$base+62]) << 8) + ord($bytes[$base+63]);
			if (isset($objects[$id]))
				die("Warning: object " . sprintf("0x%08X", $id) . " already exists. This should not happen.\n");
			$objects[$id] = array("name" => $name, "addr" => 0, "section" => $fcc);
			continue;
		}
		$ofs = $base + 32;
		$len = (ord($bytes[$base+4]) << 24) + (ord($bytes[$base+5]) << 16) + (ord($bytes[$base+6]) << 8) + ord($bytes[$base+7]);
		while ($ofs < $base + $len) {
			$name = trim(substr($bytes, $ofs, 16));
			$addr = (ord($bytes[$ofs+16]) << 24) + (ord($bytes[$ofs+17]) << 16) + (ord($bytes[$ofs+18]) << 8) + ord($bytes[$ofs+19]);
			$type = (ord($bytes[$ofs+20]) << 24) + (ord($bytes[$ofs+21]) << 16) + (ord($bytes[$ofs+22]) << 8) + ord($bytes[$ofs+23]);
			$rfu = (ord($bytes[$ofs+24]) << 24) + (ord($bytes[$ofs+25]) << 16) + (ord($bytes[$ofs+26]) << 8) + ord($bytes[$ofs+26]);
			$id = (ord($bytes[$ofs+28]) << 24) + (ord($bytes[$ofs+29]) << 16) + (ord($bytes[$ofs+30]) << 8) + ord($bytes[$ofs+31]);
			if (isset($objects[$id]))
				die("Warning: object " . sprintf("0x%08X", $id) . " already exists. This should not happen.\n");
			$objects[$id] = array("name" => $name, "addr" => $addr, "section" => $fcc);
			if ($fcc == "EMXV")
				$nb_mixing_voices++;
			$ofs += 32;
		}
	}

	// Search for noticeable entries in index section
	$has_user_arps = isset($sections_offsets["EARP"]);
	$has_user_voices = isset($sections_offsets["ENVC"]) || $is_rack || $gear == "S80";
	$has_drum_voices = isset($sections_offsets["EDVC"]) || $is_rack || $gear == "S80";
	$has_plugin_voices = (isset($sections_offsets["EPVC"]) || $is_rack || $gear == "S80") && $nb_plg_boards != 0;
	$has_mixing_voices = isset($sections_offsets["EMXV"]);
	$has_performances = isset($sections_offsets["EPFM"]) || $gear == "S80";
	$has_songs = isset($sections_offsets["ESNG"]);
	$has_songschain = isset($sections_offsets["ESCH"]);
	$has_patterns = isset($sections_offsets["EPTN"]);
	$has_masters = isset($sections_offsets["EMST"]);
	$has_waveforms = isset($sections_offsets["EWFM"]) && $gear != "S90" && $gear != "S90ES" && $gear != "MO" && $file_type != "Arpeggio" ;
	$has_system = isset($sections_offsets["ESYS"]);
	
	$needs_index = $file_type != "Arpeggio" && $file_type != "Voice Editor for Rack";

	// Build the index
	if ($needs_index) {
		$dump .= "<h1>Index</h1>\n";
	
		if ($has_performances)
			$dump .= "<a href='#performances'>Performances</a><br>\n";
		
		if ($has_songs) 
			$dump .= "<a href='#songs'>Songs</a><br>\n";
		
		if ($has_songschain)
			$dump .= "<a href='#songschain'>Songs Chain</a><br>\n";
		
		if ($has_patterns)
			$dump .= "<a href='#patterns'>Patterns</a><br>\n";
		
		if ($has_system && ($gear == "Motif ES" || $gear == "Motif Classic" || $gear == "MO" || $gear == "S90")) 
			$dump .= "<a href='#mixtpl'>Mix Templates</a><br>\n";
		
		if ($has_masters)
			$dump .= "<a href='#masters'>Masters</a><br>\n";

		if ($has_user_arps)
			$dump .= "<a href='#arps'>User Arpeggios</a><br>\n";

		if ($has_waveforms)
			$dump .= "<a href='#waveforms'>Waveforms</a><br>\n";
	
		if ($has_user_voices || $has_drum_voices || $has_plugin_voices)
			$dump .= "<a href='#uservoices'>User Voices</a><br>\n";
	
		if ($has_mixing_voices)
			$dump .= "<a href='#mixvoices'>Mixing Voices</a><br>\n";
		
		if ($has_system && ($gear == "Motif ES" || $gear == "S90"))
			$dump .= "<a href='#fav'>Favorites</a><br>\n";
	}
			
	$waveforms_refs = array();
	$waveforms_names = array();
	
	$arps_refs = array();
	$arps_names = array();
	
	// User Voices
	$user_voices_stats = array();
	if ($has_user_voices) {
		if ($is_rack || $gear == "S80") {
			$increment = ($normal_voice_common_size + 4*$normal_voice_element_size);
			if ($gear == "S80") 
				$voices_section_ofs = 0x1000;
			else if ($gear == "Motif Rack ES")
				$voices_section_ofs = 0x2000;
			else 
				$voices_section_ofs = 0x1600;
			$voices_section_len = $max_normal_user_voices * $increment;
			$ofs = $voices_section_ofs;
		}
		else {
			$increment = 32;
			$voices_section_ofs = $ofs = $sections_offsets["DNVC"];
			$voices_section_len = (ord($bytes[$ofs+4]) << 24) + (ord($bytes[$ofs+5]) << 16) + (ord($bytes[$ofs+6]) << 8) + ord($bytes[$ofs+7]);	
			$ofs = $voices_section_ofs + 32;
		}
		
		for ($i=0; ($ofs < $voices_section_ofs + $voices_section_len) && ($i < $max_normal_user_voices); $ofs += $increment) {
			if ($is_rack || $gear == "S80") 
				$voice_offset = $i * $increment;
			else {
				if (substr($bytes, $ofs, 4) == "EWFM" )
					continue;
				$voice_offset = (ord($bytes[$ofs+8]) << 24) + (ord($bytes[$ofs+9]) << 16) + (ord($bytes[$ofs+10]) << 8) + ord($bytes[$ofs+11]);
			}
			$i++;
			$voice_number = $i;
			$o = $voices_section_ofs + $voice_offset;
			$voice_name = substr($bytes, $o, 10);
					
			if ($gear == "S80") 
				$cat = $voice_number > 128 ? "EXT" : "INT";
			else {
				if ($voice_number > 256)
					$cat = "USR3";
				else 
					$cat = ($voice_number>128) ? "USR2" : "USR1";
			}
			$user_voices[$cat][($i-1)%128] = $voice_name;
			$yam_voice_number = yam_program(($voice_number-1)%128);
			$user_voices_stats[$cat][$yam_voice_number]["name"] = trim($voice_name);
			
			// WEM
			$user_voices_stats[$cat][$yam_voice_number]["subcategory"] = "--";
			$user_voices_stats[$cat][$yam_voice_number]["category"] = $voice_categories[ord(substr($bytes, $o+12, 1))];
			if ($gear != "S80")
				$user_voices_stats[$cat][$yam_voice_number]["subcategory"] = $voice_sub_categories[$voice_categories[ord(substr($bytes, $o+12, 1))]][ord(substr($bytes, $o+13, 1))];
				
			// Check whether the voice has insertion effects enabled
			$insA = "";
			$insB = "";
			if ($gear == "Motif ES" || $gear == "Motif Rack ES") {
				$msb = ord($bytes[$o+176]);
				$lsb = ord($bytes[$o+177]);
				if ($msb || $lsb) 
					$insA = which($msb, array(1=>"Rev", "Dly", "Er", "Kar", "Cho", "Flg", "Pha", "Mod", "Dst", "Dyn", "Pch", "Wah", "L-F", "Tec", "Msc"));
					
				$msb = ord($bytes[$o+210]);
				$lsb = ord($bytes[$o+211]);
				if ($msb || $lsb) 
					$insB = which($msb, array(1=>"Rev", "Dly", "Er", "Kar", "Cho", "Flg", "Pha", "Mod", "Dst", "Dyn", "Pch", "Wah", "L-F", "Tec", "Msc"));
					
				$ins_fx_used = false;
				$user_voices_stats[$cat][$yam_voice_number]["ins_fx_unused"] = false;
			}
			$user_voices_stats[$cat][$yam_voice_number]["insA"] = $insA;
			$user_voices_stats[$cat][$yam_voice_number]["insB"] = $insB;
			
			$arps_used = array();
			$arps_str = "";
			$arps_used[0] = decword(ord($bytes[$o+0x14]), ord($bytes[$o+0x15]));
			$arps_used[1] = decword(ord($bytes[$o+0x2A]), ord($bytes[$o+0x2B]));
			$arps_used[2] = decword(ord($bytes[$o+0x2C]), ord($bytes[$o+0x2D]));
			$arps_used[3] = decword(ord($bytes[$o+0x2E]), ord($bytes[$o+0x2F]));
			$arps_used[4] = decword(ord($bytes[$o+0x30]), ord($bytes[$o+0x31]));
			$arps_used[5] = decword(ord($bytes[$o+0x32]), ord($bytes[$o+0x33]));
			foreach ($arps_used as $arp) {
				if ($arp == 16383 || $arp < 8192)
					continue;
				$arp_number = $arp - 8192 + 1;
				if (!isset($arps_refs[$arp_number]))
					$arps_refs[$arp_number] = array();
							
					$arp_exists = false;
					$arp_entry = array("bank" => $cat, "program" => $yam_voice_number, "name" => trim($voice_name));
					foreach ($arps_refs[$arp_number] as $a) {
						if ($a == $arp_entry) {
							$arp_exists = true;
							break;
						}
					}
					if (!$arp_exists)
						array_push($arps_refs[$arp_number], $arp_entry);
			}
			
			for ($j=0; $j<4; $j++) {
				$p = $o + $normal_voice_common_size + ($j*$normal_voice_element_size);
				if ($gear == "S80") {
					$waveform_number = decword(ord($bytes[$p]), ord($bytes[$p+1]));
					$element_on = $waveform_number != 0;
					$waveform_bank = "Preset";
				}
				else {
					$element_on = ord($bytes[$p]);
					$wave_select = ord($bytes[$p+1]);
					$waveform_bank = $wave_select ? "User" : "Preset";
					$waveform_number = decword(ord($bytes[$p+3]), ord($bytes[$p+4]));
				}
				
				if ($waveform_bank == "User")
					$waveform_number++;
				if ($job == "wav_replace" && $job_src_bank == $wave_select && $job_src_wave == $waveform_number) {
					$bytes[$p+1] = chr($job_dst_bank);
					$bytes[$p+3] = chr($job_dst_wave_msb);
					$bytes[$p+4] = chr($job_dst_wave_lsb);
				}
				if ($element_on) {
					$user_voices_stats[$cat][$yam_voice_number]["elem"][$j]["bank"] = $waveform_bank;
					$user_voices_stats[$cat][$yam_voice_number]["elem"][$j]["number"] = $waveform_number;
					if ($waveform_bank == "User") {
						if (!isset($waveforms_refs[$waveform_number]))
							$waveforms_refs[$waveform_number] = array();
						$wave_exists = false;
						$wave_entry = array("bank" => $cat, "program" => $yam_voice_number, "name" => trim($voice_name));
						foreach ($waveforms_refs[$waveform_number] as $wave) {
							if ($wave == $wave_entry) {
								$wave_exists = true;
								break;
							}
						}
						if (!$wave_exists)
							array_push($waveforms_refs[$waveform_number], $wave_entry);
					}
					if ($gear == "Motif ES" || $gear == "Motif Rack ES") {
						$ins_switch = ord($bytes[$p+0x16]);
						switch ($ins_switch) {
							case 0:	// thru
								break;
							case 1: // insA, insB
							case 2:
								$ins_fx_used = true;
								break;
							default:
								echo "Error, insertion switch out of range ($ins_switch)<br>\n";
						}
					}
				}
			}
			if ($gear == "Motif ES" || $gear == "Motif Rack ES") {
				if (!$ins_fx_used) {
					$user_voices_stats[$cat][$yam_voice_number]["ins_fx_unused"] = true;
				}
			}
			
			$user_voices_stats[$cat][$yam_voice_number]["insA"] = $insA;
			if ($gear == "S80" && $i == 128) // Ugly hack to "jump" to external user voices section
				$voices_section_ofs = 0x1a07e - 128*$increment;
		}
	}

	// Drum Voices
	if ($has_drum_voices) {
		$bank = "UDR";
		if ($is_rack || $gear == "S80") {
			// TODO : compute actual increment (see Datalist)
			if ($gear == "S80") {
				$voices_section_ofs = 0x18300;
				$increment = 0xebf;
			}
			else if ($gear == "Motif Rack") {
				$voices_section_ofs = 0x3ac00;
				$increment = 0xf3f;
			}
			else {
				$voices_section_ofs = 0x5b400;
				$increment = 0x102a; 
			}
			
			$voices_section_len = $max_user_drumkits * $increment;
			$ofs = $voices_section_ofs;
		}
		else {
			$increment = 32;
			$voices_section_ofs = $ofs = $sections_offsets["DDVC"];
			$voices_section_len = (ord($bytes[$ofs+4]) << 24) + (ord($bytes[$ofs+5]) << 16) + (ord($bytes[$ofs+6]) << 8) + ord($bytes[$ofs+7]);
			$ofs = $voices_section_ofs + 32;
		}
		$waveforms_used = array();
		unset($voice_name);
		unset($yam_voice_number);
		for ($i=0; ($ofs < $voices_section_ofs + $voices_section_len) && ($i < $max_user_drumkits); $ofs += $increment) {
			if ($is_rack || $gear == "S80") 
				$voice_offset = $i * $increment;
			else {
				if (substr($bytes, $ofs, 4) == "EWFM") {
					$waveform_number = 1 + (ord($bytes[$ofs+8]) << 24) + (ord($bytes[$ofs+9]) << 16) + (ord($bytes[$ofs+10]) << 8) + ord($bytes[$ofs+11]);
					if (!in_array($waveform_number, $waveforms_used)) 
						array_push($waveforms_used, $waveform_number);
					continue;
				}
				$voice_offset = (ord($bytes[$ofs+8]) << 24) + (ord($bytes[$ofs+9]) << 16) + (ord($bytes[$ofs+10]) << 8) + ord($bytes[$ofs+11]);
			}
			if ($gear == "S80") 
				$bank = ($i < 2) ? "INT-DR" : "EXT-DR";
			if (isset($yam_voice_number)) {
				foreach ($waveforms_used as $waveform_number) {
					if (!isset($waveforms_refs[$waveform_number]))
						$waveforms_refs[$waveform_number] = array();				
					$wave_exists = false;
					$wave_entry = array("bank" => $bank, "program" => $yam_voice_number, "name" => $voice_name);
					foreach ($waveforms_refs[$waveform_number] as $wave) {
						if ($wave == $wave_entry) {
							$wave_exists = true;
							break;
						}
					}
					if (!$wave_exists)
						array_push($waveforms_refs[$waveform_number], $wave_entry);
				}
				$waveforms_used = array();
			}
			$voice_number = $i+1;
			$o = $voices_section_ofs + $voice_offset;
			$voice_name = substr($bytes, $o, 10);
			if ($gear == "S80" && $i>=2) {
				$user_voices[$bank][$i-2] = $voice_name;
				$yam_voice_number = yam_program($voice_number-3);
			}
			else {
				$user_voices[$bank][$i] = $voice_name;
				$yam_voice_number = yam_program($voice_number-1);
			}
			$user_voices_stats[$bank][$yam_voice_number]["name"] = trim($voice_name);
			$user_voices_stats[$bank][$yam_voice_number]["subcategory"] = "--";
			$user_voices_stats[$bank][$yam_voice_number]["category"] = $voice_categories[ord(substr($bytes, $o+12, 1))];
			if ($gear != "S80")
				$user_voices_stats[$bank][$yam_voice_number]["subcategory"] = $voice_sub_categories[$voice_categories[ord(substr($bytes, $o+12, 1))]][ord(substr($bytes, $o+13, 1))];
			
			
			$arps_used = array();
			$arps_str = "";
			$arps_used[0] = decword(ord($bytes[$o+0x14]), ord($bytes[$o+0x15]));
			$arps_used[1] = decword(ord($bytes[$o+0x2A]), ord($bytes[$o+0x2B]));
			$arps_used[2] = decword(ord($bytes[$o+0x2C]), ord($bytes[$o+0x2D]));
			$arps_used[3] = decword(ord($bytes[$o+0x2E]), ord($bytes[$o+0x2F]));
			$arps_used[4] = decword(ord($bytes[$o+0x30]), ord($bytes[$o+0x31]));
			$arps_used[5] = decword(ord($bytes[$o+0x32]), ord($bytes[$o+0x33]));
			foreach ($arps_used as $arp) {
				if ($arp == 16383 || $arp < 8192)
					continue;
				$arp_number = $arp - 8192 + 1;
				if (!isset($arps_refs[$arp_number]))
					$arps_refs[$arp_number] = array();
							
					$arp_exists = false;
					$arp_entry = array("bank" => $bank, "program" => $yam_voice_number, "name" => trim($voice_name));
					foreach ($arps_refs[$arp_number] as $a) {
						if ($a == $arp_entry) {
							$arp_exists = true;
							break;
						}
					}
					if (!$arp_exists)
						array_push($arps_refs[$arp_number], $arp_entry);
			}
			$i++;
			if ($gear == "S80" && $i == 2) // Ugly hack to "jump" to external user drum voices section
				$voices_section_ofs = 0x3137e - 2*$increment;
		}
	}
	
	// Plugin Voices
	if ($has_plugin_voices) {
		if ($is_rack || $gear == "S80") {
			if ($gear == "Motif Rack") {
				$voices_section_ofs = 0x593e0; // TODO;
				$increment = 337;
			}
			else if ($gear == "S80") {
				$voices_section_ofs = 0x68400; // TODO
				$increment = 253;
			}
			else {
				$voices_section_ofs = 0x7b940; //TODO
				$increment = 353;
			}
			$voices_section_len = $max_plugin_voices * $increment;
			$ofs = $voices_section_ofs;
		}
		else {
			$increment = 32;
			$voices_section_ofs = $ofs = $sections_offsets["DPVC"];
			$voices_section_len = (ord($bytes[$ofs+4]) << 24) + (ord($bytes[$ofs+5]) << 16) + (ord($bytes[$ofs+6]) << 8) + ord($bytes[$ofs+7]);	
			$ofs = $voices_section_ofs + 32;
		}
		
		$waveforms_used = array();
		unset($voice_name);
		unset($yam_voice_number);
		for ($i=0; ($ofs < $voices_section_ofs + $voices_section_len) && ($i < $max_plugin_voices); $ofs += $increment) {
			$bank = "PLGUSR" . ((int)($i/64) + 1);
			if (isset($yam_voice_number)) {
				foreach ($waveforms_used as $waveform_number) {
					if (!isset($waveforms_refs[$waveform_number]))
						$waveforms_refs[$waveform_number] = array();				
					$wave_exists = false;
					$wave_entry = array("bank" => $bank, "program" => $yam_voice_number, "name" => $voice_name);
					foreach ($waveforms_refs[$waveform_number] as $wave) {
						if ($wave == $wave_entry) {
							$wave_exists = true;
							break;
						}
					}
					if (!$wave_exists)
						array_push($waveforms_refs[$waveform_number], $wave_entry);
				}
				$waveforms_used = array();
			}
			$voice_number = ($i%64)+1;
			
			if ($is_rack || $gear == "S80") 
				$voice_offset = $i * $increment;
			else 
				$voice_offset = (ord($bytes[$ofs+8]) << 24) + (ord($bytes[$ofs+9]) << 16) + (ord($bytes[$ofs+10]) << 8) + ord($bytes[$ofs+11]);
			
			$o = $voices_section_ofs + $voice_offset;
			$voice_name = substr($bytes, $o, 10);
			$user_voices[$bank][$i%64] = $voice_name;
			$yam_voice_number = yam_program($voice_number-1);
			$user_voices_stats[$bank][$yam_voice_number]["name"] = trim($voice_name);
			$user_voices_stats[$bank][$yam_voice_number]["subcategory"] = "--";
			$user_voices_stats[$bank][$yam_voice_number]["category"] = $voice_categories[ord(substr($bytes, $o+12, 1))];
			if ($gear != "S80")
				$user_voices_stats[$bank][$yam_voice_number]["subcategory"] = $voice_sub_categories[$voice_categories[ord(substr($bytes, $o+12, 1))]][ord(substr($bytes, $o+13, 1))];
			
			
			$arps_used = array();
			$arps_str = "";
			$arps_used[0] = decword(ord($bytes[$o+0x14]), ord($bytes[$o+0x15]));
			$arps_used[1] = decword(ord($bytes[$o+0x2A]), ord($bytes[$o+0x2B]));
			$arps_used[2] = decword(ord($bytes[$o+0x2C]), ord($bytes[$o+0x2D]));
			$arps_used[3] = decword(ord($bytes[$o+0x2E]), ord($bytes[$o+0x2F]));
			$arps_used[4] = decword(ord($bytes[$o+0x30]), ord($bytes[$o+0x31]));
			$arps_used[5] = decword(ord($bytes[$o+0x32]), ord($bytes[$o+0x33]));
			foreach ($arps_used as $arp) {
				if ($arp == 16383 || $arp < 8192)
					continue;
				$arp_number = $arp - 8192 + 1;
				if (!isset($arps_refs[$arp_number]))
					$arps_refs[$arp_number] = array();
							
					$arp_exists = false;
					$arp_entry = array("bank" => $bank, "program" => $yam_voice_number, "name" => trim($voice_name));
					foreach ($arps_refs[$arp_number] as $a) {
						if ($a == $arp_entry) {
							$arp_exists = true;
							break;
						}
					}
					if (!$arp_exists)
						array_push($arps_refs[$arp_number], $arp_entry);
			}
			$i++;
		}
	}

	// Mixing Voices
	$mixv["songs"] = array();
	$mixv["patterns"] = array();
	if ($has_mixing_voices) {
		$voices_section_ofs = $ofs = $sections_offsets["DMXV"];
		$voices_section_len = (ord($bytes[$ofs+4]) << 24) + (ord($bytes[$ofs+5]) << 16) + (ord($bytes[$ofs+6]) << 8) + ord($bytes[$ofs+7]);
		$i = 0;
		for ($ofs = $voices_section_ofs+32; ($ofs < $voices_section_ofs+$voices_section_len) && ($i < $nb_mixing_voices); $ofs += 32) {
			$id = (ord($bytes[$ofs]) << 24) + (ord($bytes[$ofs+1]) << 16) + (ord($bytes[$ofs+2]) << 8) + ord($bytes[$ofs+3]);
			$voice_offset = (ord($bytes[$ofs+8]) << 24) + (ord($bytes[$ofs+9]) << 16) + (ord($bytes[$ofs+10]) << 8) + ord($bytes[$ofs+11]);
			$addr = $objects[$id]["addr"];
			$name = $objects[$id]["name"];
			$k = ($addr >> 24);
			if ((($addr >> 24) & 0xFF) == 0) {
				$key = "songs";
				$key_name = "Song";
			}
			else if ((($addr >> 24) & 0xFF) == 1) {
				$key = "patterns";
				$key_name = "Pattern";
			}
			else {
				$key = "???"; // TODO: report this problem
				$key_name = "???";
			}
			$program_number = (($addr >> 8) & 0xFF) + 1;
			$part_number = ($addr & 0xFF) + 1;
			$mixv[$key][$program_number][$part_number]["name"] = $name;
			$mixv[$key][$program_number][$part_number]["used"] = false;
			$mixv[$key][$program_number][$part_number]["id"] = $id;
			$o = $voices_section_ofs + $voice_offset;
/*			
			// Arps in Mixing Voices ??? 
			$arps_used = array();
			$arps_str = "";
			$arps_used[0] = decword(ord($bytes[$o+0x14]), ord($bytes[$o+0x15]));
			$arps_used[1] = decword(ord($bytes[$o+0x2A]), ord($bytes[$o+0x2B]));
			$arps_used[2] = decword(ord($bytes[$o+0x2C]), ord($bytes[$o+0x2D]));
			$arps_used[3] = decword(ord($bytes[$o+0x2E]), ord($bytes[$o+0x2F]));
			$arps_used[4] = decword(ord($bytes[$o+0x30]), ord($bytes[$o+0x31]));
			$arps_used[5] = decword(ord($bytes[$o+0x32]), ord($bytes[$o+0x33]));
			foreach ($arps_used as $arp) {
				if ($arp == 16383 || $arp < 8192)
					continue;
				$arp_number = $arp - 8192 + 1;
				if (!isset($arps_refs[$arp_number]))
					$arps_refs[$arp_number] = array();
							
					$arp_exists = false;
					$arp_entry = array("bank" => $key_name, "program" => $program_number);
					foreach ($arps_refs[$arp_number] as $a) {
						if ($a == $arp_entry) {
							$arp_exists = true;
							break;
						}
					}
					if (!$arp_exists)
						array_push($arps_refs[$arp_number], $arp_entry);
			}
*/			
			for ($j=0; $j<4; $j++) {
				$p = $o + 312 + ($j*159);
				$element_on = ord($bytes[$p]);
				$wave_select = ord($bytes[$p+1]);
				$waveform_number = decword(ord($bytes[$p+3]), ord($bytes[$p+4]));
				$waveform_bank = $wave_select ? "User" : "Preset";
				if ($waveform_bank == "User")
					$waveform_number++;
				if ($job == "wav_replace" && $job_src_bank == $wave_select && $job_src_wave == $waveform_number) {
					$bytes[$p+1] = chr($job_dst_bank);
					$bytes[$p+3] = chr($job_dst_wave_msb);
					$bytes[$p+4] = chr($job_dst_wave_lsb);
				}
				if ($element_on) {
					$mixv[$key][$program_number][$part_number]["elem"][$j]["bank"] = $waveform_bank;
					$mixv[$key][$program_number][$part_number]["elem"][$j]["number"] = $waveform_number;
					if ($waveform_bank == "User") {
						if (!isset($waveforms_refs[$waveform_number]))
							$waveforms_refs[$waveform_number] = array();
							
						$wave_exists = false;
						$wave_entry = array("bank" => $key_name, "program" => $program_number);
						foreach ($waveforms_refs[$waveform_number] as $wave) {
							if ($wave == $wave_entry) {
								$wave_exists = true;
								break;
							}
						}
						if (!$wave_exists)
							array_push($waveforms_refs[$waveform_number], $wave_entry);
					}
				}
			}
			$i++;
		}
	}
	
	// Performances
	$perfs = array();
	if ($has_performances) {
		$dump .= "<h2><a name='performances'>Performances</a></h2>\n";
		$dump .= "<table border='1'>\n";
		$dump .= "<tr><th>#</th><th>Perf name</th>";
		if ($gear == "S80")
			$dump .= "<th>Mode</th>";
		for ($i=0; $i < $nb_parts_per_perf; $i++)
			$dump .= "<th>Part " . ($i+1) . "</th>";
		for ($i=0; $i < $nb_plg_boards; $i++)
			$dump .= "<th>Plugin Part " . ($i+1) . "</th>";
//		$dump .= "<th>Arps</th>";
		$dump .= "</tr>\n";
		if ($gear == "S80") {
			$increment = 0x433;
			$perf_section_ofs = 0x34200;
			$ofs = $perf_section_ofs;
		}
		else {
			$increment = 32;
			$perf_section_ofs = $sections_offsets["DPFM"];
			$ofs = $perf_section_ofs + 32;
		}
		for ($i=0; $i < $max_performances; $ofs += $increment, $i++) {
			if ($gear == "S80") 
				$perf_data_ofs = $i * $increment;
			else 
				$perf_data_ofs = (ord($bytes[$ofs+8]) << 24) + (ord($bytes[$ofs+9]) << 16) + (ord($bytes[$ofs+10]) << 8) + ord($bytes[$ofs+11]);
			$perf_common_ofs = $perf_section_ofs + $perf_data_ofs;
			$perf_parts_root = $perf_common_ofs + $perf_common_size;
			$perf_name = substr($bytes, $perf_common_ofs, 10);
			
			$arps_used = array();
			$arps_str = "";
			$arps_used[0] = decword(ord($bytes[$perf_common_ofs+0x14]), ord($bytes[$perf_common_ofs+0x15]));
			$arps_used[1] = decword(ord($bytes[$perf_common_ofs+0x2A]), ord($bytes[$perf_common_ofs+0x2B]));
			$arps_used[2] = decword(ord($bytes[$perf_common_ofs+0x2C]), ord($bytes[$perf_common_ofs+0x2D]));
			$arps_used[3] = decword(ord($bytes[$perf_common_ofs+0x2E]), ord($bytes[$perf_common_ofs+0x2F]));
			$arps_used[4] = decword(ord($bytes[$perf_common_ofs+0x30]), ord($bytes[$perf_common_ofs+0x31]));
			$arps_used[5] = decword(ord($bytes[$perf_common_ofs+0x32]), ord($bytes[$perf_common_ofs+0x33]));
			foreach ($arps_used as $arp) {
				if ($arp == 16383 || $arp < 8192)
					continue;
				$arp_number = $arp - 8192 + 1;
				if (!isset($arps_refs[$arp_number]))
					$arps_refs[$arp_number] = array();
							
					$arp_exists = false;
					$arp_entry = array("bank" => "Perf", "program" => $i);
					foreach ($arps_refs[$arp_number] as $a) {
						if ($a == $arp_entry) {
							$arp_exists = true;
							break;
						}
					}
					if (!$arp_exists)
						array_push($arps_refs[$arp_number], $arp_entry);
			}
						
			$perfs[$i] = trim($perf_name);
			$dump .= "<tr><td><a name='PFM_" . yam_program($i) . "'>" . yam_program($i) . "</a></td>";
			$dump .= "<td><b>$perf_name</b></td>";
			$skip = 0;
			if ($gear == "S80") {
				$skip = 2;
				$mode = ord($bytes[$perf_common_ofs+0x0e]);
				$dump .= "<td align='center'><i>" . which($mode, array("split", "4zone", "layer")) . "</i></td>";
			}
			for ($j=0; $j < $nb_parts_per_perf + $nb_plg_boards + $skip; $j++) {
				if ($gear == "S80" && ($j == 16 || $j == 17)) // Skip Part A/D and Part Phrase Clip for S80
					continue;
				$o = $perf_parts_root + $j*$perf_part_size;
				$msb = ord($bytes[$o]);
				$lsb = ord($bytes[$o+1]);
				$cat = bank_select($msb, $lsb);
				$voice_number = ord($bytes[$o+2]);
				if ($gear == "S80") {
					$layer_switch = true ; //ord($bytes[$o+0x1D]) & 1; //TODO: depends on Master Keyboard Mode
					$receive_channel = ord($bytes[$o+3])+1;
					if ($receive_channel == 128)
						$receive_channel = "Off";
				}
				else {
					$layer_switch = ord($bytes[$o+0x1F]) & 1;
					unset($receive_channel);
				}
				if ($j>=$nb_parts_per_perf) 
					$dump .= "<td bgcolor='#F0F0F0'>";
				else 
					$dump .= "<td>";
				if ($layer_switch) {
					$yam_voice_number = yam_program($voice_number);
					$dump .= "$cat $yam_voice_number";
					if ($cat == "USR1" || $cat == "USR2" || $cat == "UDR" 
						|| $cat == "PLGUSR1" || $cat == "PLGUSR2" || $cat == "PLGUSR3"
						|| $cat == "INT" || $cat == "EXT") 
					{
						$dump .= " (<a href='#VCE_$cat" . "_" . yam_program($voice_number) . "'>";
						$dump .= trim($user_voices[$cat][$voice_number]) . "</a>)";
						$user_voices_stats[$cat][$yam_voice_number]["refs"]["Perf " . yam_program($i)] = "#PFM_" . yam_program($i);
					}
					else 
						$dump .= " (" . trim($user_voices[$cat][$voice_number]) . ")";
					if (isset($receive_channel))
						$dump .= " [" . $receive_channel . "]";
				}
				else 
					$dump .= "&nbsp;";
				$dump .= "</td>";
			}
//			$dump .= "<td>$arp_str</td>";
			$dump .= "</tr>\n";
			
			if ($gear == "S80" && $i == 128) // Ugly hack to "jump" to external user performances section
				$voices_section_ofs = 0x55b80 - 128*$increment;
		}
		$dump .= "\n";
		$dump .= "</table><br>\n";
	}
	
	// Songs
	$songs = array(); 
	$songs_by_num = array();
	$ch_colors = array("'#F0F0FF'", "'#FFFFA0'", "'#A0F0F0'", "'#AFF0AF'", "'#E0E0E0'", "'#E0E0E0'", "'#E0E0E0'",
						"'#E0E0E0'", "'#E0E0E0'", "'#E0E0E0'", "'#E0E0E0'", "'#E0E0E0'", "'#E0E0E0'", "'#E0E0E0'",
						"'#E0E0E0'", "'#E0E0E0'"); //TODO: find some nice colors here
	if ($has_songs) {
		$dump .= "<h2><a name='songs'>Songs</a></h2>\n";
		$dump .= "<table border='1'>\n";
		$dump .= "<tr><th>#</th><th>Song name</th>";
		for ($i=0; $i<16; $i++)
			$dump .= "<th>Part " . ($i+1) . "</th>";
		for ($i=0; $i < $nb_plg_boards; $i++)
			$dump .= "<th>Plugin Part " . ($i+1) . "</th>";
		$dump .= "</tr>\n";
		$ofs = $sections_offsets["ESNG"];
		$sect_sz = (ord($bytes[$ofs+4]) << 24) + (ord($bytes[$ofs+5]) << 16) + (ord($bytes[$ofs+6]) << 8) + ord($bytes[$ofs+7]);
		$nb_songs = ($sect_sz - 32) / 32;
		$songs_section_ofs = $sections_offsets["DSMT"];
		$ofs = $songs_section_ofs + 4;
		$songs_section_len = (ord($bytes[$ofs]) << 24) + (ord($bytes[$ofs+1]) << 16) + (ord($bytes[$ofs+2]) << 8) + ord($bytes[$ofs+3]);
		$ofs += 28;
		for ($i=0; $i < $nb_songs; $i++, $ofs += 32) {
			$song_offset = (ord($bytes[$ofs+8]) << 24) + (ord($bytes[$ofs+9]) << 16) + (ord($bytes[$ofs+10]) << 8) + ord($bytes[$ofs+11]);
			$song_root = $songs_section_ofs + $song_offset;
			$header = substr($bytes, $song_root, 21);
			if ($header != "MOTIF678SONG  VCV1.00") {
				echo "Unexpected song header\n";
				continue;
			}
			$song_name = trim(substr($bytes, $song_root+32, 10));
			$song_number = ord($bytes[$song_root+25])+1;
			$songs[$song_number] = $song_name;
			$songs_by_num[$song_number] = $song_name;
			$dump .= "<tr><td align='right'><a name='SNG$song_number'>" . sprintf("% 2d", $song_number) . "</a></td>";
			$dump .= "<td><b>$song_name</b></td>";
			
			$o = $song_root + 128;
			$arps_used = array();
			$arps_str = "";
			$arps_used[0] = decword(ord($bytes[$o+0x14]), ord($bytes[$o+0x15]));
			$arps_used[1] = decword(ord($bytes[$o+0x2A]), ord($bytes[$o+0x2B]));
			$arps_used[2] = decword(ord($bytes[$o+0x2C]), ord($bytes[$o+0x2D]));
			$arps_used[3] = decword(ord($bytes[$o+0x2E]), ord($bytes[$o+0x2F]));
			$arps_used[4] = decword(ord($bytes[$o+0x30]), ord($bytes[$o+0x31]));
			$arps_used[5] = decword(ord($bytes[$o+0x32]), ord($bytes[$o+0x33]));
			foreach ($arps_used as $arp) {
				if ($arp == 16383 || $arp < 8192)
					continue;
				$arp_number = $arp - 8192 + 1;
				if (!isset($arps_refs[$arp_number]))
					$arps_refs[$arp_number] = array();
							
					$arp_exists = false;
					$arp_entry = array("bank" => "Song", "program" => $i+1);
					foreach ($arps_refs[$arp_number] as $a) {
						if ($a == $arp_entry) {
							$arp_exists = true;
							break;
						}
					}
					if (!$arp_exists)
						array_push($arps_refs[$arp_number], $arp_entry);
			}
			
			$mix_parts_root = $song_root + $mix_common_sz;
			if ($gear == "Motif ES")
				$mix_parts_root += 184;
			else if ($gear == "Motif Classic") 
				$mix_parts_root += 168;
			$first = true;
			for ($j=0; $j< 16+$nb_plg_boards; $j++) {
				$o = $mix_parts_root + $j*$mix_parts_sz;
				$msb = ord($bytes[$o]);
				$lsb = ord($bytes[$o+1]);
				$cat = bank_select($msb, $lsb);
				$voice_number = ord($bytes[$o+2]);
				if ($job == "plg_mute" && ($job_what == "songs" || $job_what == "both") && $j >= 16) {
					if ($job_slot == 0 || $job_slot == $j-15) 
						$bytes[$o+3] = chr(0x7F);
				}
				$receive_channel = ord($bytes[$o+3]);
				if ($receive_channel == 0x7F) {
					$dump .= "<td>";
				}
				else {
					$dump .= "<td bgcolor=" . $ch_colors[$receive_channel] . ">";
					$receive_channel++;
					$yam_voice_number = yam_program($voice_number);
					$dump .= "$cat $yam_voice_number";
					if ($cat == "PRE1" || $cat == "PRE2" || $cat == "PRE3" || $cat == "PRE4" || $cat == "PRE5" 
						|| $cat == "PRE6" || $cat == "GM" || $cat == "PDR" || $cat == "GMDR")
					{
						$dump .= " (" . trim($user_voices[$cat][$voice_number]) . ")";
					}
					else if ($cat == "USR1" || $cat == "USR2" || $cat == "UDR") {
						$dump .= " (<a href='#VCE_$cat" . "_$yam_voice_number'>";
						$dump .= trim($user_voices[$cat][$voice_number]) . "</a>)";
						$user_voices_stats[$cat][$yam_voice_number]["refs"]["Song $song_number"] = "#SNG$song_number";
					}
					else if ($cat == "MIXV") {
						$mixv["songs"][$song_number][$voice_number+1]["used"] = true;
						$dump .= " (<a href='#MIXV_S" . sprintf("%02d%02d", $song_number, $voice_number+1) . "'>";
						$dump .= $mixv["songs"][$song_number][$voice_number+1]["name"] . "</a>)";
					}
					$dump .= " [$receive_channel]";
				}
				$dump .= "</td>";
			}
			$dump .= "</tr>\n";
		}
		$dump .= "</table><br>\n";
	}
	
	// Songs Chain
	if ($has_songschain) {
		$songs_chain_ofs = $sections_offsets["DSCH"];
		$dump .= "<h2><a name='songschain'>Songs Chain</a></h2>\n";
		$dump .= "<table border='1'>\n";
		for ($i=0; $i<100; $i++) {
			$song_number = ord($bytes[$songs_chain_ofs+64+$i])+1;
			$dump .= "<tr><td>" . ($i+1) . "</td>";
			if ($song_number < 64) {
				$dump .= "<td>Song $song_number (";
				if (!isset($songs[$song_number]))
					$dump .= "<font color='red'><b>Warning: Song no longer exist!!</b></font>";
				else
					$dump .= "<a href='#SNG$song_number'>" . $songs_by_num[$song_number] . "</a>";
				$dump .= ")</td>";
			}
			else
				$dump .= "<td>--</td>";
			$dump .= "</tr>";
		}
		$dump .= "</table><br>\n";
	}
		
	// Patterns
	$patterns = array(); 
	if ($has_patterns) {
		$dump .= "<h2><a name='patterns'>Patterns</a></h2>\n";
		$dump .= "<table border='1'>\n";
		$dump .= "<tr><th>#</th><th>Pattern name</th>";
		for ($i=0; $i<16; $i++)
			$dump .= "<th>Part " . ($i+1) . "</th>";
		for ($i=0; $i < $nb_plg_boards; $i++)
			$dump .= "<th>Plugin Part " . ($i+1) . "</th>";
		$dump .= "</tr>\n";
		$ofs = $sections_offsets["EPTN"];
		$sect_sz = (ord($bytes[$ofs+4]) << 24) + (ord($bytes[$ofs+5]) << 16) + (ord($bytes[$ofs+6]) << 8) + ord($bytes[$ofs+7]);
		$nb_patterns = ($sect_sz - 32) / 32;
		$patterns_section_ofs = $sections_offsets["DPMT"];
		$ofs = $patterns_section_ofs + 4;
		$patterns_section_len = (ord($bytes[$ofs]) << 24) + (ord($bytes[$ofs+1]) << 16) + (ord($bytes[$ofs+2]) << 8) + ord($bytes[$ofs+3]);
		$ofs += 28;
		for ($i=0; $i<$nb_patterns; $i++, $ofs += 32) {
			$pattern_offset = (ord($bytes[$ofs+8]) << 24) + (ord($bytes[$ofs+9]) << 16) + (ord($bytes[$ofs+10]) << 8) + ord($bytes[$ofs+11]);
			$pattern_root = $patterns_section_ofs + $pattern_offset;
			$header = substr($bytes, $pattern_root, 21);
			if ($header != "MOTIF678PATT  VCV1.00") {
				echo "Unexpected pattern header: $header\n";
				continue;
			}
			$pattern_name = trim(substr($bytes, $pattern_root+32, 10));
			$pattern_number = ord($bytes[$pattern_root+25])+1;
			$patterns[$pattern_number] = $pattern_name;
			$dump .= "<tr><td align='right'><a name='PAT$pattern_number'>" . sprintf("% 2d", $pattern_number) . "</a></td>";
			$dump .= "<td><b>$pattern_name</b></td>";
			
			$o = $pattern_root + 128;
			$arps_used = array();
			$arps_str = "";
			$arps_used[0] = decword(ord($bytes[$o+0x14]), ord($bytes[$o+0x15]));
			$arps_used[1] = decword(ord($bytes[$o+0x2A]), ord($bytes[$o+0x2B]));
			$arps_used[2] = decword(ord($bytes[$o+0x2C]), ord($bytes[$o+0x2D]));
			$arps_used[3] = decword(ord($bytes[$o+0x2E]), ord($bytes[$o+0x2F]));
			$arps_used[4] = decword(ord($bytes[$o+0x30]), ord($bytes[$o+0x31]));
			$arps_used[5] = decword(ord($bytes[$o+0x32]), ord($bytes[$o+0x33]));
			foreach ($arps_used as $arp) {
				if ($arp == 16383 || $arp < 8192)
					continue;
				$arp_number = $arp - 8192 + 1;
				if (!isset($arps_refs[$arp_number]))
					$arps_refs[$arp_number] = array();
							
					$arp_exists = false;
					$arp_entry = array("bank" => "Pattern", "program" => $i+1);
					foreach ($arps_refs[$arp_number] as $a) {
						if ($a == $arp_entry) {
							$arp_exists = true;
							break;
						}
					}
					if (!$arp_exists)
						array_push($arps_refs[$arp_number], $arp_entry);
			}

			$mix_parts_root = $pattern_root + $mix_common_sz;
			if ($gear == "Motif ES")
				$mix_parts_root += 184;
			else if ($gear == "Motif Classic") 
				$mix_parts_root += 168;

			$first = true;
			for ($j=0; $j < 16+$nb_plg_boards; $j++) {
				$o = $mix_parts_root + $j*$mix_parts_sz;
				$msb = ord($bytes[$o]);
				$lsb = ord($bytes[$o+1]);
				$cat = bank_select($msb, $lsb);
				$voice_number = ord($bytes[$o+2]);
				if ($job == "plg_mute" && ($job_what == "patterns" || $job_what == "both") && $j >= 16) {
					if ($job_slot == 0 || $job_slot == $j-15) 
						$bytes[$o+3] = chr(0x7F);
				}
				$receive_channel = ord($bytes[$o+3]);
				if ($receive_channel == 0x7F) {
					$dump .= "<td>";
				}
				else {
					$dump .= "<td bgcolor=" . $ch_colors[$receive_channel] . ">";
					$receive_channel++;
					$yam_voice_number = yam_program($voice_number);
					$dump .= "$cat $yam_voice_number";
					if ($cat == "PRE1" || $cat == "PRE2" || $cat == "PRE3" || $cat == "PRE4" || $cat == "PRE5" 
						|| $cat == "PRE6" || $cat == "GM" || $cat == "PDR" || $cat == "GMDR")
					{
						$dump .= " (" . trim($user_voices[$cat][$voice_number]) . ")";
					}
					else if ($cat == "USR1" || $cat == "USR2" || $cat == "UDR") {
						$dump .= " (<a href='#VCE_$cat" . "_$yam_voice_number'>";
						$dump .= trim($user_voices[$cat][$voice_number]) . "</a>)";
						$user_voices_stats[$cat][$yam_voice_number]["refs"]["Pattern $pattern_number"] = "#PAT$pattern_number";
					}
					else if ($cat == "MIXV") {
						$mixv["patterns"][$pattern_number][$voice_number+1]["used"] = true;
						$dump .= " (<a href='#MIXV_P" . sprintf("%02d%02d", $pattern_number, $voice_number+1) . "'>";
						$dump .= $mixv["patterns"][$pattern_number][$voice_number+1]["name"] . "</a>)";
					}
					$dump .= " [$receive_channel]";
				}
				$dump .= "</td>";
			}
			$dump .= "</tr>\n";
		}
		$dump .= "</table><br>\n";
	}

	// Mix Templates
	if (($gear == "Motif ES" ||$gear == "Motif Classic" ||$gear == "MO" || $gear == "S90") && $has_system) {
		$dump .= "<h2><a name='mixtpl'>Mix Templates</a></h2>\n";
		$dump .= "<table border='1'>\n";
		$dump .= "<tr><th>#</th><th>Template name</th>";
		for ($i=0; $i<16; $i++)
			$dump .= "<th>Part " . ($i+1) . "</th>";
		for ($i=0; $i < $nb_plg_boards; $i++)
			$dump .= "<th>Plugin Part " . ($i+1) . "</th>";
		$dump .= "</tr>\n";
		$ofs = $sections_offsets["DSYS"];
		if ($gear == "Motif ES") {
			$nb_templates = 32;
			$ofs += 3159;
			$increment = 1507;
		}
		else if ($gear == "MO") {
			$nb_templates = 32;
			$ofs += 2148;
			$increment = 1507;
		}
		else if ($gear == "Motif Classic") {
			$nb_templates = 16;
			$ofs += 3086;
			$increment = 1118;
		}
		else if ($gear == "S90") {
			$nb_templates = 32;
			$ofs += 3351;
			$increment = 1118;
		}
		
		for ($i=0; $i < $nb_templates; $i++, $ofs += $increment) {
			$template_name = substr($bytes, $ofs, 10);
			$template_number = $i+1;
			$dump .= "<tr><td align='right'><a name='TPL$i'>" . $template_number . "</a></td>";
			$dump .= "<td><b>$template_name</b></td>";
		
			$mix_parts_root = $ofs + $mix_common_sz;
			$first = true;
			for ($j=0; $j < 16+$nb_plg_boards; $j++) {
				$o = $mix_parts_root + $j*$mix_parts_sz;
				$msb = ord($bytes[$o]);
				$lsb = ord($bytes[$o+1]);
				$cat = bank_select($msb, $lsb);
				$voice_number = ord($bytes[$o+2]);
				if ($job == "plg_mute" && $job_what == "mix" && $j >= 16) {
					if ($job_slot == 0 || $job_slot == $j-15) 
						$bytes[$o+3] = chr(0x7F);
				}
				$receive_channel = ord($bytes[$o+3]);
				if ($receive_channel == 0x7F) {
					$dump .= "<td>";
				}
				else {
					$dump .= "<td bgcolor=" . $ch_colors[$receive_channel] . ">";
					$receive_channel++;
					$yam_voice_number = yam_program($voice_number);
					$dump .= "$cat $yam_voice_number";
					if ($cat == "PRE1" || $cat == "PRE2" || $cat == "PRE3" || $cat == "PRE4" || $cat == "PRE5" 
						|| $cat == "PRE6" || $cat == "GM" || $cat == "PDR" || $cat == "GMDR")
					{
						$dump .= " (" . trim($user_voices[$cat][$voice_number]) . ")";
					}
					else if ($cat == "USR1" || $cat == "USR2" || $cat == "UDR") {
						$dump .= " (<a href='#VCE_$cat" . "_$yam_voice_number'>";
						$dump .= trim($user_voices[$cat][$voice_number]) . "</a>)";
						$user_voices_stats[$cat][$yam_voice_number]["refs"]["Mix Template $template_number"] = "#TPL$template_number";
					}
					else if ($cat == "MIXV") {
						$mixv["songs"][$song_number][$voice_number+1]["used"] = true;
						$dump .= " (<a href='#MIXV_S" . sprintf("%02d%02d", $song_number, $voice_number+1) . "'>";
						$dump .= $mixv["songs"][$song_number][$voice_number+1]["name"] . "</a>)";
					}
					$dump .= " [$receive_channel]";
				}
				$dump .= "</td>";
			}
			$dump .= "</tr>\n";
		}
		$dump .= "</table><br>\n";
	}

	// Masters
	if ($has_masters) {
		$dump .= "<h2><a name='masters'>Masters</a></h2>\n";
		$dump .= "<table border='1'>\n";
		$dump .= "<tr><th>#</th><th>Master name</th><th>Reference</th></tr>\n";
		$master_section_ofs = $sections_offsets["DMST"] + 32 + 128*32;
		for ($i=0; $i<128; $i++) {
			$ofs = $master_section_ofs + $i*0x60;
			$d = array();
			$b = substr($bytes, $ofs, 0x60);
			for ($j=0; $j<0x60; $j++) 
				$d[$j] = ord($b[$j]);
			$master_name = substr($b, 0, 10);
			$mst_number = yam_program($i);
			$prefix = "MASTER $mst_number (" . sprintf("%03d", $i+1) . ")";
		
			$dump .= "<tr><td><a name='MST$mst_number'>$mst_number (" . sprintf("%03d", $i+1) . ")</a></td>";
			$dump .= "<td><b>$master_name</b></td>";
			$dump .= "<td>";
			$type = which($d[0x0D], array("Voice", "Performance", "Pattern", "Song"));
			if ($type == "Voice") {
				unset($ref);
				$cat = bank_select($d[0x0E], $d[0x0F]);
				$yam_voice_number = yam_program($d[0x10]);
				$dump .= "$type $cat " . yam_program($d[0x10]);
				if ($cat == "USR1" || $cat == "USR2" || $cat == "UDR") {
					$dump .= " (<a href='#VCE_$cat" . "_" . yam_program($d[0x10]) . "'>";
					$dump .= trim($user_voices[$cat][$d[0x10]]) . "</a>)";
					$user_voices_stats[$cat][$yam_voice_number]["refs"]["Master $mst_number"] = "#MST$mst_number";
				}
				else 
					$dump .= " (" . trim($user_voices[$cat][$d[0x10]]) . ")";
			}
			else if ($type == "Performance") {
				$perf_number = $d[0x10];
				$yam_perf_number = yam_program($perf_number);
				$dump .= "Performance $yam_perf_number ";
				if (!isset($perfs[$perf_number]))
					$dump .= "- <font color='red'><b>Warning: Performance no longer exist!!</b></font>";
				else 
					$dump .= "(<a href='#PFM_$yam_perf_number'>" . trim($perfs[$perf_number]) . "</a>)";
			}
			else if ($type == "Song") {
				$song_number = $d[0x10]+1;
				$dump .= "Song $song_number ";
				if (!isset($songs[$song_number]))
					$dump .= "- <font color='red'><b>Warning: Song no longer exist!!</b></font>";
				else 
					$dump .= "(<a href='#SNG$song_number'>" . trim($songs[$song_number]) . "</a>)";
			}
			else if ($type == "Pattern") {
				$pattern_number = $d[0x10]+1;
				$dump .= "Pattern $pattern_number ";
				if (!isset($patterns[$pattern_number]))
					$dump .= "- <font color='red'><b>Warning: Pattern no longer exist!!</b></font>";
				else 
					$dump .= "(<a href='#PAT$pattern_number'>" . trim($patterns[$pattern_number]) . "</a>)";
			}
			else 
				$dump .= "$type " . ($d[0x10]+1);
			
			$dump .= "</td></tr>\n";
		}
		$dump .= "</table><br>\n";
	}
	
	// Arpeggios
	if ($has_user_arps) {
		$dump .= "<h2><a name='arps'>User Arpeggios</a></h2>\n";
		$dump .= "<table border='1'>\n";
		$dump .= "<tr><th>#</th><th>Arpeggio name</th><th>#Refs</th><th align='left'>Referenced by</th></tr>\n";
		$arps_section_ofs = $sections_offsets["DARP"];
		$ofs = $arps_section_ofs + 0x40;
		$root = $ofs + $nb_user_arps*20;
		$last = false;
		if ($gear == "S90" || $gear == "Motif Classic") 
			$ofs_inc = 10;
		else
			$ofs_inc = 20;
		
		for ($i=0; $i < $nb_user_arps && !$last; $i++, $ofs+=$ofs_inc) {
			$arp_number = $i+1;
			if ($gear == "S90" || $gear == "Motif Classic") { //UGLY
				//if (ord($bytes[$ofs]) != 0)
				//	break;
				$arp_name = trim(substr($bytes, $ofs+1, 8));
				if (ord($bytes[$ofs+8]) < 32) {
					$last = true;
					$arp_name = substr($bytes, $ofs+1, 7);
				}
			}
			else {
				if (ord($bytes[$ofs]) != 0x8C || ord($bytes[$ofs+1]) != 0x6E) 
					continue;
				$o1 = (ord($bytes[$ofs+2]) << 8) + ord($bytes[$ofs+3]);
				$o2 = (ord($bytes[$ofs+18]) << 8) + ord($bytes[$ofs+19]);
				$delta = $o2 - $o1;
				$arp_name = trim(substr($bytes, $root + $delta + 3, 8));
				$root += $delta + 0x50;
			}
			$dump .= "<tr><td align='right'><a name='ARP$i'>";
			$dump .= $arp_number . "</a></td><td><b>$arp_name</b></td>";
					
			if (isset($arps_refs[$arp_number])) {
				$dump .= "<td align='center'>" . count($arps_refs[$arp_number]) . "</td>";
				$dump .= "<td>";
				$first = true;
				foreach ($arps_refs[$arp_number] as $ref) {
					if ($first) 
						$first = false;
					else
						$dump .= ", ";
					
					if ($ref["bank"] == "Song") {
						$dump .= $ref["bank"] . " " . $ref["program"] . " (";
						$song_number = $ref["program"];
						$dump .= "<a href='#SNG$song_number'>" . $songs[$song_number] . "</a>)";
					}
					else if ($ref["bank"] == "Pattern") {
						$dump .= $ref["bank"] . " " . $ref["program"] . " (";
						$pattern_number = $ref["program"];
						$dump .= "<a href='#PAT$pattern_number'>" . $patterns[$pattern_number] . "</a>)";
					}
					else if ($ref["bank"] == "Perf") {
						$perf_number = $ref["program"];
						$yam_perf_number = yam_program($perf_number);
						$dump .= $ref["bank"] . " $yam_perf_number (";
						$dump .= "<a href='#PFM_$yam_perf_number'>" . $perfs[$perf_number] . "</a>)";
					}
					else {
						$dump .= $ref["bank"] . " " . $ref["program"] . " (";
						$dump .= "<a href='#VCE_" . $ref["bank"] . "_" . $ref["program"] . "'>";
						$dump .= $ref["name"] . "</a>)";
					}
				}
				$dump .= "</td>";
			}
			else
				$dump .= "<td></td>";
			
			
			$dump .= "</tr>\n";
		}
		$dump .= "</table>\n";
	}
	
	// Waveforms
	if ($has_waveforms) {
		$dump .= "<h2><a name='waveforms'>Waveforms</a></h2>\n";
		$dump .= "<table border='1'>\n";
		$dump .= "<tr><th>#</th><th>Waveform name</th><th>#Refs</th><th align='left'>Referenced by</th></tr>\n";
		$waveforms_section_ofs = $sections_offsets["EWFM"];
		$ofs = $waveforms_section_ofs + 4;
		$waveforms_section_len = (ord($bytes[$ofs]) << 24) + (ord($bytes[$ofs+1]) << 16) + (ord($bytes[$ofs+2]) << 8) + ord($bytes[$ofs+3]);
		$ofs += 28;
		while ($ofs < $waveforms_section_ofs + $waveforms_section_len) {
			$waveform_name = substr($bytes, $ofs+4, 10);
			$waveform_number = (ord($bytes[$ofs+18]) << 8) + ord($bytes[$ofs+19]) + 1;
			$waveforms_names[$waveform_number] = $waveform_name;
			$dump .= "<tr><td align='right'><a name='WFM$waveform_number'>";
			$dump .= $waveform_number . "</a></td><td><b>$waveform_name</b></td>";
			if (isset($waveforms_refs[$waveform_number])) {
				$dump .= "<td align='center'>" . count($waveforms_refs[$waveform_number]) . "</td>";
				$dump .= "<td>";
				$first = true;
				foreach ($waveforms_refs[$waveform_number] as $ref) {
					if ($first) 
						$first = false;
					else
						$dump .= ", ";
					$dump .= $ref["bank"] . " " . $ref["program"] . " (";
					if ($ref["bank"] == "Song") {
						$song_number = $ref["program"];
						$dump .= "<a href='#SNG$song_number'>" . $songs[$song_number] . "</a>)";
					}
					else if ($ref["bank"] == "Pattern") {
						$pattern_number = $ref["program"];
						$dump .= "<a href='#PAT$pattern_number'>" . $patterns[$pattern_number] . "</a>)";
					}
					else {
						$dump .= "<a href='#VCE_" . $ref["bank"] . "_" . $ref["program"] . "'>";
						$dump .= $ref["name"] . "</a>)";
					}
				}
				$dump .= "</td>";
			}
			else
				$dump .= "<td></td>";
			$dump .= "</tr>\n";
			$ofs += 32;
		}
		$dump .= "</table><br>\n";
	}
	
	// Voices (display)
	if ($has_user_voices || $has_drum_voices || $has_plugin_voices) {
		$dump .= "<h2><a name='uservoices'>User Voices</a></h2>\n";
		$dump .= "<table border='1'>\n";
		$dump .= "<tr><th>#</th><th>Voice name</th><th>Cat</th><th>Sub Cat</th>";
		for ($i=0; $i<4; $i++)
			$dump .= "<th>Element " . ($i+1) . "</th>";
		$dump .= "<th>Ins FX</th>";
		$dump .= "<th>#Ref</th><th align='left'>Referenced by</th>";
		$dump .= "</tr>\n";
		$cats = array_keys($user_voices_stats);
		foreach ($cats as $cat) {
			$voice_numbers = array_keys($user_voices_stats[$cat]);
			foreach ($voice_numbers as $voice_number) {
				$dump .= "<tr>";
				$dump .= "<td><a name='VCE_$cat" . "_$voice_number'>$cat $voice_number</td>";
				$dump .= "<td><b>" . $user_voices_stats[$cat][$voice_number]["name"] . "</b></td>";
				$dump .= "<td align='center'>" . $user_voices_stats[$cat][$voice_number]["category"] . "</td>";
				$dump .= "<td>" . $user_voices_stats[$cat][$voice_number]["subcategory"] . "</td>";
				if ($cat == "UDR" || $cat == "PLGUSR1" || $cat == "PLGUSR2" || $cat == "PLGUSR3")
					$dump .= "<td colspan='4'></td>";
				else {
					for ($elem=0; $elem<4; $elem++) {
						if (isset($user_voices_stats[$cat][$voice_number]["elem"][$elem])) { 
							$bank = $user_voices_stats[$cat][$voice_number]["elem"][$elem]["bank"];
							$number = $user_voices_stats[$cat][$voice_number]["elem"][$elem]["number"];
							$elem_data = "$bank $number";
							if ($bank == "User") {
								if (!isset($waveforms_names[$number])) 
									$elem_data .= " (<font color='red'>Waveform not found</font>)";
								else 
									$elem_data .= " (<a href='#WFM$number'>" . $waveforms_names[$number] . "</a>)";
							}
							else 
								$elem_data .= " (" . $preset_waves[$gear][$number] . ")";
						}
						else 
							$elem_data = "";
						$dump .= "<td>$elem_data</td>";
					}
				}
				if (($gear == "Motif ES" || $gear == "Motif Rack ES") && ($cat == "USR1" || $cat == "USR2" || $cat == "USR3")) {
					$insA = $user_voices_stats[$cat][$voice_number]["insA"];
					$insB = $user_voices_stats[$cat][$voice_number]["insB"];
					$unused = $user_voices_stats[$cat][$voice_number]["ins_fx_unused"];
					if (!$insA && !$insB)
						$dump .= "<td><font color='red'>No Ins. FX</font></td>";
					else { 
						if (!$insA)
							$insA = "-";
						if (!$insB)
							$insB = "-";
						$used = "";
						if ($unused)
							$used = "(<font color='red'>Unused!</font>)";
						$dump .= "<td>$insA / $insB $used</td>";
					}
				}
				else 
					$dump .= "<td>&nbsp;</td>";
					
				if (isset($user_voices_stats[$cat][$voice_number]["refs"])) {
					$refs = $user_voices_stats[$cat][$voice_number]["refs"];
					$ref_keys = array_keys($refs);
					$dump .= "<td align='center'>" . count($ref_keys) . "</td>";
					$dump .= "<td>";
					$first = true;
					foreach ($ref_keys as $ref) {
						if (!$first)
							$dump .= ", ";
						$link = $refs[$ref];
						$dump .= "<a href='$link'>$ref</a>";
						$first = false;
					}
					$dump .= "</td>";
				}
				else 
					$dump .= "<td></td><td></td>";
				$dump .= "</tr>\n";
			}
		}
		$dump .= "</table><br>\n";
	}
	
	// Mixing Voices (display)
	if ($has_mixing_voices) {
		$dump .= "<h2><a name='mixvoices'>Mixing Voices</a></h2>\n";
		$dump .= "<table border='1'>\n";
		$dump .= "<tr>";
		if ($show_ids) 
			$dump .= "<th>id</th>";
		$dump .= "<th>Voice name</th><th>Program</th><th>Part</th>";
		for ($i=0; $i<4; $i++)
			$dump .= "<th>Element " . ($i+1) . "</th>";
		$dump .= "<th>Comments</th></tr>\n";
		foreach (array("songs", "patterns") as $type) {
			foreach (array_keys($mixv[$type]) as $program_number) {
				foreach (array_keys($mixv[$type][$program_number]) as $part_number) {
					$name = $mixv[$type][$program_number][$part_number]["name"];
					$dump .= "<tr>";
					if ($show_ids) 
						$dump .= sprintf("<td>0x%04x</td>", $mixv[$type][$program_number][$part_number]["id"]);
					$dump .= "<td><a name='MIXV_" . ($type == "songs" ? "S" : "P");
					$dump .= sprintf("%02d%02d", $program_number, $part_number) . "'>";
					$dump .= "<b>$name</b></a></td>";
					$dump .= "<td>" . ($type == "songs" ? "Song " : "Pattern ") . "$program_number (";
					$dump .= "<a href='#" . ($type == "songs" ? "SNG" : "PAT") . "$program_number'>";
					$dump .= ($type == "songs" ? trim($songs[$program_number]) : trim($patterns[$program_number]));
					$dump .= "</a>)</td>";
					$dump .= "<td align='center'>$part_number</td>";
					for ($elem=0; $elem<4; $elem++) {
						if (isset($mixv[$type][$program_number][$part_number]["elem"][$elem])) { 
							$bank = $mixv[$type][$program_number][$part_number]["elem"][$elem]["bank"];
							$number = $mixv[$type][$program_number][$part_number]["elem"][$elem]["number"];
							$elem_data = "$bank $number";
							if ($bank == "User") 
								$elem_data .= " (<a href='#WFM$number'>" . $waveforms_names[$number] . "</a>)";
							else 
								$elem_data .= " (" . $preset_waves[$gear][$number] . ")";
						}
						else 
							$elem_data = "";
						$dump .= "<td>$elem_data</td>";
					}
					$dump .= "<td>";
					if (!$mixv[$type][$program_number][$part_number]["used"]) 
						$dump .= "<font color='red'><b>Warning: This mixing voice is not used!!</b></font>";
					$dump .= "</td>";							
					$dump .= "</tr>\n";
				}
			}
		}
		$dump .= "</table><br>\n";
	}
	
	// Favorites
	if ($has_system && ($gear == "Motif ES" || $gear == "S90")) {
		$dump .= "<h2><a name='fav'>Favorites</a></h2>\n";
		$dump .= "<table border='1'>\n";
		$ofs = $sections_offsets["DSYS"];
		if ($gear == "Motif ES")
			$ofs += 0x857;
		else if ($gear == "S90")
			$ofs += 0x917;
		for ($i=0, $nb=1; $i<256; $i++, $ofs += 4) {
			$bank_msb = ord($bytes[$ofs]);
			$bank_lsb = ord($bytes[$ofs+1]);
			if ($bank_msb == 0x7F && $bank_lsb == 0x7F)
				continue;
			$cat = bank_select($bank_msb, $bank_lsb);
			$voice_number = ord($bytes[$ofs+2]);
			$yam_voice_number = yam_program($voice_number);
			
			if ((($nb-1) % 4) == 0)
				$dump .= "<tr>";
			$dump .= "<td>$nb</td>";
			$dump .= "<td>$cat $yam_voice_number";
			if ($cat == "USR1" || $cat == "USR2" || $cat == "UDR") {
				$dump .= " (<a href='#VCE_$cat" . "_$yam_voice_number'>";
				$dump .= trim($user_voices[$cat][$voice_number]) . "</a>)";
			}
			else {
				if (substr($cat, 0, 6) != "PLGPRE")
					$dump .= " (" . trim($user_voices[$cat][$voice_number]) . ")";
			}
			
			$dump .= "</td>";
			if (($nb % 4) == 0)
				$dump .= "</tr>";
			$nb++;
		}
	}
	
/*	
	// For debugging purpose only	
	$dump .= "<h2><a name='objects'>Objects</a></h2>\n";
	$dump .= "<table border='1'>\n";
	$ids = array_keys($objects);
	asort($ids);
	$i = 0;
	foreach ($ids as $id) {
		$dump .= "<tr>";
		$dump .= "<td align='right'>$i</td>";
		$dump .= "<td>" . sprintf("0x%08X", $id) . "</td>";
		$dump .= "<td>" . $objects[$id]["section"] . "</td>";
		$dump .= "<td>" . $objects[$id]["name"] . "</td>";
		$dump .= "</tr>";
		$i++;
	}
	$dump .= "</table><br>\n";
*/		

	if ($job == "m7a_to_w7a") {
		// Rewrite the file header
		$bytes[0] = 'A';
		$bytes[1] = '0';
		$bytes[2] = '7';
		$bytes[3] = '4';
		$bytes[4] = '5';		
		
		// Change the file extension
		$filename = $_FILES["bininput1"]["name"];
		$ext = strtoupper(substr($filename, -4));
		if ($ext == ".M7A") { // it should!
			$filename = substr_replace($filename, "W7A", -3);
		}
		else 
			$filename .= ".W7A";
		$_FILES["bininput1"]["name"] = $filename;
		
		
	}

	if ($dump_binary) {
		header("Content-Type: application/octet-stream");
		header("Content-Length: $sz");
		header('Content-Disposition: attachment; filename="NEW-' . $_FILES["bininput1"]["name"] . '";');


		echo $bytes;
		
		exit;
	}
		
?>
<html>
<head>
<title>W7ADump Web result</title>
<style type="text/css">
<!--
body {font-family:arial;font-size:11px;margin:5px;}
table {border-collapse:collapse;}
th {font-family:arial;font-size:11px;margin:5px;white-space:nowrap;}
td {font-family:arial;font-size:11px;margin:5px;white-space:nowrap;}
input {font-family:arial;font-size:11px}
a:link,a:active,a:visited { text-decoration: none; color : #ff0000; }
a:hover		{ text-decoration: underline; color : #7f0000; }
-->
</style>
</head>
<body>
<?php
	echo $dump;
?>
</body>
</html>
