Mercurial > hg > multiomr
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 |