Ajout d'une propriété qui donne l'histogramme des fréquences d'intervalles.
authorbenoit.pin <benoit.pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Fri, 19 Nov 2010 09:15:20 +0000 (09:15 +0000)
committerbenoit.pin <benoit.pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Fri, 19 Nov 2010 09:15:20 +0000 (09:15 +0000)
git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@315 fe552daf-6dbe-4428-90eb-1537e0879342

src/minwii/musicxml.py

index 8bc2508..7468eca 100755 (executable)
@@ -162,6 +162,20 @@ class Part(object) :
             else :
                 for note in verse :
                     yield note, 0
+    
+    @property
+    def intervalsHistogram(self) :
+        histogram = {}
+        it = self.iterNotes()
+        previousNote = it.next()[0]
+        for note, _ in it :
+            interval = note.midi - previousNote.midi
+            if histogram.has_key(interval) :
+                histogram[interval] += 1
+            else :
+                histogram[interval] = 1
+            previousNote = note
+        return histogram
         
     def pprint(self) :
         for note, verseIndex in self.iterNotes(indefinitely=False) :
@@ -365,7 +379,8 @@ def musicXml2Song(input, partIndex=0, autoDetectChorus=True, printNotes=False) :
     doc = d.documentElement
     
     # TODO conversion préalable score-timewise -> score-partwise
-    assert doc.nodeName == u'score-partwise'
+    if doc.nodeName != u'score-partwise' :
+        raise ValueError('not a musicxml file')
     
     parts = doc.getElementsByTagName('part')
     leadPart = parts[partIndex]
@@ -402,10 +417,12 @@ def main() :
     if len(args) != 1 :
         raise SystemExit(op.format_help())
     
-    musicXml2Song(args[0],
+    song = musicXml2Song(args[0],
                   partIndex=options.partIndex,
                   autoDetectChorus=options.autoDetectChorus,
                   printNotes=options.printNotes)
+    from pprint import pprint
+    pprint(song.intervalsHistogram)
 
 
 if __name__ == '__main__' :