module User.Elaforge.Instrument.Derailer where
import qualified Cmd.Instrument.MidiInst as MidiInst
import qualified Derive.ScoreT as ScoreT
import Global
synth :: MidiInst.Synth
synth :: Synth
synth =
SynthName -> SynthName -> [Patch] -> Synth
MidiInst.synth SynthName
"derailer" SynthName
"PA3 Derailer." forall a b. (a -> b) -> a -> b
$
[(Control, Control)] -> [Patch] -> [Patch]
MidiInst.synth_controls [(Control, Control)]
controls [Patch]
patches
where
controls :: [(Control, Control)]
controls = forall a b. (a -> b) -> [a] -> [b]
map (forall (p :: * -> * -> *) b c a.
Bifunctor p =>
(b -> c) -> p a b -> p a c
second SynthName -> Control
ScoreT.Control) forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
[ [ (Control
cc, SynthName
"drone" forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> SynthName
showt Integer
n forall a. Semigroup a => a -> a -> a
<> SynthName
"-mass")
| (Integer
n, Control
cc) <- forall a b. [a] -> [b] -> [(a, b)]
zip [Integer
1..Integer
5] [Control
21..Control
25]
]
, [(Control
28, SynthName
"strike-mass")]
, [ (Control
cc, SynthName
"drone" forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> SynthName
showt Integer
n forall a. Semigroup a => a -> a -> a
<> SynthName
"-gain")
| (Integer
n, Control
cc) <- forall a b. [a] -> [b] -> [(a, b)]
zip [Integer
1..Integer
5] [Control
41..Control
45]
]
, [ (Control
48, SynthName
"strike-gain")
, (Control
31, SynthName
"con-strength")
, (Control
32, SynthName
"in-pos")
, (Control
33, SynthName
"strike-rate")
]
]
patches :: [Patch]
patches =
[ SynthName -> [(Control, Control)] -> Patch
patch SynthName
"strike" []
, SynthName -> [(Control, Control)] -> Patch
patch SynthName
"multi-strike" [(Control
33, Control
"strike-rate"), (Control
1, Control
"breath")]
, Patch -> Patch
MidiInst.pressure forall a b. (a -> b) -> a -> b
$ SynthName -> [(Control, Control)] -> Patch
patch SynthName
"bow" [(Control
34, Control
"bow-depth"), (Control
1, Control
"dyn")]
]
patch :: SynthName -> [(Control, Control)] -> Patch
patch = PbRange -> SynthName -> [(Control, Control)] -> Patch
MidiInst.named_patch (-Int
2, Int
2)