-- 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

-- | Tags are used to index patches.  They're just strings and their meaning
-- is convention, but there are some with standardized meanings.
--
-- Any attribute of a patch that should be searchable should be given a tag.
module Instrument.Tag where
import Data.Text (Text)


type Tag = (Key, Value)
type Key = Text
type Value = Text

-- | Synthesizer backend, e.g. MIDI or Im.
backend :: Key
backend :: Text
backend = Text
"backend"

category :: Key
category :: Text
category = Text
"category"

-- | One control tag is given for each control signal the instrument
-- supports.  Automatically added.
control :: Key
control :: Text
control = Text
"control"

-- | Patch was loaded from this file.
file :: Key
file :: Text
file = Text
"file"

-- | Instrument name.  Automatically added.
name :: Key
name :: Text
name = Text
"name"

-- | Synth name.  Automatically added.
synth :: Key
synth :: Text
synth = Text
"synth"

-- | Indicates that the instrument has a sysex message as its midi
-- initialization, which probably means it's not built in to the synth.
sysex :: Key
sysex :: Text
sysex = Text
"sysex"


-- * categories

c_strings, c_woodwinds, c_brass, c_percussion, c_synth :: Text
c_strings :: Text
c_strings = Text
"strings"
c_woodwinds :: Text
c_woodwinds = Text
"woodwinds"
c_brass :: Text
c_brass = Text
"brass"
c_percussion :: Text
c_percussion = Text
"percussion"
c_synth :: Text
c_synth = Text
"synth"