\begin{code}
module Music.Analysis.MusicXML.Functions where
import Music.Analysis.PF
import qualified Text.XML.MusicXML as MusicXML
\end{code}
\begin{nocode}
length_Part :: MusicXML.MusicXMLDoc -> Int
length_Part (MusicXML.Score (MusicXML.Partwise x)) =
(length . p2 . p2) x
length_Part (MusicXML.Score (MusicXML.Timewise x)) =
(maximum . fmap (length.p2) . p2 . p2) x
length_Part _ = 0
length_Measure :: MusicXML.MusicXMLDoc -> Int
length_Measure (MusicXML.Score (MusicXML.Partwise x)) =
(maximum . fmap (length.p2) . p2 . p2) x
length_Measure (MusicXML.Score (MusicXML.Timewise x)) =
(length . p2 . p2) x
length_Measure _ = 0
length_Part_map :: MusicXML.MusicXMLDoc -> [Int]
length_Part_map (MusicXML.Score (MusicXML.Partwise x)) =
((:[]) . length . p2 . p2) x
length_Part_map (MusicXML.Score (MusicXML.Timewise x)) =
(fmap (length . p2) . p2 . p2) x
length_Part_map _ = []
length_Measure_map :: MusicXML.MusicXMLDoc -> [Int]
length_Measure_map (MusicXML.Score (MusicXML.Partwise x)) =
(fmap (length . p2) . p2 . p2) x
length_Measure_map (MusicXML.Score (MusicXML.Timewise x)) =
((:[]) . length . p2 . p2) x
length_Measure_map _ = []
length_Part_concat :: MusicXML.MusicXMLDoc -> Int
length_Part_concat (MusicXML.Score (MusicXML.Partwise x)) =
(length . p2 . p2) x
length_Part_concat (MusicXML.Score (MusicXML.Timewise x)) =
(sum . fmap length . fmap p2 . p2 . p2) x
length_Part_concat _ = 0
length_Measure_concat :: MusicXML.MusicXMLDoc -> Int
length_Measure_concat (MusicXML.Score (MusicXML.Partwise x)) =
(sum . fmap length . fmap p2 . p2 . p2) x
length_Measure_concat (MusicXML.Score (MusicXML.Timewise x)) =
(length . p2 . p2) x
length_Measure_concat _ = 0
\end{nocode}
\begin{code}
isNote :: MusicXML.Music_Data_ -> Bool
isNote (MusicXML.Music_Data_1 _) = True
isNote _ = False
isGraceNote :: MusicXML.Note -> Bool
isGraceNote (_,(MusicXML.Note_1 _,_,_,_,_,_,_,_,_,_,_,_,_)) = True
isGraceNote _ = False
isCueNote :: MusicXML.Note -> Bool
isCueNote (_,(MusicXML.Note_2 _,_,_,_,_,_,_,_,_,_,_,_,_)) = True
isCueNote _ = False
isNormalNote :: MusicXML.Note -> Bool
isNormalNote (_,(MusicXML.Note_3 _,_,_,_,_,_,_,_,_,_,_,_,_)) = True
isNormalNote _ = False
\end{code}
\begin{code}
filterNote :: MusicXML.Music_Data -> MusicXML.Music_Data
filterNote = filter isNote
filterNotNote :: MusicXML.Music_Data -> MusicXML.Music_Data
filterNotNote = filter (not . isNote)
filterGraceNote :: MusicXML.Music_Data -> MusicXML.Music_Data
filterGraceNote =
filter (\x -> if isNote x
then (isGraceNote . (\(MusicXML.Music_Data_1 y) -> y)) x
else True)
filterNotGraceNote :: MusicXML.Music_Data -> MusicXML.Music_Data
filterNotGraceNote =
filter (\x -> if isNote x
then (not . isGraceNote . (\(MusicXML.Music_Data_1 y) -> y)) x
else True)
filterCueNote :: MusicXML.Music_Data -> MusicXML.Music_Data
filterCueNote =
filter (\x -> if isNote x
then (isCueNote . (\(MusicXML.Music_Data_1 y) -> y)) x
else True)
filterNotCueNote :: MusicXML.Music_Data -> MusicXML.Music_Data
filterNotCueNote =
filter (\x -> if isNote x
then (not . isCueNote . (\(MusicXML.Music_Data_1 y) -> y)) x
else True)
filterNormalNote :: MusicXML.Music_Data -> MusicXML.Music_Data
filterNormalNote =
filter (\x -> if isNote x
then (isNormalNote . (\(MusicXML.Music_Data_1 y) -> y)) x
else True)
filterNotNormalNote :: MusicXML.Music_Data -> MusicXML.Music_Data
filterNotNormalNote =
filter (\x -> if isNote x
then (not . isNormalNote . (\(MusicXML.Music_Data_1 y) -> y)) x
else True)
\end{code}
\begin{code}
filterNote' :: (MusicXML.Note -> Bool) ->
MusicXML.Music_Data -> MusicXML.Music_Data
filterNote' p =
filter (\x -> if isNote x
then (p . (\(MusicXML.Music_Data_1 y) -> y)) x
else False)
count_part :: MusicXML.MusicXMLDoc -> Int
count_part (MusicXML.Score (MusicXML.Partwise x)) =
(length . p2 . p2) x
count_part (MusicXML.Score (MusicXML.Timewise x)) =
(sum . fmap length . fmap p2 . p2 . p2) x
count_part _ = 0
count_measure :: MusicXML.MusicXMLDoc -> Int
count_measure (MusicXML.Score (MusicXML.Partwise x)) =
(sum . fmap length . fmap p2 . p2 . p2) x
count_measure (MusicXML.Score (MusicXML.Timewise x)) =
(length . p2 . p2) x
count_measure _ = 0
count_music_data :: MusicXML.MusicXMLDoc -> Int
count_music_data (MusicXML.Score (MusicXML.Partwise x)) =
(sum . fmap sum . (fmap . fmap) (length . p2) . fmap p2 . p2 . p2) x
count_music_data (MusicXML.Score (MusicXML.Timewise x)) =
(sum . fmap sum . (fmap . fmap) (length . p2) . fmap p2 . p2 . p2) x
count_music_data _ = 0
count_note :: MusicXML.MusicXMLDoc -> Int
count_note (MusicXML.Score (MusicXML.Partwise x)) =
(sum . fmap sum . (fmap.fmap) (length.filterNote.p2) . fmap p2 . p2 . p2) x
count_note (MusicXML.Score (MusicXML.Timewise x)) =
(sum . fmap sum . (fmap.fmap) (length.filterNote.p2) . fmap p2 . p2 . p2) x
count_note _ = 0
count_note_grace :: MusicXML.MusicXMLDoc -> Int
count_note_grace (MusicXML.Score (MusicXML.Partwise x)) =
(sum . fmap sum . (fmap.fmap) (length.filterNote' isGraceNote.p2) .
fmap p2 . p2 . p2) x
count_note_grace (MusicXML.Score (MusicXML.Timewise x)) =
(sum . fmap sum . (fmap.fmap) (length.filterNote' isGraceNote.p2) .
fmap p2 . p2 . p2) x
count_note_grace _ = 0
count_note_cue :: MusicXML.MusicXMLDoc -> Int
count_note_cue (MusicXML.Score (MusicXML.Partwise x)) =
(sum . fmap sum . (fmap.fmap) (length.filterNote' isCueNote.p2) .
fmap p2 . p2 . p2) x
count_note_cue (MusicXML.Score (MusicXML.Timewise x)) =
(sum . fmap sum . (fmap.fmap) (length.filterNote' isCueNote.p2) .
fmap p2 . p2 . p2) x
count_note_cue _ = 0
count_note_normal :: MusicXML.MusicXMLDoc -> Int
count_note_normal (MusicXML.Score (MusicXML.Partwise x)) =
(sum . fmap sum . (fmap.fmap) (length.filterNote' isNormalNote.p2) .
fmap p2 . p2 . p2) x
count_note_normal (MusicXML.Score (MusicXML.Timewise x)) =
(sum . fmap sum . (fmap.fmap) (length.filterNote' isNormalNote.p2) .
fmap p2 . p2 . p2) x
count_note_normal _ = 0
\end{code}
\begin{code}
mapMusicXML :: (MusicXML.Music_Data -> MusicXML.Music_Data) ->
MusicXML.MusicXMLDoc -> MusicXML.MusicXMLDoc
mapMusicXML f (MusicXML.Score (MusicXML.Partwise x)) =
(MusicXML.Score . MusicXML.Partwise .
(id >< (id >< fmap (id >< fmap (id >< f))))) x
mapMusicXML f (MusicXML.Score (MusicXML.Timewise x)) =
(MusicXML.Score . MusicXML.Timewise .
(id >< (id >< fmap (id >< fmap (id >< f))))) x
mapMusicXML _ x = x
\end{code}