comparison Functions/AddingXMLSingleMeasures.py @ 1:0f7f611deca4

Functions
author Victor Padilla <victor.padilla.mc@gmail.com>
date Mon, 04 May 2015 22:53:31 +0200
parents
children
comparison
equal deleted inserted replaced
0:1eb6054a1f84 1:0f7f611deca4
1 '''
2 Created on 24/09/2014
3
4 @author: victor
5
6 Class for adding and joining measures
7 (It is under development)
8 '''
9 import os
10 from music21 import stream
11 from music21 import converter
12 from music21 import meter
13 from music21 import key
14 from music21 import clef
15 from music21 import note
16 from music21 import interval
17
18 class AddingXMLSingleMeasures:
19 def getAllFiles(self,path):
20 omr_files=[]
21 dir_content = os.listdir(path)
22 dir_content.sort()
23 for myfile in dir_content:
24 directory = os.path.join(path,myfile)
25 omr_files.append(os.path.abspath(directory))
26 print omr_files
27 return omr_files
28
29 def runViewJoinXML(self,dirname):
30 path = dirname
31 files=self.getAllFiles(path)
32 filesM21=self.getFilesM21(files,path)
33 part=stream.Part()
34 ks_array=[]
35 for f in filesM21:
36 measure=f.parts[0].getElementsByClass(stream.Measure)[0]
37 if len(part)==0:
38 ks_array=self.getKeySignatureArray(measure)
39
40 if len(part)>0:
41 measure=self.removeTimeSignature(measure)
42 measure=self.removeKeySignature(measure)
43 measure=self.removeClef(measure)
44 # measure=self.transpose(measure,-10)
45 part.append(measure)
46 # part=self.correctKeySignature(part,["C "])
47 # the correct key signature
48 part=self.correctKeySignature(part,ks_array)
49 part.show()
50 def transpose(self,measure,semitones):
51 newMeasure=stream.Measure()
52 for element in measure:
53 if isinstance(element,note.Note):
54 element=element.transpose(interval.Interval(semitones))
55 newMeasure.append(element)
56 return newMeasure
57 def getKeySignatureArray(self,measure):
58 ks_array=[]
59 for element in measure:
60 if isinstance(element,key.KeySignature):
61 for p in element.alteredPitches:
62 ks_array.append(str(p))
63 return ks_array
64 def correctKeySignature(self,part,altered):
65 newPart=stream.Part()
66 for measure in part.getElementsByClass(stream.Measure):
67 newMeasure=stream.Measure()
68 for element in measure:
69 if isinstance(element,note.Note):
70 for alter in altered:
71 print element.pitch.name,alter
72 if element.pitch.name[0:1]==alter[0:1] and alter[1:2]=="#":
73 element.accidental=1
74 if element.pitch.name[0:1]==alter[0:1] and alter[1:2]=="-":
75 element.accidental=-1
76 if element.pitch.name[0:1]==alter[0:1] and alter[1:2]==" ":
77 element.accidental=0
78 newMeasure.append(element)
79 newPart.append(newMeasure)
80 return newPart
81
82 def removeTimeSignature(self,measure):
83 newmeasure=stream.Measure()
84 for element in measure:
85 if not isinstance(element,meter.TimeSignature):
86 newmeasure.append(element)
87 return newmeasure
88 def removeKeySignature(self,measure):
89 newmeasure=stream.Measure()
90 for element in measure:
91 if not isinstance(element,key.KeySignature):
92 newmeasure.append(element)
93 return newmeasure
94 def removeClef(self,measure):
95 newmeasure=stream.Measure()
96 for element in measure:
97 if not isinstance(element,clef.GClef) and not isinstance(element,clef.NoClef) :
98 newmeasure.append(element)
99 return newmeasure
100
101
102
103
104 def getFilesM21(self,files,path):
105 filesM21=[]
106 print "---Converting Files---"
107 for i in range(len(files)):
108 f=path+"\M"+str(i+1)+".xml"
109 f_m21=converter.parse(f)
110 filesM21.append(f_m21)
111 return filesM21