Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Framework/Core/EventPlayer.py
diff options
context:
space:
mode:
Diffstat (limited to 'Framework/Core/EventPlayer.py')
-rwxr-xr-xFramework/Core/EventPlayer.py168
1 files changed, 0 insertions, 168 deletions
diff --git a/Framework/Core/EventPlayer.py b/Framework/Core/EventPlayer.py
deleted file mode 100755
index 3b5aa92..0000000
--- a/Framework/Core/EventPlayer.py
+++ /dev/null
@@ -1,168 +0,0 @@
-import pickle
-import time
-
-import pygtk
-pygtk.require( '2.0' )
-import gtk
-import gobject
-import math
-
-
-from Framework.Constants import Constants
-from Framework.CSound.CSoundNote import CSoundNote
-from Framework.CSound.CSoundClient import CSoundClient
-from Framework.CSound.CSoundConstants import CSoundConstants
-
-#------------------------------------------------------------------------------
-# A base class used to play a collection of Events at their respective onsets
-#------------------------------------------------------------------------------
-class EventPlayer:
- #-----------------------------------
- # initialization
- #-----------------------------------
- def __init__( self ):
-
- self.time0 = 0
- self.horizonDelay = Constants.CSOUND_HORIZON
- self.horizonTime = 0
- self.horizonOnset = 0
-
- self.clockDelay = Constants.CLOCK_DELAY
- self.eventDictionary = {}
-
- self.currentTick = 0
-
- self.playbackTimeout = None
- self.tempo = Constants.DEFAULT_TEMPO
-
- self.send_buffer = ""
-
- def getCurrentTick(self):
- # used by keyboard
- return self.currentTick
-
- def getTempo( self ):
- return self.tempo
-
-
- #-----------------------------------
- # playback functions
- #-----------------------------------
- def playing( self ):
- return self.playbackTimeout != None
-
- def startPlayback( self ):
- self.time0 = time.time()
- self.horizonTime = 0.0
- self.horizonOnset = 0
- #schedule the handler...
- self.playbackTimeout = gobject.timeout_add( int ( 1000 * self.clockDelay) , self.handleClock )
- #and call it right away too.
- self.handleClock()
-
- def stopPlayback( self ):
- if self.playbackTimeout != None:
- gobject.source_remove( self.playbackTimeout )
- self.playbackTimeout = None
- self.shutOff()
-
- # this will happen
- def handleClock( self ) :
- def onsetCommand( onset, tempo, delay ):
- rval = ""
- if self.eventDictionary.has_key( onset ):
- for event in self.eventDictionary[ onset ]:
- rval += event.getText( tempo, delay)
- return rval
-
- onsetPerSecond = self.tempo / 60.0 * Constants.TICKS_PER_BEAT
-
- nowTime = time.time() - self.time0
-
- nextTime = self.horizonTime
- nextOnset = self.horizonOnset
- horizonTime = nowTime + self.horizonDelay
- self.horizonOnset = int( horizonTime * onsetPerSecond )
- self.horizonTime = self.horizonOnset * onsetPerSecond
-
- self.send_buffer = ""
- for i in range( nextOnset, self.horizonOnset ) :
- self.delay = i / onsetPerSecond - nowTime
- if (self.delay > 0.0 ) :
- ev = self.eventDictionary
- self.hookTick( ) # may modify currentTick, eventDictionary
- self.send_buffer += onsetCommand( self.currentTick, self.tempo, self.delay )
- self.currentTick = self.currentTick + 1
- else :
- print 'WARNING: excessive latency... dropping note with delay %f' % self.delay
-
- if self.send_buffer != "" :
- CSoundClient.sendText( self.send_buffer )
-
- #this may invoke GUI crap, which may take a long time
- self.hookClock()
- return True
-
- #this is meant to handle things that happen once per clock... like the GUI
- def hookClock( self ) :
- pass
- # this is meant to be overridden by things that need to happen on every onset
- def hookTick( self ) :
- pass
-
- #
- # serialization
- #
- VERSION = '_testing_'
- def serialize(self, f):
- pickle.dump( self.VERSION, f)
- pickle.dump( self.tempo, f )
-
- def unserialize(self, f):
- if pickle.load( f ) != self.VERSION :
- raise WrongVersionError
- self.tempo = pickle.load( f )
-
- # hack for shutOff tied notes when stop playing ( don't work when tracks are selected, probably not for mute...
- def shutOff( self ):
- for track in range( Constants.NUMBER_OF_TRACKS ):
- for i in range( 3 ):
- csoundInstrument = i + 101
- CSoundClient.sendText( CSoundConstants. PLAY_NOTE_OFF_COMMAND % ( csoundInstrument, track ) )
-
- #-----------------------------------
- # add/remove event functions (event(s) must be Event instances)
- #-----------------------------------
- def add( self, event ):
- self.addToDictionary( self.eventDictionary )
-
- def addToDictionary( self, event, eventDictionary ):
- if eventDictionary.has_key( event.onset ):
- eventDictionary[ event.onset ].add( event )
- else:
- eventDictionary[ event.onset ] = set( [ event ] )
-
- def addMultiple( self, events ):
- self.addMultipleToDictionary( events, self.eventDictionary )
-
- def addMultipleToDictionary( self, events, eventDictionary ):
- for event in events:
- self.addToDictionary( event, eventDictionary )
-
- def remove( self, event ):
- self.removeFromDictionary( event, self.eventDictionary )
-
- def removeFromDictionary( self, event, eventDictionary ):
- if eventDictionary.has_key( event.onset ) and event in eventDictionary[ event.onset ]:
- eventDictionary[ event.onset ].remove( event )
-
- def removeMultiple( self, events ):
- self.removeMultipleFromDictionary( events, self.eventDictionary )
-
- def removeMultipleFromDictionary( self, events, eventDictionary ):
- for event in events:
- self.removeFromDictionary( event, eventDictionary )
-
- def clear( self ):
- self.eventDictionary.clear()
-