{- wavedrum-lib, a library to parse, edit and write Korg Wavedrum programs. Copyright (C) 2013 Ricardo Wurmus This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -} {-# LANGUAGE OverloadedStrings #-} module Wavedrum.Algorithm where import Control.Applicative import Control.Monad import qualified Data.Text as T import Wavedrum.Types type ParamSetting = (T.Text, Range) data AlgoType = Single | Double deriving (Show, Eq) data Algorithm = Algorithm { algoType :: AlgoType , algoName :: T.Text , algoParams :: [ParamSetting] } deriving (Show, Eq) apply3 :: (a -> b -> c -> d) -> (a,b,c) -> d apply3 f (a,b,c) = f a b c algorithms :: [Algorithm] algorithms = map (apply3 Algorithm) [ (Single, "Udu", [ ("Clang Pitch", (0,100)) , ("Clang Decay", (0,100)) , ("Clang Color", (0,100)) , ("Clang Height", (0,100)) , ("Clang Width", (0,100)) , ("Clang Level", (0,100)) , ("Boom Level", (0,100)) , ("Clang Type", (0,100)) ]) , (Single, "Temple", [ ("Bell Color", ( 0,100)) , ("Harmonic Shift", (-50, 50)) , ("Bell Type", ( 0,100)) , ("Bend Range", ( 0,100)) , ("Pressure Level", ( 0,100)) , ("Bell Height", ( 0,100)) , ("Bell Width", ( 0,100)) , ("Bell Thickness", ( 0,100)) ]) , (Single, "WoodDrum", [ ("Wood Type", ( 0,100)) , ("Shell Decay", ( 0,100)) , ("Shell Pitch", ( 0,100)) , ("Shell Level", ( 0,100)) , ("Mute Cutoff", ( 0,100)) , ("Mute Resonance", ( 0,100)) , ("Mute Pitch", ( 0,100)) , ("Velocity Curve", ( 0,100)) ]) , (Single, "Analog", [ ("Filter Cutoff", ( 0,100)) , ("Resonance", ( 0,100)) , ("Pitch EG Depth", ( 0,100)) , ("Filter EG Depth", ( 0,100)) , ("Pressure Resonance", (-50, 50)) , ("Filter EG Decay", ( 0,100)) , ("Mute Depth", ( 0,100)) , ("Effects Level", ( 0,100)) ]) , (Single, "Arimbao", [ ("Tone Pitch", ( 0,100)) , ("Tension Balance", ( 0,100)) , ("Tone Level", ( 0,100)) , ("Drum Type", ( 0,100)) , ("Damping", ( 0,100)) , ("Bark Level", ( 0,100)) , ("Pitch Interval", ( 0,100)) , ("Dry Level", ( 0,100)) ]) , (Single, "Sawari-A", [ ("Buzz Intensity", ( 0,100)) , ("L-R Delay", ( 0,100)) , ("Drone Pitch", (-50, 50)) , ("Drone Decay", ( 0,100)) , ("Drone Balance", (-50, 50)) , ("Brightness", ( 0,100)) , ("Drone Level", ( 0,100)) , ("Drum Level", ( 0,100)) ]) , (Single, "WindDrum", [ ("Fine Tuning", ( 0,100)) , ("Scale Select", ( 0, 7)) , ("Balance", (-50, 50)) , ("Tone Decay", ( 0,100)) , ("Interval", ( 0,100)) , ("Noise Filter", ( 0,100)) , ("Noise Decay", ( 0,100)) , ("Noise Color", ( 0,100)) ]) , (Single, "Triangle", [ ("Brightness", ( 0,100)) , ("Pitch 1", ( 0,100)) , ("Pitch 2", ( 0,100)) , ("Pitch 3", ( 0,100)) , ("Metal Type 1", ( 0,100)) , ("Metal Type 2", ( 0,100)) , ("Metal Type 3", ( 0,100)) , ("Metal Type 4", ( 0,100)) ]) , (Single, "Water", [ ("Pitch Change", ( 0,100)) , ("Brightness", ( 0,100)) , ("Drum Type 1", ( 0,100)) , ("Drum Type 2", ( 0,100)) , ("Portamento", ( 0,100)) , ("Pressure = Level", ( 0,100)) , ("Water Pitch", ( 0,100)) , ("Water Strength", ( 0,100)) ]) , (Single, "BigHand", [ ("Drum Type", ( 0,100)) , ("Bass Tone Level", ( 0,100)) , ("Slap Level", ( 0,100)) , ("Slap Decay", ( 0,100)) , ("Slap Color", ( 0,100)) , ("Slap Filter", ( 0,100)) , ("Slap Resonance", ( 0,100)) , ("Threshold", ( 0,100)) ]) , (Single, "SteelST", [ ("Brightness", ( 0,100)) , ("Pressure Pitch", ( 0,100)) , ("Pressure Color", ( 0,100)) , ("Pressure Range", (-50, 50)) , ("Threshold", ( 0,100)) , ("Balance", (-50, 50)) , ("Wah Depth", ( 0,100)) , ("Gauge", ( 0,100)) ]) , (Single, "Mo'Daiko", [ ("Drum Type", ( 0,100)) , ("Pitch EG Depth", ( 0,100)) , ("LFO Rate", ( 0,100)) , ("LFO Depth", ( 0,100)) , ("Damping", ( 0,100)) , ("Pressure Pitch", ( 0,100)) , ("Resonance Sweep", ( 0,100)) , ("Mute Depth", ( 0,100)) ]) , (Single, "Sawari-B", [ ("Bend Range", ( 0,100)) , ("Decay Balance", (-50, 50)) , ("Level Balance", (-50, 50)) , ("Top Color", ( 0,100)) , ("Drone Color", ( 0,100)) , ("Buzz Intensity", ( 0,100)) , ("Scale Select", ( 0, 7)) , ("Bend/Scale Select", ( 0, 1)) ]) , (Single, "Tabla", [ ("Baya Pitch", ( 0,100)) , ("Baya Level", ( 0,100)) , ("Baya Decay", ( 0,100)) , ("Bend Curve", ( 0,100)) , ("Damping", ( 0,100)) , ("Shell Pitch", ( 0,100)) , ("Shell Damping", ( 0,100)) , ("Shell Decay", ( 0,100)) ]) , (Single, "Gong1", [ ("Gong Color", ( 0,100)) , ("LFO Depth", (-50, 50)) , ("LFO Rate", ( 0,100)) , ("Damping", ( 0,100)) , ("Gong Type", ( 0,100)) , ("Harmonic Shift", ( 0,100)) , ("Thickness", ( 0,100)) , ("Model Select", ( 0, 7)) ]) , (Single, "Wah Harp", [ ("Damping", ( 0,100)) , ("Wah Color", ( 0,100)) , ("String Character", ( 0,100)) , ("Wah Balance", ( 0,100)) , ("LoDamp", ( 0,100)) , ("Attack Level", ( 0,100)) , ("Attack LoDamp", ( 0,100)) , ("Bend Range", (-50, 50)) ]) , (Single, "TalkDrum", [ ("Bend Range", ( 0,100)) , ("Brightness 1", ( 0,100)) , ("Brightness 2", ( 0,100)) , ("Decay Interval", ( 0,100)) , ("Tension", ( 0,100)) , ("Drum Type", ( 0,100)) , ("Attack", ( 0,100)) , ("Pressure Filter", ( 0,100)) ]) , (Single, "Jingle", [ ("Jingle Type", ( 0,100)) , ("Jingle Size", (-50, 50)) , ("Repeat", ( 0,100)) , ("Bell Decay", ( 0,100)) , ("Brightness", ( 0,100)) , ("Pressure Decay", (-50, 50)) , ("Pressure Pitch", (-50, 50)) , ("Model Select", ( 0, 2)) ]) , (Single, "Bonga", [ ("Shell Size", ( 0,100)) , ("Shell Damp", ( 0,100)) , ("Sub Harmonics", ( 0,100)) , ("Brightness", ( 0,100)) , ("Drum Size", ( 0,100)) , ("Slap Level", ( 0,100)) , ("Slap Decay", ( 0,100)) , ("Slap Color", ( 0,100)) ]) , (Single, "Koto", [ ("Fine Tune", (-50, 50)) , ("Pluck Position", (-50, 50)) , ("Damping", ( 0,100)) , ("String Type 1", ( 0,100)) , ("String Type 2", ( 0,100)) , ("Plucked Noise", ( 0,100)) , ("Bottom String", ( 0, 12)) , ("String Range", ( 0, 12)) ]) , (Single, "Bamboo", [ ("Fine Tune", (-50, 50)) , ("Accent Level", ( 0,100)) , ("Velocity Range", ( 0,100)) , ("2nd Pitch", (-50, 50)) , ("Pressure Pitch", (-50, 50)) , ("Pressure Range", (-50, 50)) , ("Scale Select", ( 0, 7)) , ("Sequence Type", ( 0, 2)) ]) , (Single, "JingDrum", [ ("Jingle Level", ( 0,100)) , ("Drum Level", ( 0,100)) , ("Brightness 1", ( 0,100)) , ("Drum Width", ( 0,100)) , ("Pressure Decay", (-50, 50)) , ("Jingle Pitch", ( 0,100)) , ("Jingle Decay", ( 0,100)) , ("Brightness 2", ( 0,100)) ]) , (Single, "Don-Hya", [ ("Seq. Note Volume", ( 0,100)) , ("Motif Select", ( 0, 7)) , ("Delay Time", ( 0,100)) , ("Portamento", ( 0,100)) , ("Brightness", ( 0,100)) , ("Noise-Color", ( 0,100)) , ("Noise-Level", ( 0,100)) , ("Pitch Interval", ( 0,100)) ]) , (Single, "Mariko", [ ("Tone Pitch", ( 0,100)) , ("Pitch Response", ( 0,100)) , ("Pressure Pitch", ( 0,100)) , ("Tone Level", ( 0,100)) , ("Resonance Balance", ( 0,100)) , ("Brightness", ( 0,100)) , ("Drum Type1", ( 0,100)) , ("Drum Type2", ( 0,100)) ]) , (Single, "Upo", [ ("Pitch EG Depth", ( 0,100)) , ("Harmonics", ( 0,100)) , ("HiDamp", ( 0,100)) , ("Filter Level", ( 0,100)) , ("Filter Cutoff", ( 0,100)) , ("Pop Level", ( 0,100)) , ("Pop Pitch", ( 0,100)) , ("Pop Random", ( 0,100)) ]) , (Single, "1812", [ ("Pressure Pitch", ( 0,100)) , ("Brightness", ( 0,100)) , ("Ensemble Size", ( 0,100)) , ("Delay Control", ( 0,100)) , ("Snappy Level", ( 0,100)) , ("LoDamp", ( 0,100)) , ("HiDamp", ( 0,100)) , ("Resonance", ( 0,100)) ]) , (Double, "Conga", type1) , (Double, "Bongo", type1) , (Double, "Snare Drum 1", type2) , (Double, "Snare Drum 2", type2) , (Double, "Snare Drum 3", type2) , (Double, "Timbales", type2) , (Double, "Cajon", type3) , (Double, "Djembe", type3) , (Double, "Bass Drum + Snare Drum 1", type3) , (Double, "Bass Drum + Snare Drum 2", type3) -- only available on Wavedrum Oriental , (Double, "Darbuka", type4) --37 , (Double, "Darbuka ensemble", type4) --38 , (Double, "Darbuka Turkish", type4) --39 , (Double, "Tar", type4) --40 , (Double, "Daf", type4) --41 , (Double, "Doyra", type4) --42 , (Double, "Req", --43 [ ("Switching", ( 0,100)) , ("PCM Balance", (-50, 50)) , ("Alg-PCM Balance", (-50, 50)) , ("Drum Width", ( 0,100)) , ("Jingle Pitch", ( 0,100)) , ("Jingle Decay", ( 0,100)) , ("Brightness 2", ( 0,100)) -- sic , ("Sensitivity", ( 0,100)) ]) , (Double, "Daf Iranian", type6) --44 , (Double, "Bendir", type6) --45 ] where type1 = [ ("Switching", ( 0,100)) , ("PCM Balance", (-50, 50)) , ("Alg-PCM Balance", (-50, 50)) , ("Sub Harmonics", ( 0,100)) , ("Brightness", ( 0,100)) , ("Slap Level", ( 0,100)) , ("Slap Decay", ( 0,100)) -- manual wrongly says "Delay" , ("Slap Color", ( 0,100)) ] type2 = [ ("Switching", ( 0,100)) , ("PCM Balance", (-50, 50)) , ("Alg-PCM Balance", (-50, 50)) , ("Curve", ( 0,100)) , ("Brightness", ( 0,100)) , ("Snappy Decay", ( 0,100)) , ("Snappy Level", ( 0,100)) , ("Shell Type", ( 0, 4)) ] type3 = [ ("Switching", ( 0,100)) , ("PCM Balance", (-50, 50)) , ("Alg-PCM Balance", (-50, 50)) , ("Curve", ( 0,100)) , ("Brightness", ( 0,100)) , ("Snappy Decay", ( 0,100)) , ("Snappy Level", ( 0,100)) , ("Shell Type", ( 0, 4)) ] type4 = [ ("Switching", ( 0,100)) , ("PCM Balance", (-50, 50)) , ("Alg-PCM Balance", (-50, 50)) , ("Drum Type", ( 0,100)) , ("Slap Level", ( 0,100)) , ("Slap Decay", ( 0,100)) , ("Slap Color", ( 0,100)) , ("Sensitivity", ( 0,100)) ] type6 = [ ("Switching", ( 0,100)) , ("PCM Balance", (-50, 50)) , ("Alg-PCM Balance", (-50, 50)) , ("Curve", ( 0,100)) , ("Brightness", ( 0,100)) , ("Snappy Decay", ( 0,100)) , ("Snappy Level", ( 0,100)) , ("Sensitivity", ( 0,100)) ] headInstruments :: [T.Text] headInstruments = [ "Multi Tubb Kick" , "Dance Kicks w/reverse" , "Whistle Kick" , "Tubby Kick /TOM" , "88 Hat/Kick" , "Kick 99" , "BD Ambi" , "BD Dry" , "Kick & Snare" , "Dance Kick & Snare 2" , "Kick, Snare & Hat" , "Dance BD & 99 SD" , "Voice BD/SD/HH" , "Orch SD to Orchestra BD" , "SD to BD" , "Dance BD & SD" , "Velo Ambi Snare" , "Samba Snare" , "Orch Snare w/ Cym" , "Hand Claps" , "Kompton Klaps" , "Multi Powerful Tom" , "Ambi Drum" , "Two Pitched Tom" , "Rock Toms" , "Brushes 3 Toms" , "Low Tom/ velo Forest" , "Tom Vintage Hi" , "Tom Soul" , "Mark Tree Chord w/Thump" , "E.Tom Velo Set" , "Tiki Tiki Tom Tom" , "Epic Hi-Toms Head" , "Low War Tom Rim" , "Guitar and Ghost" , "Steel Drum (F-A-B -C-F)" , "Mouth Harp C Drone" , "Shaker/Kick" , "Shaker to Clave" , "Caxixi" , "Triangle" , "Conga Clap" , "Conga Hi-Close/Open" , "Bassish Lo Conga" , "Conga Lo-Basstone" , "Conga Gliss" , "Low Conga" , "Super Conga" , "Tumba Open" , "Broken Kalimba (Head)" , "Balafon" , "Djembe" , "Dynamic Djembe" , "Djembe Closed Slap" , "Iya Boca Choke" , "Boca Open" , "Iya Chacha UP" , "Iya Boca Open+Slap" , "Itotele Boca Open" , "Okonkolo → Iya (Open)" , "Tom/Iya Drum Corps" , "Itotele/Iya Mix" , "Darbuka Head" , "Paila Lo" , "Paila Hi" , "Lo Hi Timbales" , "Castanet" , "Guiro" , "RecoReco 4 Velo" , "Surdo Open" , "Pandeiro" , "Tambourine" , "Rek Head" , "Rek" , "Udus/ Shaker" , "Gamelan" , "Tabla\"Tele\"" , "Japanese Tsuzumi" , "Tsuzumi 2" , "Oodaiko" , "Timpani Lo/Hi" , "Velo Splash Cym" , "New China Cymbal" , "Mini TamTam" , "Bells" , "Jingle" , "Metal tree" , "Fly in Jungle" , "Vinyl Crash" , "Rainy Day Bird" , "Low Bull Roar Loop" , "Synth Stab (Key of C)" , "Industry" , "Industrial BD/SD/HH" , "Industs" , "Industry Hit" , "Shaker & Church Bell" , "Synthy G Melody" , "Velo Vocoder" , "Berimbau Attack" ] rimInstruments :: [T.Text] rimInstruments = [ "Multi Pitched BDs" , "2 Tone Dance Kick" , "Kick 99" , "Snare 3 Velo" , "SD Dance" , "Velo 99 SD" , "Hat/Dance Snare" , "Cybernetik SD" , "Orchestra SD" , "Brush Swirls" , "Deep Tom Tom (Key of C)" , "Ambi Rim" , "Dance Clap" , "Hand Claps" , "Kompton Klaps" , "Kick & Snare" , "Dance Kick & Snare 1" , "Dance Kick & Snare 2" , "Epic Lo-Toms Rim" , "War Toms Head" , "Jazz Tom" , "Cowbell" , "Bongoish" , "Hi Bongoish" , "Conga Gliss" , "Low Conga" , "Super Conga" , "Tumba Open" , "Iya Boca Choke" , "Boca Open" , "Iya Chacha UP" , "Broken Kalimba (Rim)" , "Log drum" , "Djembe Closed Slap" , "Agogo/Cuica" , "Agogo" , "Tambourine" , "Paila Lo" , "Paila Hi" , "Timbale Attack" , "Timbales Lo-Paila" , "Lo Hi Timbales" , "Castanet" , "Guiro" , "RecoReco 4 Velo" , "Pandeiro" , "Rek Head" , "Rek" , "Gamelan" , "Steel Drum (Low F)" , "Udu" , "Udus/ Shaker Accent" , "Shaker 1" , "Shaker 2" , "Velo Accent Shaker" , "Shaker/Kick" , "Shaker to Clave" , "Caxixi" , "Rek Rim" , "Multi-Tabla" , "Darbuka Rim" , "Surdo Hand&Rim" , "Gamelan Celesta" , "Taiko Rim" , "Tsuzumi 1" , "Tsuzumi 2" , "Foot Step" , "Short Finger Cymbal" , "Velo Splash Cym" , "New China Cymbal" , "Orchestra Cymbal" , "Deep Orch Crash" , "Chinese Gong" , "Voice HH/Cym" , "Bells" , "Jingle" , "Metal tree" , "Synth Hits" , "PC Voice" , "Rain → Thunder Velo SW" , "Gop Pitch Up" , "Angry Gods RIM" , "Berimbau Attack" , "Timpani w/Orch Hits" , "Code" , "Synth Switch" , "WaveDrum Splat" , "Industry" , "Industs" , "Industrial 1" , "Industrial 2" , "Industrial Cym" , "Industry Hit" , "Bubble" , "Rain Stick" , "Fly in Jungle" , "Vinyl Crash" , "Rainy Day Bird" , "Low Bull Roar Loop" , "Synth Stab (Key of C)" ]