\begin{code} -- | -- Maintainer : silva.samuel@alumni.uminho.pt -- Stability : experimental -- Portability: portable -- This module implements common types module Music.Analysis.MusicXML2Abstract where import Music.Analysis.Abstract.Settings import Music.Analysis.Abstract.Motive --import Music.Analysis.Abstract.Melodic --import Music.Analysis.Abstract.Rhythm --import Text.XML.MusicXML.Partwise as Partwise import Music.Analysis.MusicXML.Level2 as Level2 import Music.Analysis.MusicXML.Level1 as Level1 import Music.Analysis.Abstract.Melodic as Melodic import Music.Analysis.Abstract.Rhythm as Rhythm --import Music.Analysis.Abstract.Zip as Abstract import Data.Ratio \end{code} \begin{code} mk_Music :: Level2.Score_Partwise -> Motive (Melodic.MelodicClass, Rhythm.RhythmAbsolute) -- [(Melodic.MelodicClass, Rhythm.RhythmAbsolute)] mk_Music = mkMotive empty . concat . map mk_MusicData mk_MusicData :: [Level2.Music_Data] -> [(Melodic.MelodicClass, Rhythm.RhythmAbsolute)] mk_MusicData = map mk_Note . map (\(Level2.Music_Data_1 x) -> x) . filter p where p (Level2.Music_Data_1 _) = True p _ = False -- | mk_Note :: Level2.Note -> (Melodic.MelodicClass, Rhythm.RhythmAbsolute) mk_Note (Level2.Note_3 (a1, a2), b, c, d) = (mk_MelodicNode a1 d, mk_RhythmNode a2 b c) -- | mk_MelodicNode :: Level2.Full_Note -> Maybe Level2.Accidental -> Melodic.MelodicClass mk_MelodicNode (Level2.Full_Note_1 (a, _, _)) _ = Just (mk_Pitch a,Nothing) mk_MelodicNode (Level2.Full_Note_3 _ ) _ = Nothing -- | mk_Pitch :: Level1.Step -> Melodic.PitchClass mk_Pitch x = case x of Level1.C -> Melodic.C; Level1.D -> Melodic.D; Level1.E -> Melodic.E; Level1.F -> Melodic.F; Level1.G -> Melodic.G; Level1.A -> Melodic.A; Level1.B -> Melodic.B; -- | mk_RhythmNode :: Level2.Duration -> Maybe Level2.Type -> [Level2.Dot] -> Rhythm.RhythmAbsolute mk_RhythmNode x _ ly = (x % 1, length ly) \end{code}