HarmTrace-2.0: src/HarmTrace/Matching/SimpleChord.hs
module HarmTrace.Matching.SimpleChord (SimChord, Sim, toSimChords) where
import HarmTrace.Base.MusicRep
import HarmTrace.Matching.Sim
-- represents a very simple chord, only major and minor and a root scaledegree
data SimChord = SimChord !Int -- I = 0, IIb = 1 ... VII = 11
!Mode -- maj = True, min = False
instance Sim SimChord where
{-# INLINE sim #-}
sim (SimChord r sh) (SimChord r2 sh2) -- = simInt r r2 + simInt sh sh2
| r == r2 && sh == sh2 = 4
| otherwise = -1
instance Show SimChord where
show (SimChord r sh) = show (scaleDegrees !! r)
++ if sh == MajMode then "" else "m"
toSimChords :: ChordDegree -> [SimChord]
toSimChords (Chord r sh _add _loc d) =
-- replicate (d `div1` 2) (SimChord (diaDegToSemi r) (toMode sh))
replicate d (SimChord (toSemitone r) (toMode sh))