module Sharc.Types where
type Hz = Double
type Db = Double
type PitchName = String
data Pitch = Pitch
{ pitchFund :: Hz
, pitchKeyNum :: Int
, pitchName :: PitchName
} deriving (Show)
type Sharc = [Instr]
data Instr = Instr
{ instrId :: String
, instrName :: String
, instrLegend :: Legend
, instrRange :: Range InstrRange
, instrNotes :: [Note]
} deriving (Show)
data HarmonicFreq = HarmonicFreq
{ harmonicFreqHarmNum :: Int
, harmonicFreqPitch :: Pitch
} deriving (Show)
data Amplitude = Amplitude
{ amplitudeFreq :: Hz
, amplitudeHarmonicFreq :: HarmonicFreq
, amplitudeValue :: Db
} deriving (Show)
data Note = Note
{ notePitch :: Pitch
, noteSeq :: Int
, noteRange :: Range NoteRange
, noteHarmonics :: [Harmonic]
} deriving (Show)
data Harmonic = Harmonic
{ harmonicId :: Int
, harmonicPhase :: Double
, harmonicAmplitude :: Db
} deriving (Show)
data Range a = Range
{ rangeLowest :: a
, rangeHighest :: a
} deriving (Show)
data InstrRange = InstrRange
{ instrRangeHarmonicFreq :: HarmonicFreq
, instrRangePitch :: Pitch
, instrRangeAmplitude :: Amplitude
} deriving (Show)
data NoteRange = NoteRange
{ noteRangeAmplitude :: NoteRangeAmplitude
, noteRangeHarmonicFreq :: NoteRangeHarmonicFreq
} deriving (Show)
data NoteRangeAmplitude = NoteRangeAmplitude
{ noteRangeAmplitudeFreq :: Hz
, noteRangeAmplitudeHarmNum :: Int
, noteRangeAmplitudeValue :: Db
} deriving (Show)
data NoteRangeHarmonicFreq = NoteRangeHarmonicFreq
{ noteRangeHarmonicFreqHarmNum :: Int
, noteRangeHarmonicFreqValue :: Hz
} deriving (Show)
data Legend = Legend
{ legendSource :: String
, legendCd :: String
, legendTrack :: String
} deriving (Show)