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
+