packages feed

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