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 !Bool -- 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 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 (diaDegToSemi r) (toMode sh)) toMode :: Shorthand -> Bool toMode Maj = True toMode Min = False toMode Dim = False toMode Aug = True toMode Maj7 = True toMode Min7 = False toMode Sev = True toMode Dim7 = False toMode HDim7 = False toMode MinMaj7= False toMode Maj6 = True toMode Min6 = False toMode Nin = True toMode Maj9 = True toMode Min9 = False toMode Sus4 = False -- for now toMode _ = False -- should not happen