diff options
author | rekado <rekado@elephly.net> | 2013-08-20 20:56:23 +0800 |
---|---|---|
committer | rekado <rekado@elephly.net> | 2013-08-20 21:41:41 +0800 |
commit | 382f57ce11c33add44098a4ba8c688982fac65a2 (patch) | |
tree | f8a3339f7888ca6b496ced469ed3a0dd6360a20c /Wavedrum |
Diffstat (limited to 'Wavedrum')
-rw-r--r-- | Wavedrum/Algorithm.hs | 583 | ||||
-rw-r--r-- | Wavedrum/Types.hs | 74 |
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 |