annotate 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
rev   line source
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