diff Syncopation models/music_objects.py @ 23:df1e7c378ee0

fixed KTH, and WNBD
author csong <csong@eecs.qmul.ac.uk>
date Sun, 12 Apr 2015 13:06:17 +0100
parents 2dbc09ca8013
children 08c298f47917
line wrap: on
line diff
--- a/Syncopation models/music_objects.py	Thu Apr 09 23:49:16 2015 +0100
+++ b/Syncopation models/music_objects.py	Sun Apr 12 13:06:17 2015 +0100
@@ -61,7 +61,7 @@
 		return str(self)[1:-1].replace(" ","")
 
 
-def velocity_sequence_to_note_sequence(velocitySequence):
+def velocity_sequence_to_note_sequence(velocitySequence, nextbarVelocitySequence = None):
 	
 	noteSequence = NoteSequence()
 
@@ -80,8 +80,14 @@
 
 	# to set the duration for the last note
 	if( len(noteSequence) > 0):
-		previousNote = noteSequence[-1]
-		previousNote.duration = len(velocitySequence) - previousNote.startTime
+		lastNote = noteSequence[-1]
+		
+		if nextbarVelocitySequence == None:
+			lastNote.duration = len(velocitySequence) - lastNote.startTime
+		else:
+			nextNoteStartTime = next((index for index, v in enumerate(nextbarVelocitySequence) if v), None)
+			lastNote.duration = len(velocitySequence) + nextNoteStartTime-lastNote.startTime
+
 
 	return noteSequence
 
@@ -120,7 +126,6 @@
 
 
 class Bar:
-
 	def __init__(self, rhythmSequence, timeSignature, ticksPerQuarter=None, qpmTempo=None, nextBar=None, prevBar=None):
 		if isinstance(rhythmSequence, NoteSequence):
 			self.noteSequence = rhythmSequence
@@ -137,12 +142,15 @@
 
 	def get_note_sequence(self):
 		if self.noteSequence == None:
-			self.noteSequence = velocitySequence_to_noteSequence(self.velocitySequence)
+			nextbarVelocitySequence = None
+			if self.nextBar != None:
+				nextbarVelocitySequence = self.nextBar.get_velocity_sequence()
+			self.noteSequence = velocity_sequence_to_note_sequence(self.velocitySequence, nextbarVelocitySequence)
 		return self.noteSequence
 
 	def get_velocity_sequence(self):
 		if self.velocitySequence == None:
-			self.velocitySequence = noteSequence_to_velocitySequence(self.noteSequence)
+			self.velocitySequence = note_sequence_to_velocity_sequence(self.noteSequence)
 		return self.velocitySequence
 
 	def get_binary_sequence(self):
@@ -171,7 +179,7 @@
 
 	# return the length of a bar in time units (ticks)
 	def get_bar_ticks(self):
-		return calculate_bar_ticks(self.timeSignature.get_numerator(),self.timeSignature.get_denominator(), self.ticksPerQuarter)
+		return calculate_bar_ticks(self.timeSignature.get_numerator(),self.timeSignature.get_denominator(), self.tpq)
 
 
 class TimeSignature():