csong@9
|
1
|
csong@9
|
2 from BasicFuncs import ceiling
|
csong@9
|
3
|
csong@9
|
4 import ParameterSetter
|
csong@9
|
5 import RhythmParser
|
csong@9
|
6
|
csong@9
|
7 class Note():
|
csong@9
|
8 def __init__(self, argstring):
|
csong@9
|
9 intlist = map(int,argstring.split(','))
|
csong@9
|
10 self.startTime = intlist[0]
|
csong@9
|
11 self.duration = intlist[1]
|
csong@9
|
12 self.velocity = intlist[2]
|
csong@9
|
13
|
csong@9
|
14 # toString()
|
csong@9
|
15
|
csong@9
|
16 # NoteSequence is a list of Note
|
csong@9
|
17 class NoteSequence(list):
|
csong@9
|
18 def __init__(self, noteSequenceString=None):
|
csong@9
|
19 if noteSequenceString!=None:
|
csong@9
|
20 self.string_to_note_sequence(noteSequenceString)
|
csong@9
|
21
|
csong@9
|
22 def string_to_note_sequence(self, noteSequenceString):
|
csong@9
|
23 noteSequenceString = RhythmParser.discardSpaces(noteSequenceString)
|
csong@9
|
24 # try:
|
csong@9
|
25 # Turning "(1,2,3),(4,5,6),(7,8,9)" into ["1,2,3","4,5,6,","7,8,9"]
|
csong@9
|
26 listStrings = noteSequenceString[1:-1].split("),(")
|
csong@9
|
27 for localString in listStrings:
|
csong@9
|
28 self.append(Note(localString))
|
csong@9
|
29
|
csong@9
|
30 # toString()
|
csong@9
|
31
|
csong@9
|
32
|
csong@9
|
33 print NoteSequence("(1,2,3),(4,5,6),(7,8,9)")
|
csong@9
|
34 # class VelocitySequence(list):
|
csong@9
|
35 # def __init__(self, noteSequenceString=None):
|
csong@9
|
36 # if noteSequenceString!=None:
|
csong@9
|
37 # self.string_to_note_sequence(noteSequenceString)
|
csong@9
|
38
|
csong@9
|
39 # def string_to_note_sequence(string):
|
csong@9
|
40
|
csong@9
|
41
|
csong@9
|
42 class BarList(list):
|
csong@9
|
43 def append(self,bar):
|
csong@9
|
44 if(len(self)>0):
|
csong@9
|
45 bar.set_previous_bar(self[-1])
|
csong@9
|
46 self[-1].set_next_bar(bar)
|
csong@9
|
47 super(BarList, self).append(bar)
|
csong@9
|
48
|
csong@9
|
49
|
csong@9
|
50
|
csong@9
|
51 class Bar:
|
csong@9
|
52
|
csong@9
|
53 def __init__(self, rhythmSequence, timeSignature, ticksPerQuarter=None, qpmTempo=None, nextBar=None, prevBar=None):
|
csong@9
|
54 if isinstance(rhythmSequence, NoteSequence):
|
csong@9
|
55 self.noteSequence = rhythmSequence
|
csong@9
|
56 self.velocitySequence = None
|
csong@9
|
57 elif isinstance(rhythmSequence, VelocitySequence):
|
csong@9
|
58 self.velocitySequence = rhythmSequence
|
csong@9
|
59 self.noteSequence = None
|
csong@9
|
60
|
csong@9
|
61 self.tpq = ticksPerQuarter
|
csong@9
|
62 self.qpm = qpmTempo
|
csong@9
|
63 self.timeSignature = timeSignature
|
csong@9
|
64 self.nextBar = nextBar
|
csong@9
|
65 self.prevBar = prevBar
|
csong@9
|
66
|
csong@9
|
67 def get_note_sequence(self):
|
csong@9
|
68 #if self.noteSequence==None:
|
csong@9
|
69 # self.noteSequence = velocitySequenceToNotes(self.velocitySequence)
|
csong@9
|
70 return self.noteSequence
|
csong@9
|
71
|
csong@9
|
72 def get_velocity_sequence(self):
|
csong@9
|
73 if self.velocitySequence==None:
|
csong@9
|
74 self.velocitySequence = noteSequenceToVelocities(self.velocitySequence)
|
csong@9
|
75 return self.velocitySequence
|
csong@9
|
76
|
csong@9
|
77 def get_binary_sequence(self):
|
csong@9
|
78 return ceiling(self.get_velocity_sequence())
|
csong@9
|
79
|
csong@9
|
80 def get_next_bar(self):
|
csong@9
|
81 return self.nextBar
|
csong@9
|
82
|
csong@9
|
83 def get_previous_bar(self):
|
csong@9
|
84 return self.prevBar
|
csong@9
|
85
|
csong@9
|
86 def set_next_bar(self, bar):
|
csong@9
|
87 self.nextBar = bar
|
csong@9
|
88
|
csong@9
|
89 def set_previous_bar(self, bar):
|
csong@9
|
90 self.prevBar = bar
|
csong@9
|
91
|
csong@9
|
92 def get_subdivision_sequence(self):
|
csong@9
|
93 return ParameterSetter.get_subdivision_seq(self.timeSignature)
|
csong@9
|
94
|
csong@9
|
95 def get_beat_level(self):
|
csong@9
|
96 return ParameterSetter.get_beat_level(self.timeSignature)
|
csong@9
|
97
|
csong@9
|
98 def get_time_signature(self):
|
csong@9
|
99 return self.timeSignature
|
csong@9
|
100
|
csong@9
|
101 def get_t_span(self):
|
csong@9
|
102 # return the length of a bar in time units
|
csong@9
|
103 return None # NEED TO IMPLEMENT
|
csong@9
|
104
|