module HarmTrace.Models.ChordTokens ( ChordToken (..)
, sdToNote, ctToCL
, PieceToken (..)
, ParseStatus (..)
) where
import HarmTrace.Base.MusicRep
import HarmTrace.Base.Instances ()
import Data.Binary
import GHC.Generics (Generic)
data ChordToken = ChordToken { root :: ScaleDegree
, classType :: ClassType
, chords :: [ChordLabel]
, status :: ParseStatus
, chordNumReps :: Int
, dur :: Int
} deriving Generic
data ParseStatus = NotParsed | Parsed | Deleted | Inserted
deriving (Eq, Show, Generic)
data PieceToken = PieceToken Key [ChordToken]
instance Eq ChordToken where
(ChordToken sd clss _cs stat _n _d) == (ChordToken sd2 clss2 _cs2 stat2 _n2 _d2)
= sd == sd2 && clss == clss2 && stat == stat2
instance Show ChordToken where
show (ChordToken sd clss _ _ _ _) = show sd ++ show clss
sdToNote :: Key -> ScaleDegree -> Root
sdToNote (Key r _mode) sd = toRoot . toSemitone . transposeSem sd $ toSemitone r
classTypeToSH :: ClassType -> Shorthand
classTypeToSH MajClass = Maj
classTypeToSH MinClass = Min
classTypeToSH DomClass = Sev
classTypeToSH DimClass = Dim
classTypeToSH NoClass = None
ctToCL :: Key -> ChordToken -> ChordLabel
ctToCL k (ChordToken sd ct _cs _st _reps d) =
Chord (sdToNote k sd) (classTypeToSH ct) [] 0 d
instance Binary ChordToken
instance Binary ParseStatus