\begin{code} module Music.Analysis.MusicXML.Level6 ( module Music.Analysis.MusicXML.Level6, )where import Music.Analysis.PF import qualified Music.Analysis.MusicXML.Level5 as Layer5 import Data.Maybe (catMaybes) import qualified Text.XML.MusicXML as MusicXML \end{code} \begin{code} -- | type Score_Partwise = (MusicXML.Document_Attributes, (MusicXML.Score_Header, [Part])) -- | type Part = (MusicXML.ID, [Measure]) -- | type Measure = ((MusicXML.CDATA, Maybe MusicXML.Yes_No, Maybe MusicXML.Yes_No, Maybe MusicXML.Tenths), [Music_Data]) -- | data Music_Data = Music_Data_1 Note | Music_Data_2 MusicXML.Backup | Music_Data_3 MusicXML.Forward | Music_Data_4 MusicXML.Direction | Music_Data_5 Attributes | Music_Data_6 MusicXML.Harmony | Music_Data_7 MusicXML.Figured_Bass | Music_Data_8 MusicXML.Print | Music_Data_9 MusicXML.Sound | Music_Data_10 MusicXML.Barline | Music_Data_11 MusicXML.Grouping | Music_Data_12 MusicXML.Link | Music_Data_13 MusicXML.Bookmark | Music_Data_14 Annotation deriving (Eq, Show) -- | type Annotation = (Maybe MusicXML.Start_Stop, MusicXML.PCDATA) -- | type Note = Layer5.Note -- | type Attributes = Layer5.Attributes \end{code} \begin{code} -- | abst_Score_Partwise :: Score_Partwise -> Layer5.Score_Partwise abst_Score_Partwise = (id >< (id >< map abst_Part)) -- | abst_Part :: Part -> Layer5.Part abst_Part = id >< map abst_Measure -- | abst_Measure :: Measure -> Layer5.Measure abst_Measure = id >< catMaybes . fmap abst_Music_Data -- | abst_Music_Data :: Music_Data -> Maybe Layer5.Music_Data abst_Music_Data (Music_Data_1 x) = return (Layer5.Music_Data_1 (abst_Note x)) abst_Music_Data (Music_Data_2 x) = return (Layer5.Music_Data_2 x) abst_Music_Data (Music_Data_3 x) = return (Layer5.Music_Data_3 x) abst_Music_Data (Music_Data_4 x) = return (Layer5.Music_Data_4 x) abst_Music_Data (Music_Data_5 x) = (Just .Layer5.Music_Data_5 .abst_Attributes) x abst_Music_Data (Music_Data_6 x) = return (Layer5.Music_Data_6 x) abst_Music_Data (Music_Data_7 x) = return (Layer5.Music_Data_7 x) abst_Music_Data (Music_Data_8 x) = return (Layer5.Music_Data_8 x) abst_Music_Data (Music_Data_9 x) = return (Layer5.Music_Data_9 x) abst_Music_Data (Music_Data_10 x) = return (Layer5.Music_Data_10 x) abst_Music_Data (Music_Data_11 x) = return (Layer5.Music_Data_11 x) abst_Music_Data (Music_Data_12 x) = return (Layer5.Music_Data_12 x) abst_Music_Data (Music_Data_13 x) = return (Layer5.Music_Data_13 x) abst_Music_Data (Music_Data_14 x) = return (Layer5.Music_Data_11 (abst_Annotation x)) -- | abst_Note :: Note -> Layer5.Note abst_Note = id -- | abst_Attributes :: Attributes -> Layer5.Attributes abst_Attributes = id -- | abst_Annotation :: Annotation -> MusicXML.Grouping abst_Annotation (a,ann) = ((abst_SSS a, "1", Just "annotation"), [(Nothing, ann)]) -- | abst_SSS :: Maybe MusicXML.Start_Stop -> MusicXML.Start_Stop_Single abst_SSS (Just MusicXML.Start_Stop_1) = MusicXML.Start_Stop_Single_1 abst_SSS (Just MusicXML.Start_Stop_2) = MusicXML.Start_Stop_Single_2 abst_SSS Nothing = MusicXML.Start_Stop_Single_3 \end{code} \begin{code} -- | rep_Score_Partwise :: Layer5.Score_Partwise -> Score_Partwise rep_Score_Partwise = (id >< (id >< fmap rep_Part)) -- | rep_Part :: Layer5.Part -> Part rep_Part = id >< fmap rep_Measure -- | rep_Measure :: Layer5.Measure -> Measure rep_Measure = id >< map rep_Music_Data -- | rep_Music_Data :: Layer5.Music_Data -> Music_Data rep_Music_Data (Layer5.Music_Data_1 x) = Music_Data_1 (rep_Note x) rep_Music_Data (Layer5.Music_Data_2 x) = Music_Data_2 x rep_Music_Data (Layer5.Music_Data_3 x) = Music_Data_3 x rep_Music_Data (Layer5.Music_Data_4 x) = Music_Data_4 x rep_Music_Data (Layer5.Music_Data_5 x) = Music_Data_5 (rep_Attributes x) rep_Music_Data (Layer5.Music_Data_6 x) = Music_Data_6 x rep_Music_Data (Layer5.Music_Data_7 x) = Music_Data_7 x rep_Music_Data (Layer5.Music_Data_8 x) = Music_Data_8 x rep_Music_Data (Layer5.Music_Data_9 x) = Music_Data_9 x rep_Music_Data (Layer5.Music_Data_10 x) = Music_Data_10 x rep_Music_Data (Layer5.Music_Data_11 x) = either Music_Data_14 Music_Data_11 (rep_Annotation x) rep_Music_Data (Layer5.Music_Data_12 x) = Music_Data_12 x rep_Music_Data (Layer5.Music_Data_13 x) = Music_Data_13 x -- | rep_Note :: Layer5.Note -> Note rep_Note = id -- | rep_Attributes :: Layer5.Attributes -> Attributes rep_Attributes = id -- | rep_Annotation :: MusicXML.Grouping -> Either Annotation MusicXML.Grouping rep_Annotation ((a,_,Just "annotation"),[(_,ann)]) = i1 (rep_SSS a, ann) rep_Annotation grouping = i2 grouping -- | rep_SSS :: MusicXML.Start_Stop_Single -> Maybe MusicXML.Start_Stop rep_SSS MusicXML.Start_Stop_Single_1 = Just MusicXML.Start_Stop_1 rep_SSS MusicXML.Start_Stop_Single_2 = Just MusicXML.Start_Stop_2 rep_SSS MusicXML.Start_Stop_Single_3 = Nothing \end{code} \begin{code} -- | map_Score_Partwise :: (Music_Data -> Music_Data) -> Score_Partwise -> Score_Partwise map_Score_Partwise f = (id >< (id >< fmap (map_Part f))) -- | map_Part :: (Music_Data -> Music_Data) -> Part -> Part map_Part f = (id >< fmap (map_Measure f)) -- | map_Measure :: (Music_Data -> Music_Data) -> Measure -> Measure map_Measure f = (id >< fmap (map_Music_Data f)) -- | map_Music_Data :: (Music_Data -> Music_Data) -> Music_Data -> Music_Data map_Music_Data f = f --map_Music_Data (Music_Data_1 x) = Music_Data_1 x --map_Music_Data (Music_Data_2 x) = Music_Data_2 x --map_Music_Data (Music_Data_3 x) = Music_Data_3 x --map_Music_Data (Music_Data_4 x) = Music_Data_4 x --map_Music_Data (Music_Data_5 x) = Music_Data_5 x --map_Music_Data (Music_Data_6 x) = Music_Data_6 x --map_Music_Data (Music_Data_7 x) = Music_Data_7 x --map_Music_Data (Music_Data_8 x) = Music_Data_8 x --map_Music_Data (Music_Data_9 x) = Music_Data_9 x --map_Music_Data (Music_Data_10 x) = Music_Data_10 x --map_Music_Data (Music_Data_11 x) = Music_Data_11 x --map_Music_Data (Music_Data_12 x) = Music_Data_12 x --map_Music_Data (Music_Data_13 x) = Music_Data_13 x --map_Score_Partwise :: (Layer4.Score_Partwise -> Layer4.Score_Partwise) -> -- Score_Partwise -> Score_Partwise --map_Score_Partwise f = (id >< (id >< f)) --map_Part :: (Layer4.Part -> Layer4.Part) -> Part -> Part --map_Part f = split p1 (f . abst_Part) --( >< f) --map_Measure :: (Layer4.Measure -> Layer4.Measure) -> Measure -> Measure --map_Measure f = (id >< f ) \end{code}