Mercurial > hg > syncopation-dataset
diff Syncopation models/music_objects.py @ 9:c2843ef4de2c
changing filenames to Python conventions
author | csong |
---|---|
date | Fri, 03 Apr 2015 11:41:01 +0100 |
parents | |
children | a3ed7d2b57d8 bc3b9022ebc4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Syncopation models/music_objects.py Fri Apr 03 11:41:01 2015 +0100 @@ -0,0 +1,104 @@ + +from BasicFuncs import ceiling + +import ParameterSetter +import RhythmParser + +class Note(): + def __init__(self, argstring): + intlist = map(int,argstring.split(',')) + self.startTime = intlist[0] + self.duration = intlist[1] + self.velocity = intlist[2] + + # toString() + +# NoteSequence is a list of Note +class NoteSequence(list): + def __init__(self, noteSequenceString=None): + if noteSequenceString!=None: + self.string_to_note_sequence(noteSequenceString) + + def string_to_note_sequence(self, noteSequenceString): + noteSequenceString = RhythmParser.discardSpaces(noteSequenceString) + # try: + # Turning "(1,2,3),(4,5,6),(7,8,9)" into ["1,2,3","4,5,6,","7,8,9"] + listStrings = noteSequenceString[1:-1].split("),(") + for localString in listStrings: + self.append(Note(localString)) + + # toString() + + +print NoteSequence("(1,2,3),(4,5,6),(7,8,9)") +# class VelocitySequence(list): +# def __init__(self, noteSequenceString=None): +# if noteSequenceString!=None: +# self.string_to_note_sequence(noteSequenceString) + +# def string_to_note_sequence(string): + + +class BarList(list): + def append(self,bar): + if(len(self)>0): + bar.set_previous_bar(self[-1]) + self[-1].set_next_bar(bar) + super(BarList, self).append(bar) + + + +class Bar: + + def __init__(self, rhythmSequence, timeSignature, ticksPerQuarter=None, qpmTempo=None, nextBar=None, prevBar=None): + if isinstance(rhythmSequence, NoteSequence): + self.noteSequence = rhythmSequence + self.velocitySequence = None + elif isinstance(rhythmSequence, VelocitySequence): + self.velocitySequence = rhythmSequence + self.noteSequence = None + + self.tpq = ticksPerQuarter + self.qpm = qpmTempo + self.timeSignature = timeSignature + self.nextBar = nextBar + self.prevBar = prevBar + + def get_note_sequence(self): + #if self.noteSequence==None: + # self.noteSequence = velocitySequenceToNotes(self.velocitySequence) + return self.noteSequence + + def get_velocity_sequence(self): + if self.velocitySequence==None: + self.velocitySequence = noteSequenceToVelocities(self.velocitySequence) + return self.velocitySequence + + def get_binary_sequence(self): + return ceiling(self.get_velocity_sequence()) + + def get_next_bar(self): + return self.nextBar + + def get_previous_bar(self): + return self.prevBar + + def set_next_bar(self, bar): + self.nextBar = bar + + def set_previous_bar(self, bar): + self.prevBar = bar + + def get_subdivision_sequence(self): + return ParameterSetter.get_subdivision_seq(self.timeSignature) + + def get_beat_level(self): + return ParameterSetter.get_beat_level(self.timeSignature) + + def get_time_signature(self): + return self.timeSignature + + def get_t_span(self): + # return the length of a bar in time units + return None # NEED TO IMPLEMENT +