annotate Syncopation models/music_objects.py @ 10:a3ed7d2b57d8

updating main py files to point at new file names
author christopherh <christopher.harte@eecs.qmul.ac.uk>
date Fri, 03 Apr 2015 16:02:10 +0100
parents c2843ef4de2c
children 4fb9c00e4ef0
rev   line source
csong@9 1
christopher@10 2 from basic_functions import ceiling, string_to_sequence
csong@9 3
christopher@10 4 import parameter_setter
christopher@10 5 import rhythm_parser
csong@9 6
csong@9 7 class Note():
csong@9 8 def __init__(self, argstring):
christopher@10 9 intlist = string_to_sequence(argstring)
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):
christopher@10 23 noteSequenceString = rhythm_parser.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
christopher@10 33 #print NoteSequence("(1,2,3),(4,5,6),(7,8,9)")
christopher@10 34 class VelocitySequence(list):
christopher@10 35 def __init__(self, noteSequenceString=None):
christopher@10 36 if noteSequenceString!=None:
christopher@10 37 self.string_to_note_sequence(noteSequenceString)
csong@9 38
christopher@10 39 def string_to_note_sequence(self,inputString):
christopher@10 40 self.extend(string_to_sequence(inputString))
csong@9 41
csong@9 42
csong@9 43 class BarList(list):
csong@9 44 def append(self,bar):
csong@9 45 if(len(self)>0):
csong@9 46 bar.set_previous_bar(self[-1])
csong@9 47 self[-1].set_next_bar(bar)
csong@9 48 super(BarList, self).append(bar)
csong@9 49
csong@9 50
csong@9 51
csong@9 52 class Bar:
csong@9 53
csong@9 54 def __init__(self, rhythmSequence, timeSignature, ticksPerQuarter=None, qpmTempo=None, nextBar=None, prevBar=None):
csong@9 55 if isinstance(rhythmSequence, NoteSequence):
csong@9 56 self.noteSequence = rhythmSequence
csong@9 57 self.velocitySequence = None
csong@9 58 elif isinstance(rhythmSequence, VelocitySequence):
csong@9 59 self.velocitySequence = rhythmSequence
csong@9 60 self.noteSequence = None
csong@9 61
csong@9 62 self.tpq = ticksPerQuarter
csong@9 63 self.qpm = qpmTempo
csong@9 64 self.timeSignature = timeSignature
csong@9 65 self.nextBar = nextBar
csong@9 66 self.prevBar = prevBar
csong@9 67
csong@9 68 def get_note_sequence(self):
csong@9 69 #if self.noteSequence==None:
csong@9 70 # self.noteSequence = velocitySequenceToNotes(self.velocitySequence)
csong@9 71 return self.noteSequence
csong@9 72
csong@9 73 def get_velocity_sequence(self):
csong@9 74 if self.velocitySequence==None:
csong@9 75 self.velocitySequence = noteSequenceToVelocities(self.velocitySequence)
csong@9 76 return self.velocitySequence
csong@9 77
csong@9 78 def get_binary_sequence(self):
csong@9 79 return ceiling(self.get_velocity_sequence())
csong@9 80
csong@9 81 def get_next_bar(self):
csong@9 82 return self.nextBar
csong@9 83
csong@9 84 def get_previous_bar(self):
csong@9 85 return self.prevBar
csong@9 86
csong@9 87 def set_next_bar(self, bar):
csong@9 88 self.nextBar = bar
csong@9 89
csong@9 90 def set_previous_bar(self, bar):
csong@9 91 self.prevBar = bar
csong@9 92
csong@9 93 def get_subdivision_sequence(self):
csong@9 94 return ParameterSetter.get_subdivision_seq(self.timeSignature)
csong@9 95
csong@9 96 def get_beat_level(self):
csong@9 97 return ParameterSetter.get_beat_level(self.timeSignature)
csong@9 98
csong@9 99 def get_time_signature(self):
csong@9 100 return self.timeSignature
csong@9 101
csong@9 102 def get_t_span(self):
csong@9 103 # return the length of a bar in time units
csong@9 104 return None # NEED TO IMPLEMENT
csong@9 105