-- Copyright 2013 Evan Laforge
-- This program is distributed under the terms of the GNU General Public
-- License 3.0, see COPYING or http://www.gnu.org/licenses/gpl-3.0.txt

module User.Elaforge.Config.Hobbes where
import qualified App.StaticConfig as StaticConfig
import qualified Cmd.Cmd as Cmd

import           Global


midi_config :: Cmd.InstrumentDb -> StaticConfig.Midi
midi_config :: InstrumentDb -> Midi
midi_config InstrumentDb
_db = StaticConfig.Midi
    { rdev_map :: Map ReadDevice ReadDevice
rdev_map = [(Text, Text)] -> Map ReadDevice ReadDevice
StaticConfig.make_rdev_map [(Text, Text)]
rdev_map
    , wdev_map :: Map WriteDevice WriteDevice
wdev_map = [(Text, Text)] -> Map WriteDevice WriteDevice
StaticConfig.make_wdev_map [(Text, Text)]
wdev_map
    , read_devices :: Set ReadDevice
read_devices = [Text] -> Set ReadDevice
StaticConfig.make_read_devices [Text]
read_devices
    }

iac, tapco, network :: Int -> Text
iac :: Int -> Text
iac Int
n = Text
"IAC Driver " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> Text
showt Int
n
tapco :: Int -> Text
tapco Int
n = Text
"Tapco Link MIDI USB Ver 2.2 Port " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> Text
showt Int
n
network :: Int -> Text
network Int
n = Text
"Network hobbes" forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> Text
showt Int
n

wdev_map :: [(Text, Text)]
wdev_map :: [(Text, Text)]
wdev_map = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
    [ [(Text
"loop" forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> Text
showt Int
n, Int -> Text
iac Int
n) | Int
n <- [Int
1..Int
4]]
    , [(Text
"net" forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> Text
showt Int
n, Int -> Text
network Int
n) | Int
n <- [Int
1..Int
4]]
    , [ (Text
"fm8", Text
"Native Instruments FM8 Virtual Input")
      , (Text
"msv", Text
"Massive Virtual Input")
      , (Text
"z1", Int -> Text
tapco Int
1)
      , (Text
"vl1", Int -> Text
tapco Int
2)
      , (Text
"morph", Int -> Text
tapco Int
3)
      , (Text
"pc2496", Int -> Text
tapco Int
4)
      ]
    ]

rdev_map :: [(Text, Text)]
rdev_map :: [(Text, Text)]
rdev_map =
    [ (Int -> Text
tapco Int
1, Text
"z1")
    , (Int -> Text
tapco Int
2, Text
"vl1")
    , (Int -> Text
tapco Int
3, Text
"morpheus")
    , (Int -> Text
tapco Int
4, Text
"continuum")
    ]

-- | Open these read devices on startup.
read_devices :: [Text]
read_devices :: [Text]
read_devices =
    [ Text
"USB Oxygen 8 v2"
    , Text
"EDIROL UA-25"
    , Text
"828mk2 MIDI Port"
    ] forall a. [a] -> [a] -> [a]
++ forall a b. (a -> b) -> [a] -> [b]
map Int -> Text
tapco [Int
1..Int
4]