Mercurial > hg > syncopation-dataset
view 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 source
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