csong@9: csong@9: from BasicFuncs import ceiling csong@9: csong@9: import ParameterSetter csong@9: import RhythmParser csong@9: csong@9: class Note(): csong@9: def __init__(self, argstring): csong@9: intlist = map(int,argstring.split(',')) csong@9: self.startTime = intlist[0] csong@9: self.duration = intlist[1] csong@9: self.velocity = intlist[2] csong@9: csong@9: # toString() csong@9: csong@9: # NoteSequence is a list of Note csong@9: class NoteSequence(list): csong@9: def __init__(self, noteSequenceString=None): csong@9: if noteSequenceString!=None: csong@9: self.string_to_note_sequence(noteSequenceString) csong@9: csong@9: def string_to_note_sequence(self, noteSequenceString): csong@9: noteSequenceString = RhythmParser.discardSpaces(noteSequenceString) csong@9: # try: csong@9: # Turning "(1,2,3),(4,5,6),(7,8,9)" into ["1,2,3","4,5,6,","7,8,9"] csong@9: listStrings = noteSequenceString[1:-1].split("),(") csong@9: for localString in listStrings: csong@9: self.append(Note(localString)) csong@9: csong@9: # toString() csong@9: csong@9: csong@9: print NoteSequence("(1,2,3),(4,5,6),(7,8,9)") csong@9: # class VelocitySequence(list): csong@9: # def __init__(self, noteSequenceString=None): csong@9: # if noteSequenceString!=None: csong@9: # self.string_to_note_sequence(noteSequenceString) csong@9: csong@9: # def string_to_note_sequence(string): csong@9: csong@9: csong@9: class BarList(list): csong@9: def append(self,bar): csong@9: if(len(self)>0): csong@9: bar.set_previous_bar(self[-1]) csong@9: self[-1].set_next_bar(bar) csong@9: super(BarList, self).append(bar) csong@9: csong@9: csong@9: csong@9: class Bar: csong@9: csong@9: def __init__(self, rhythmSequence, timeSignature, ticksPerQuarter=None, qpmTempo=None, nextBar=None, prevBar=None): csong@9: if isinstance(rhythmSequence, NoteSequence): csong@9: self.noteSequence = rhythmSequence csong@9: self.velocitySequence = None csong@9: elif isinstance(rhythmSequence, VelocitySequence): csong@9: self.velocitySequence = rhythmSequence csong@9: self.noteSequence = None csong@9: csong@9: self.tpq = ticksPerQuarter csong@9: self.qpm = qpmTempo csong@9: self.timeSignature = timeSignature csong@9: self.nextBar = nextBar csong@9: self.prevBar = prevBar csong@9: csong@9: def get_note_sequence(self): csong@9: #if self.noteSequence==None: csong@9: # self.noteSequence = velocitySequenceToNotes(self.velocitySequence) csong@9: return self.noteSequence csong@9: csong@9: def get_velocity_sequence(self): csong@9: if self.velocitySequence==None: csong@9: self.velocitySequence = noteSequenceToVelocities(self.velocitySequence) csong@9: return self.velocitySequence csong@9: csong@9: def get_binary_sequence(self): csong@9: return ceiling(self.get_velocity_sequence()) csong@9: csong@9: def get_next_bar(self): csong@9: return self.nextBar csong@9: csong@9: def get_previous_bar(self): csong@9: return self.prevBar csong@9: csong@9: def set_next_bar(self, bar): csong@9: self.nextBar = bar csong@9: csong@9: def set_previous_bar(self, bar): csong@9: self.prevBar = bar csong@9: csong@9: def get_subdivision_sequence(self): csong@9: return ParameterSetter.get_subdivision_seq(self.timeSignature) csong@9: csong@9: def get_beat_level(self): csong@9: return ParameterSetter.get_beat_level(self.timeSignature) csong@9: csong@9: def get_time_signature(self): csong@9: return self.timeSignature csong@9: csong@9: def get_t_span(self): csong@9: # return the length of a bar in time units csong@9: return None # NEED TO IMPLEMENT csong@9: