summaryrefslogtreecommitdiff
path: root/Wavedrum
diff options
context:
space:
mode:
Diffstat (limited to 'Wavedrum')
-rw-r--r--Wavedrum/Algorithm.hs583
-rw-r--r--Wavedrum/Types.hs74
2 files changed, 657 insertions, 0 deletions
diff --git a/Wavedrum/Algorithm.hs b/Wavedrum/Algorithm.hs
new file mode 100644
index 0000000..ddc42f4
--- /dev/null
+++ b/Wavedrum/Algorithm.hs
@@ -0,0 +1,583 @@
+{-
+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 <http://www.gnu.org/licenses/>.
+-}
+
+{-# 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)"
+ ] \ No newline at end of file
diff --git a/Wavedrum/Types.hs b/Wavedrum/Types.hs
new file mode 100644
index 0000000..fc884f8
--- /dev/null
+++ b/Wavedrum/Types.hs
@@ -0,0 +1,74 @@
+{-
+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 <http://www.gnu.org/licenses/>.
+-}
+
+module Wavedrum.Types where
+
+import qualified Data.Text as T
+
+type Range = (Int, Int)
+
+data Target = RimAlg
+ | RimPCM
+ | HeadAlg
+ | HeadPCM
+ | General deriving (Show, Eq)
+
+-- TODO: value is not just Int, but can be an algorithm, PCM instrument, a velocity curve etc.
+
+-- data Value = Value Int
+-- | Alg Algorithm
+-- | PCM String
+
+data Param = Param {
+ target :: !Target
+ , name :: !T.Text
+ , range :: !Range
+ , value :: !Int
+ } deriving (Eq)
+
+instance Show Param where
+ show p = "Param " ++ show (name p) ++
+ " = " ++ show (value p) ++
+ " [min " ++ show (fst (range p)) ++
+ ", max " ++ show (snd (range p)) ++ "]"
+
+type Program = [Param]
+
+{-
+This is the order of parameters in a program:
+
+ 07.1 Type
+ 01.1 02.1 03.1 04.1 05.1
+
+ Hd.1 Hd.2 Hd.3 Hd.4
+ Hd.5 Hd.6 Hd.7 Hd.8
+
+ 01.3 02.3 03.3 04.3 05.3
+
+ Rm.1 Rm.2 Rm.3 Rm.4
+ Rm.5 Rm.6 Rm.7 Rm.8
+
+ 01.2 02.2 03.2 04.2
+ 05.2 06.2 07.2 08.2 09.2
+
+ 01.4 02.4 03.4 04.4
+ 05.4 06.4 07.4 08.4 09.4
+
+ 10.1 10.2 10.3 10.4
+ 11.3 11.2 11.1 11.4
+-} \ No newline at end of file