Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TamTamJam.activity/TamTam.py
diff options
context:
space:
mode:
Diffstat (limited to 'TamTamJam.activity/TamTam.py')
-rw-r--r--TamTamJam.activity/TamTam.py1229
1 files changed, 0 insertions, 1229 deletions
diff --git a/TamTamJam.activity/TamTam.py b/TamTamJam.activity/TamTam.py
deleted file mode 100644
index e282df9..0000000
--- a/TamTamJam.activity/TamTam.py
+++ /dev/null
@@ -1,1229 +0,0 @@
-import locale
-locale.setlocale(locale.LC_NUMERIC, 'C')
-import signal , time , sys , os, shutil
-import pygtk
-pygtk.require( '2.0' )
-import gtk
-
-import gobject
-import time
-
-import Config
-from Util.CSoundClient import new_csound_client
-from Util.Profiler import TP
-
-from Util.InstrumentPanel import InstrumentPanel
-from miniTamTam.miniTamTamMain import miniTamTamMain
-from Jam.JamMain import JamMain
-from Edit.MainWindow import MainWindow
-from Welcome import Welcome
-from SynthLab.SynthLabWindow import SynthLabWindow
-from Util.Trackpad import Trackpad
-from gettext import gettext as _
-#from Util.KeyboardWindow import KeyboardWindow
-import commands
-
-if __name__ != '__main__':
- try:
- from sugar.activity.activity import Activity
- from sugar.activity import activity
- FAKE_ACTIVITY = False
- if Config.DEBUG: print 'using sugar Activity'
- except ImportError:
- from FActivity import FakeActivity as Activity
- FAKE_ACTIVITY = True
- if Config.DEBUG: print 'using fake activity'
-else:
- from FActivity import FakeActivity as Activity
- if Config.DEBUG: print 'using fake activity'
-
-
-class TamTam(Activity):
- # TamTam is the topmost container in the TamTam application
- # At all times it has one child, which may be one of
- # - the welcome screen
- # - the mini-tamtam
- # - the synth lab
- # - edit mode
-
- def __init__(self, handle, mode='welcome'):
- Activity.__init__(self, handle)
- self.ensure_dirs()
-
- color = gtk.gdk.color_parse(Config.WS_BCK_COLOR)
- self.modify_bg(gtk.STATE_NORMAL, color)
-
- self.set_title('TamTam')
- self.set_resizable(False)
-
- self.trackpad = Trackpad( self )
- #self.keyboardWindow = KeyboardWindow(size = 8, popup = True)
- #self.keyboardWindow.color_piano()
-
- self.preloadTimeout = None
-
- self.focusInHandler = self.connect('focus_in_event',self.onFocusIn)
- self.focusOutHandler = self.connect('focus_out_event',self.onFocusOut)
- self.connect('notify::active', self.onActive)
- self.connect('destroy', self.onDestroy)
- self.connect( "key-press-event", self.onKeyPress )
- self.connect( "key-release-event", self.onKeyRelease )
- #self.connect( "key-press-event", self.keyboardWindow.handle_keypress)
- #self.connect( "key-release-event", self.keyboardWindow.handle_keyrelease)
- #self.connect( "button-press-event", self.keyboardWindow.handle_mousePress)
- #self.connect( "button-release-event", self.keyboardWindow.handle_mouseRelease)
-
- self.mode = None
- self.modeList = {}
-
- self.instrumentPanel = InstrumentPanel( force_load = False )
- self.preloadList = [ self.instrumentPanel ]
-
- #load the sugar toolbar
- self.toolbox = activity.ActivityToolbox(self)
- self.set_toolbox(self.toolbox)
-
- self.activity_toolbar = self.toolbox.get_activity_toolbar()
- self.activity_toolbar.share.hide()
- self.activity_toolbar.keep.hide()
-
- self.toolbox.show()
-
- if self._shared_activity: # if we're joining a shared activity force mini
- self.set_mode("mini")
- else:
- self.set_mode(mode)
-
- def onPreloadTimeout( self ):
- if Config.DEBUG > 4: print "TamTam::onPreloadTimeout", self.preloadList
-
- t = time.time()
- if self.preloadList[0].load( t + 0.100 ): # finished preloading this object
- self.preloadList.pop(0)
- if not len(self.preloadList):
- if Config.DEBUG > 1: print "TamTam::finished preloading", time.time() - t
- self.preloadTimeout = False
- return False # finished preloading everything
-
- if Config.DEBUG > 4: print "TamTam::preload returned after", time.time() - t
-
- return True
-
- def doNothing(): #a callback function to appease SynthLab
- pass
-
- def set_mode(self, mode, arg = None):
- if Config.DEBUG: print 'DEBUG: TamTam::set_mode from', self.mode, 'to', mode
-
- if self.mode != None:
- self.modeList[ self.mode ].onDeactivate()
- if FAKE_ACTIVITY:
- self.remove( self.modeList[ self.mode ] )
-
- self.mode = None
- self.trackpad.setContext(mode)
-
- if mode == 'welcome':
- if not (mode in self.modeList):
- self.modeList[mode] = Welcome(self, self.set_mode)
- self.mode = mode
- #if len( self.preloadList ):
- # self.preloadTimeout = gobject.timeout_add( 300, self.onPreloadTimeout )
- elif self.preloadTimeout:
- gobject.source_remove( self.preloadTimeout )
- self.predrawTimeout = False
-
- if mode == 'jam':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Jam'
- self.modeList[mode] = JamMain(self, self.set_mode)
- self.mode = mode
-
- if mode == 'mini':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Mini'
- self.modeList[mode] = miniTamTamMain(self, self.set_mode)
- else:
- self.modeList[mode].regenerate()
- if self.instrumentPanel in self.preloadList:
- self.instrumentPanel.load() # finish loading
- self.modeList[mode].setInstrumentPanel( self.instrumentPanel )
- self.mode = mode
-
- if mode == 'edit':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Edit'
- self.modeList[mode] = MainWindow(self, self.set_mode)
- if self.instrumentPanel in self.preloadList:
- self.instrumentPanel.load() # finish loading
- self.modeList[mode].setInstrumentPanel( self.instrumentPanel )
- self.mode = mode
-
- if mode == 'synth':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam SynthLab'
- self.modeList[mode] = SynthLabWindow(self, self.set_mode, None)
- self.mode = mode
-
- if self.mode == None:
- print 'DEBUG: TamTam::set_mode invalid mode:', mode
- else:
- try: # activity mode
- self.set_canvas( self.modeList[ self.mode ] )
- except: # fake mode
- self.add( self.modeList[ self.mode ] )
- self.modeList[ self.mode ].onActivate(arg)
- self.show()
-
- def onFocusIn(self, event, data=None):
- if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
- csnd = new_csound_client()
- csnd.connect(True)
- if self.mode == 'synth':
- self.modeList[ self.mode ].updateSound()
- self.modeList[ self.mode ].updateTables()
- #csnd.load_instruments()
-
- def onFocusOut(self, event, data=None):
- if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
- csnd = new_csound_client()
- csnd.connect(False)
-
- def onActive(self, widget = None, event = None):
- pass
-
- def onKeyPress(self, widget, event):
- if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyPress in TamTam.py'
- #print "-----", event.keyval, event.string, event.hardware_keycode
- if event.state == gtk.gdk.MOD1_MASK:
- key = event.keyval
- if key == gtk.keysyms.j:
- self.set_mode("jam")
- return
- elif key == gtk.keysyms.m:
- self.set_mode('mini')
- return
- elif key == gtk.keysyms.s:
- self.set_mode('synth')
- return
- elif key == gtk.keysyms.w:
- self.set_mode('welcome')
- return
- elif key == gtk.keysyms.e:
- self.set_mode('edit')
- return
- elif key == gtk.keysyms.t:
- self.toolbox.show()
- return
- elif key == gtk.keysyms.y:
- self.toolbox.hide()
- if self.mode:
- self.modeList[ self.mode ].onKeyPress(widget, event)
-
- def onKeyRelease(self, widget, event):
- if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyRelease in TamTam.py'
- self.modeList[ self.mode ].onKeyRelease(widget, event)
- pass
-
- def onDestroy(self, arg2):
- if Config.DEBUG: print 'DEBUG: TamTam::onDestroy()'
- os.system('rm -f ' + Config.PREF_DIR + '/synthTemp*')
-
- for m in self.modeList:
- if self.modeList[m] != None:
- self.modeList[m].onDestroy()
-
- csnd = new_csound_client()
- csnd.connect(False)
- csnd.destroy()
-
- gtk.main_quit()
-
- def ensure_dir(self, dir, perms=0777, rw=os.R_OK|os.W_OK):
- if not os.path.isdir( dir ):
- try:
- os.makedirs(dir, perms)
- except OSError, e:
- print 'ERROR: failed to make dir %s: %i (%s)\n' % (dir, e.errno, e.strerror)
- if not os.access(dir, rw):
- print 'ERROR: directory %s is missing required r/w access\n' % dir
-
- def ensure_dirs(self):
- self.ensure_dir(Config.TUNE_DIR)
- self.ensure_dir(Config.SYNTH_DIR)
- self.ensure_dir(Config.SNDS_DIR)
- self.ensure_dir(Config.SCRATCH_DIR)
-
- if not os.path.isdir(Config.PREF_DIR):
- os.mkdir(Config.PREF_DIR)
- os.system('chmod 0777 ' + Config.PREF_DIR + ' &')
- for snd in ['mic1','mic2','mic3','mic4','lab1','lab2','lab3','lab4', 'lab5', 'lab6']:
- shutil.copyfile(Config.SOUNDS_DIR + '/' + snd , Config.SNDS_DIR + '/' + snd)
- os.system('chmod 0777 ' + Config.SNDS_DIR + '/' + snd + ' &')
-
- def read_file(self,file_path):
- subactivity_name = self.metadata['tamtam_subactivity']
- if subactivity_name == 'edit' \
- or subactivity_name == 'synth' \
- or subactivity_name == 'jam':
- self.set_mode(subactivity_name)
- self.modeList[subactivity_name].handleJournalLoad(file_path)
- elif subactivity_name == 'mini':
- self.set_mode(subactivity_name)
- else:
- return
-
- def write_file(self,file_path):
- if self.mode == 'edit':
- self.metadata['tamtam_subactivity'] = self.mode
- self.modeList[self.mode].handleJournalSave(file_path)
- elif self.mode == 'synth':
- self.metadata['tamtam_subactivity'] = self.mode
- self.modeList[self.mode].handleJournalSave(file_path)
- elif self.mode == 'mini':
- self.metadata['tamtam_subactivity'] = self.mode
- f = open(file_path,'w')
- f.close()
- elif self.mode == 'jam':
- self.metadata['tamtam_subactivity'] = self.mode
- self.modeList[self.mode].handleJournalSave(file_path)
-
-class TamTamJam(Activity):
- # TamTam is the topmost container in the TamTam application
- # At all times it has one child, which may be one of
- # - the welcome screen
- # - the mini-tamtam
- # - the synth lab
- # - edit mode
-
- def __init__(self, handle, mode='welcome'):
- Activity.__init__(self, handle)
- self.ensure_dirs()
-
- color = gtk.gdk.color_parse(Config.WS_BCK_COLOR)
- self.modify_bg(gtk.STATE_NORMAL, color)
-
- self.set_title('TamTam Jam')
- self.set_resizable(False)
-
- self.trackpad = Trackpad( self )
- #self.keyboardWindow = KeyboardWindow(size = 8, popup = True)
- #self.keyboardWindow.color_piano()
-
- self.preloadTimeout = None
-
- self.focusInHandler = self.connect('focus_in_event',self.onFocusIn)
- self.focusOutHandler = self.connect('focus_out_event',self.onFocusOut)
- self.connect('notify::active', self.onActive)
- self.connect('destroy', self.onDestroy)
- self.connect( "key-press-event", self.onKeyPress )
- self.connect( "key-release-event", self.onKeyRelease )
- #self.connect( "key-press-event", self.keyboardWindow.handle_keypress)
- #self.connect( "key-release-event", self.keyboardWindow.handle_keyrelease)
- #self.connect( "button-press-event", self.keyboardWindow.handle_mousePress)
- #self.connect( "button-release-event", self.keyboardWindow.handle_mouseRelease)
-
- self.mode = None
- self.modeList = {}
-
- self.instrumentPanel = InstrumentPanel( force_load = False )
- self.preloadList = [ self.instrumentPanel ]
-
- #load the sugar toolbar
- self.toolbox = activity.ActivityToolbox(self)
- self.set_toolbox(self.toolbox)
-
- self.activity_toolbar = self.toolbox.get_activity_toolbar()
- self.activity_toolbar.share.hide()
- self.activity_toolbar.keep.hide()
-
- self.toolbox.show()
-
- self.set_mode("jam")
-
- def onPreloadTimeout( self ):
- if Config.DEBUG > 4: print "TamTam::onPreloadTimeout", self.preloadList
-
- t = time.time()
- if self.preloadList[0].load( t + 0.100 ): # finished preloading this object
- self.preloadList.pop(0)
- if not len(self.preloadList):
- if Config.DEBUG > 1: print "TamTam::finished preloading", time.time() - t
- self.preloadTimeout = False
- return False # finished preloading everything
-
- if Config.DEBUG > 4: print "TamTam::preload returned after", time.time() - t
-
- return True
-
- def doNothing(): #a callback function to appease SynthLab
- pass
-
- def set_mode(self, mode, arg = None):
- if Config.DEBUG: print 'DEBUG: TamTam::set_mode from', self.mode, 'to', mode
-
- if self.mode != None:
- self.modeList[ self.mode ].onDeactivate()
- if FAKE_ACTIVITY:
- self.remove( self.modeList[ self.mode ] )
-
- self.mode = None
- self.trackpad.setContext(mode)
-
- if mode == 'welcome':
- if not (mode in self.modeList):
- self.modeList[mode] = Welcome(self, self.set_mode)
- self.mode = mode
- if len( self.preloadList ):
- self.preloadTimeout = gobject.timeout_add( 300, self.onPreloadTimeout )
- elif self.preloadTimeout:
- gobject.source_remove( self.preloadTimeout )
- self.predrawTimeout = False
-
- if mode == 'jam':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Jam'
- self.modeList[mode] = JamMain(self, self.set_mode)
- self.mode = mode
-
- if mode == 'mini':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Mini'
- self.modeList[mode] = miniTamTamMain(self, self.set_mode)
- else:
- self.modeList[mode].regenerate()
- if self.instrumentPanel in self.preloadList:
- self.instrumentPanel.load() # finish loading
- self.modeList[mode].setInstrumentPanel( self.instrumentPanel )
- self.mode = mode
-
- if mode == 'edit':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Edit'
- self.modeList[mode] = MainWindow(self, self.set_mode)
- if self.instrumentPanel in self.preloadList:
- self.instrumentPanel.load() # finish loading
- self.modeList[mode].setInstrumentPanel( self.instrumentPanel )
- self.mode = mode
-
- if mode == 'synth':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam SynthLab'
- self.modeList[mode] = SynthLabWindow(self, self.set_mode, None)
- self.mode = mode
-
- if self.mode == None:
- print 'DEBUG: TamTam::set_mode invalid mode:', mode
- else:
- try: # activity mode
- self.set_canvas( self.modeList[ self.mode ] )
- except: # fake mode
- self.add( self.modeList[ self.mode ] )
- self.modeList[ self.mode ].onActivate(arg)
- self.show()
-
- def onFocusIn(self, event, data=None):
- if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
- csnd = new_csound_client()
- csnd.connect(True)
- if self.mode == 'synth':
- self.modeList[ self.mode ].updateSound()
- self.modeList[ self.mode ].updateTables()
- #csnd.load_instruments()
-
- def onFocusOut(self, event, data=None):
- if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
- csnd = new_csound_client()
- csnd.connect(False)
-
- def onActive(self, widget = None, event = None):
- pass
-
- def onKeyPress(self, widget, event):
- if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyPress in TamTam.py'
- if event.state == gtk.gdk.MOD1_MASK:
- key = event.keyval
- if key == gtk.keysyms.j:
- self.set_mode("jam")
- return
- elif key == gtk.keysyms.m:
- self.set_mode('mini')
- return
- elif key == gtk.keysyms.s:
- self.set_mode('synth')
- return
- elif key == gtk.keysyms.w:
- self.set_mode('welcome')
- return
- elif key == gtk.keysyms.e:
- self.set_mode('edit')
- return
- elif key == gtk.keysyms.t:
- self.toolbox.show()
- return
- elif key == gtk.keysyms.y:
- self.toolbox.hide()
- if self.mode:
- self.modeList[ self.mode ].onKeyPress(widget, event)
-
- def onKeyRelease(self, widget, event):
- if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyRelease in TamTam.py'
- self.modeList[ self.mode ].onKeyRelease(widget, event)
- pass
-
- def onDestroy(self, arg2):
- if Config.DEBUG: print 'DEBUG: TamTam::onDestroy()'
- os.system('rm -f ' + Config.PREF_DIR + '/synthTemp*')
-
- for m in self.modeList:
- if self.modeList[m] != None:
- self.modeList[m].onDestroy()
-
- csnd = new_csound_client()
- csnd.connect(False)
- csnd.destroy()
-
- gtk.main_quit()
-
- def ensure_dir(self, dir, perms=0777, rw=os.R_OK|os.W_OK):
- if not os.path.isdir( dir ):
- try:
- os.makedirs(dir, perms)
- except OSError, e:
- print 'ERROR: failed to make dir %s: %i (%s)\n' % (dir, e.errno, e.strerror)
- if not os.access(dir, rw):
- print 'ERROR: directory %s is missing required r/w access\n' % dir
-
- def ensure_dirs(self):
- self.ensure_dir(Config.TUNE_DIR)
- self.ensure_dir(Config.SYNTH_DIR)
- self.ensure_dir(Config.SNDS_DIR)
- self.ensure_dir(Config.SCRATCH_DIR)
-
- if not os.path.isdir(Config.PREF_DIR):
- os.mkdir(Config.PREF_DIR)
- os.system('chmod 0777 ' + Config.PREF_DIR + ' &')
- for snd in ['mic1','mic2','mic3','mic4','lab1','lab2','lab3','lab4', 'lab5', 'lab6']:
- shutil.copyfile(Config.SOUNDS_DIR + '/' + snd , Config.SNDS_DIR + '/' + snd)
- os.system('chmod 0777 ' + Config.SNDS_DIR + '/' + snd + ' &')
-
- def read_file(self,file_path):
- self.modeList['jam'].handleJournalLoad(file_path)
-
- def write_file(self,file_path):
- self.modeList['jam'].handleJournalSave(file_path)
-
-class TamTamEdit(Activity):
- # TamTam is the topmost container in the TamTam application
- # At all times it has one child, which may be one of
- # - the welcome screen
- # - the mini-tamtam
- # - the synth lab
- # - edit mode
-
- def __init__(self, handle, mode='edit'):
- Activity.__init__(self, handle)
- self.ensure_dirs()
-
- color = gtk.gdk.color_parse(Config.WS_BCK_COLOR)
- self.modify_bg(gtk.STATE_NORMAL, color)
-
- self.set_title('TamTam Edit')
- self.set_resizable(False)
-
- self.trackpad = Trackpad( self )
- #self.keyboardWindow = KeyboardWindow(size = 8, popup = True)
- #self.keyboardWindow.color_piano()
-
- self.preloadTimeout = None
-
- self.focusInHandler = self.connect('focus_in_event',self.onFocusIn)
- self.focusOutHandler = self.connect('focus_out_event',self.onFocusOut)
- self.connect('notify::active', self.onActive)
- self.connect('destroy', self.onDestroy)
- self.connect( "key-press-event", self.onKeyPress )
- self.connect( "key-release-event", self.onKeyRelease )
- #self.connect( "key-press-event", self.keyboardWindow.handle_keypress)
- #self.connect( "key-release-event", self.keyboardWindow.handle_keyrelease)
- #self.connect( "button-press-event", self.keyboardWindow.handle_mousePress)
- #self.connect( "button-release-event", self.keyboardWindow.handle_mouseRelease)
-
- self.mode = None
- self.modeList = {}
-
- self.instrumentPanel = InstrumentPanel( force_load = False )
- self.preloadList = [ self.instrumentPanel ]
-
- #load the sugar toolbar
- self.toolbox = activity.ActivityToolbox(self)
- self.set_toolbox(self.toolbox)
-
- self.activity_toolbar = self.toolbox.get_activity_toolbar()
- self.activity_toolbar.share.hide()
- self.activity_toolbar.keep.hide()
-
- self.toolbox.show()
-
- self.set_mode("edit")
-
- def onPreloadTimeout( self ):
- if Config.DEBUG > 4: print "TamTam::onPreloadTimeout", self.preloadList
-
- t = time.time()
- if self.preloadList[0].load( t + 0.100 ): # finished preloading this object
- self.preloadList.pop(0)
- if not len(self.preloadList):
- if Config.DEBUG > 1: print "TamTam::finished preloading", time.time() - t
- self.preloadTimeout = False
- return False # finished preloading everything
-
- if Config.DEBUG > 4: print "TamTam::preload returned after", time.time() - t
-
- return True
-
- def doNothing(): #a callback function to appease SynthLab
- pass
-
- def set_mode(self, mode, arg = None):
- if Config.DEBUG: print 'DEBUG: TamTam::set_mode from', self.mode, 'to', mode
-
- if self.mode != None:
- self.modeList[ self.mode ].onDeactivate()
- if FAKE_ACTIVITY:
- self.remove( self.modeList[ self.mode ] )
-
- self.mode = None
- self.trackpad.setContext(mode)
-
- if mode == 'welcome':
- if not (mode in self.modeList):
- self.modeList[mode] = Welcome(self, self.set_mode)
- self.mode = mode
- if len( self.preloadList ):
- self.preloadTimeout = gobject.timeout_add( 300, self.onPreloadTimeout )
- elif self.preloadTimeout:
- gobject.source_remove( self.preloadTimeout )
- self.predrawTimeout = False
-
- if mode == 'jam':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Jam'
- self.modeList[mode] = JamMain(self, self.set_mode)
- self.mode = mode
-
- if mode == 'mini':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Mini'
- self.modeList[mode] = miniTamTamMain(self, self.set_mode)
- else:
- self.modeList[mode].regenerate()
- if self.instrumentPanel in self.preloadList:
- self.instrumentPanel.load() # finish loading
- self.modeList[mode].setInstrumentPanel( self.instrumentPanel )
- self.mode = mode
-
- if mode == 'edit':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Edit'
- self.modeList[mode] = MainWindow(self, self.set_mode)
- if self.instrumentPanel in self.preloadList:
- self.instrumentPanel.load() # finish loading
- self.modeList[mode].setInstrumentPanel( self.instrumentPanel )
- self.mode = mode
-
- if mode == 'synth':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam SynthLab'
- self.modeList[mode] = SynthLabWindow(self, self.set_mode, None)
- self.mode = mode
-
- if self.mode == None:
- print 'DEBUG: TamTam::set_mode invalid mode:', mode
- else:
- try: # activity mode
- self.set_canvas( self.modeList[ self.mode ] )
- except: # fake mode
- self.add( self.modeList[ self.mode ] )
- self.modeList[ self.mode ].onActivate(arg)
- self.show()
-
- def onFocusIn(self, event, data=None):
- if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
- csnd = new_csound_client()
- csnd.connect(True)
- if self.mode == 'synth':
- self.modeList[ self.mode ].updateSound()
- self.modeList[ self.mode ].updateTables()
- #csnd.load_instruments()
-
- def onFocusOut(self, event, data=None):
- if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
- csnd = new_csound_client()
- csnd.connect(False)
-
- def onActive(self, widget = None, event = None):
- pass
-
- def onKeyPress(self, widget, event):
- if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyPress in TamTam.py'
- if event.state == gtk.gdk.MOD1_MASK:
- key = event.keyval
- if key == gtk.keysyms.j:
- self.set_mode("jam")
- return
- elif key == gtk.keysyms.m:
- self.set_mode('mini')
- return
- elif key == gtk.keysyms.s:
- self.set_mode('synth')
- return
- elif key == gtk.keysyms.w:
- self.set_mode('welcome')
- return
- elif key == gtk.keysyms.e:
- self.set_mode('edit')
- return
- elif key == gtk.keysyms.t:
- self.toolbox.show()
- return
- elif key == gtk.keysyms.y:
- self.toolbox.hide()
- if self.mode:
- self.modeList[ self.mode ].onKeyPress(widget, event)
-
- def onKeyRelease(self, widget, event):
- if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyRelease in TamTam.py'
- self.modeList[ self.mode ].onKeyRelease(widget, event)
- pass
-
- def onDestroy(self, arg2):
- if Config.DEBUG: print 'DEBUG: TamTam::onDestroy()'
- os.system('rm -f ' + Config.PREF_DIR + '/synthTemp*')
-
- for m in self.modeList:
- if self.modeList[m] != None:
- self.modeList[m].onDestroy()
-
- csnd = new_csound_client()
- csnd.connect(False)
- csnd.destroy()
-
- gtk.main_quit()
-
- def ensure_dir(self, dir, perms=0777, rw=os.R_OK|os.W_OK):
- if not os.path.isdir( dir ):
- try:
- os.makedirs(dir, perms)
- except OSError, e:
- print 'ERROR: failed to make dir %s: %i (%s)\n' % (dir, e.errno, e.strerror)
- if not os.access(dir, rw):
- print 'ERROR: directory %s is missing required r/w access\n' % dir
-
- def ensure_dirs(self):
- self.ensure_dir(Config.TUNE_DIR)
- self.ensure_dir(Config.SYNTH_DIR)
- self.ensure_dir(Config.SNDS_DIR)
- self.ensure_dir(Config.SCRATCH_DIR)
-
- if not os.path.isdir(Config.PREF_DIR):
- os.mkdir(Config.PREF_DIR)
- os.system('chmod 0777 ' + Config.PREF_DIR + ' &')
- for snd in ['mic1','mic2','mic3','mic4','lab1','lab2','lab3','lab4', 'lab5', 'lab6']:
- shutil.copyfile(Config.SOUNDS_DIR + '/' + snd , Config.SNDS_DIR + '/' + snd)
- os.system('chmod 0777 ' + Config.SNDS_DIR + '/' + snd + ' &')
-
- def read_file(self,file_path):
- self.modeList['edit'].handleJournalLoad(file_path)
-
- def write_file(self,file_path):
- self.modeList['edit'].handleJournalSave(file_path)
-
-class TamTamSynthLab(Activity):
- # TamTam is the topmost container in the TamTam application
- # At all times it has one child, which may be one of
- # - the welcome screen
- # - the mini-tamtam
- # - the synth lab
- # - edit mode
-
- def __init__(self, handle, mode='synth'):
- Activity.__init__(self, handle)
- self.ensure_dirs()
-
- color = gtk.gdk.color_parse(Config.WS_BCK_COLOR)
- self.modify_bg(gtk.STATE_NORMAL, color)
-
- self.set_title('TamTam SynthLab')
- self.set_resizable(False)
-
- self.trackpad = Trackpad( self )
- #self.keyboardWindow = KeyboardWindow(size = 8, popup = True)
- #self.keyboardWindow.color_piano()
-
- self.preloadTimeout = None
-
- self.focusInHandler = self.connect('focus_in_event',self.onFocusIn)
- self.focusOutHandler = self.connect('focus_out_event',self.onFocusOut)
- self.connect('notify::active', self.onActive)
- self.connect('destroy', self.onDestroy)
- self.connect( "key-press-event", self.onKeyPress )
- self.connect( "key-release-event", self.onKeyRelease )
- #self.connect( "key-press-event", self.keyboardWindow.handle_keypress)
- #self.connect( "key-release-event", self.keyboardWindow.handle_keyrelease)
- #self.connect( "button-press-event", self.keyboardWindow.handle_mousePress)
- #self.connect( "button-release-event", self.keyboardWindow.handle_mouseRelease)
-
- self.mode = None
- self.modeList = {}
-
- self.instrumentPanel = InstrumentPanel( force_load = False )
- self.preloadList = [ self.instrumentPanel ]
-
- #load the sugar toolbar
- self.toolbox = activity.ActivityToolbox(self)
- self.set_toolbox(self.toolbox)
-
- self.activity_toolbar = self.toolbox.get_activity_toolbar()
- self.activity_toolbar.share.hide()
- self.activity_toolbar.keep.hide()
-
- self.toolbox.show()
-
- self.set_mode("synth")
-
- def onPreloadTimeout( self ):
- if Config.DEBUG > 4: print "TamTam::onPreloadTimeout", self.preloadList
-
- t = time.time()
- if self.preloadList[0].load( t + 0.100 ): # finished preloading this object
- self.preloadList.pop(0)
- if not len(self.preloadList):
- if Config.DEBUG > 1: print "TamTam::finished preloading", time.time() - t
- self.preloadTimeout = False
- return False # finished preloading everything
-
- if Config.DEBUG > 4: print "TamTam::preload returned after", time.time() - t
-
- return True
-
- def doNothing(): #a callback function to appease SynthLab
- pass
-
- def set_mode(self, mode, arg = None):
- if Config.DEBUG: print 'DEBUG: TamTam::set_mode from', self.mode, 'to', mode
-
- if self.mode != None:
- self.modeList[ self.mode ].onDeactivate()
- if FAKE_ACTIVITY:
- self.remove( self.modeList[ self.mode ] )
-
- self.mode = None
- self.trackpad.setContext(mode)
-
- if mode == 'welcome':
- if not (mode in self.modeList):
- self.modeList[mode] = Welcome(self, self.set_mode)
- self.mode = mode
- if len( self.preloadList ):
- self.preloadTimeout = gobject.timeout_add( 300, self.onPreloadTimeout )
- elif self.preloadTimeout:
- gobject.source_remove( self.preloadTimeout )
- self.predrawTimeout = False
-
- if mode == 'jam':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Jam'
- self.modeList[mode] = JamMain(self, self.set_mode)
- self.mode = mode
-
- if mode == 'mini':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Mini'
- self.modeList[mode] = miniTamTamMain(self, self.set_mode)
- else:
- self.modeList[mode].regenerate()
- if self.instrumentPanel in self.preloadList:
- self.instrumentPanel.load() # finish loading
- self.modeList[mode].setInstrumentPanel( self.instrumentPanel )
- self.mode = mode
-
- if mode == 'edit':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Edit'
- self.modeList[mode] = MainWindow(self, self.set_mode)
- if self.instrumentPanel in self.preloadList:
- self.instrumentPanel.load() # finish loading
- self.modeList[mode].setInstrumentPanel( self.instrumentPanel )
- self.mode = mode
-
- if mode == 'synth':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam SynthLab'
- self.modeList[mode] = SynthLabWindow(self, self.set_mode, None)
- self.mode = mode
-
- if self.mode == None:
- print 'DEBUG: TamTam::set_mode invalid mode:', mode
- else:
- try: # activity mode
- self.set_canvas( self.modeList[ self.mode ] )
- except: # fake mode
- self.add( self.modeList[ self.mode ] )
- self.modeList[ self.mode ].onActivate(arg)
- self.show()
-
- def onFocusIn(self, event, data=None):
- if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
- csnd = new_csound_client()
- csnd.connect(True)
- if self.mode == 'synth':
- self.modeList[ self.mode ].updateSound()
- self.modeList[ self.mode ].updateTables()
- #csnd.load_instruments()
-
- def onFocusOut(self, event, data=None):
- if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
- csnd = new_csound_client()
- csnd.connect(False)
-
- def onActive(self, widget = None, event = None):
- pass
-
- def onKeyPress(self, widget, event):
- if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyPress in TamTam.py'
- if event.state == gtk.gdk.MOD1_MASK:
- key = event.keyval
- if key == gtk.keysyms.j:
- self.set_mode("jam")
- return
- elif key == gtk.keysyms.m:
- self.set_mode('mini')
- return
- elif key == gtk.keysyms.s:
- self.set_mode('synth')
- return
- elif key == gtk.keysyms.w:
- self.set_mode('welcome')
- return
- elif key == gtk.keysyms.e:
- self.set_mode('edit')
- return
- elif key == gtk.keysyms.t:
- self.toolbox.show()
- return
- elif key == gtk.keysyms.y:
- self.toolbox.hide()
- if self.mode:
- self.modeList[ self.mode ].onKeyPress(widget, event)
-
- def onKeyRelease(self, widget, event):
- if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyRelease in TamTam.py'
- self.modeList[ self.mode ].onKeyRelease(widget, event)
- pass
-
- def onDestroy(self, arg2):
- if Config.DEBUG: print 'DEBUG: TamTam::onDestroy()'
- os.system('rm -f ' + Config.PREF_DIR + '/synthTemp*')
-
- for m in self.modeList:
- if self.modeList[m] != None:
- self.modeList[m].onDestroy()
-
- csnd = new_csound_client()
- csnd.connect(False)
- csnd.destroy()
-
- gtk.main_quit()
-
- def ensure_dir(self, dir, perms=0777, rw=os.R_OK|os.W_OK):
- if not os.path.isdir( dir ):
- try:
- os.makedirs(dir, perms)
- except OSError, e:
- print 'ERROR: failed to make dir %s: %i (%s)\n' % (dir, e.errno, e.strerror)
- if not os.access(dir, rw):
- print 'ERROR: directory %s is missing required r/w access\n' % dir
-
- def ensure_dirs(self):
- self.ensure_dir(Config.TUNE_DIR)
- self.ensure_dir(Config.SYNTH_DIR)
- self.ensure_dir(Config.SNDS_DIR)
- self.ensure_dir(Config.SCRATCH_DIR)
-
- if not os.path.isdir(Config.PREF_DIR):
- os.mkdir(Config.PREF_DIR)
- os.system('chmod 0777 ' + Config.PREF_DIR + ' &')
- for snd in ['mic1','mic2','mic3','mic4','lab1','lab2','lab3','lab4', 'lab5', 'lab6']:
- shutil.copyfile(Config.SOUNDS_DIR + '/' + snd , Config.SNDS_DIR + '/' + snd)
- os.system('chmod 0777 ' + Config.SNDS_DIR + '/' + snd + ' &')
-
- def read_file(self,file_path):
- self.modeList['synth'].handleJournalLoad(file_path)
-
- def write_file(self,file_path):
- self.modeList['synth'].handleJournalSave(file_path)
-
-class TamTamMini(Activity):
- # TamTam is the topmost container in the TamTam application
- # At all times it has one child, which may be one of
- # - the welcome screen
- # - the mini-tamtam
- # - the synth lab
- # - edit mode
-
- def __init__(self, handle, mode='mini'):
- Activity.__init__(self, handle)
- self.ensure_dirs()
-
- color = gtk.gdk.color_parse(Config.WS_BCK_COLOR)
- self.modify_bg(gtk.STATE_NORMAL, color)
-
- self.set_title('TamTam Mini')
- self.set_resizable(False)
-
- self.trackpad = Trackpad( self )
- #self.keyboardWindow = KeyboardWindow(size = 8, popup = True)
- #self.keyboardWindow.color_piano()
-
- self.preloadTimeout = None
-
- self.focusInHandler = self.connect('focus_in_event',self.onFocusIn)
- self.focusOutHandler = self.connect('focus_out_event',self.onFocusOut)
- self.connect('notify::active', self.onActive)
- self.connect('destroy', self.onDestroy)
- self.connect( "key-press-event", self.onKeyPress )
- self.connect( "key-release-event", self.onKeyRelease )
- #self.connect( "key-press-event", self.keyboardWindow.handle_keypress)
- #self.connect( "key-release-event", self.keyboardWindow.handle_keyrelease)
- #self.connect( "button-press-event", self.keyboardWindow.handle_mousePress)
- #self.connect( "button-release-event", self.keyboardWindow.handle_mouseRelease)
-
- self.mode = None
- self.modeList = {}
-
- self.instrumentPanel = InstrumentPanel( force_load = False )
- self.preloadList = [ self.instrumentPanel ]
-
- #load the sugar toolbar
- self.toolbox = activity.ActivityToolbox(self)
- self.set_toolbox(self.toolbox)
-
- self.activity_toolbar = self.toolbox.get_activity_toolbar()
- self.activity_toolbar.share.hide()
- self.activity_toolbar.keep.hide()
-
- self.toolbox.show()
-
- self.set_mode("mini")
-
- def onPreloadTimeout( self ):
- if Config.DEBUG > 4: print "TamTam::onPreloadTimeout", self.preloadList
-
- t = time.time()
- if self.preloadList[0].load( t + 0.100 ): # finished preloading this object
- self.preloadList.pop(0)
- if not len(self.preloadList):
- if Config.DEBUG > 1: print "TamTam::finished preloading", time.time() - t
- self.preloadTimeout = False
- return False # finished preloading everything
-
- if Config.DEBUG > 4: print "TamTam::preload returned after", time.time() - t
-
- return True
-
- def doNothing(): #a callback function to appease SynthLab
- pass
-
- def set_mode(self, mode, arg = None):
- if Config.DEBUG: print 'DEBUG: TamTam::set_mode from', self.mode, 'to', mode
-
- if self.mode != None:
- self.modeList[ self.mode ].onDeactivate()
- if FAKE_ACTIVITY:
- self.remove( self.modeList[ self.mode ] )
-
- self.mode = None
- self.trackpad.setContext(mode)
-
- if mode == 'welcome':
- if not (mode in self.modeList):
- self.modeList[mode] = Welcome(self, self.set_mode)
- self.mode = mode
- if len( self.preloadList ):
- self.preloadTimeout = gobject.timeout_add( 300, self.onPreloadTimeout )
- elif self.preloadTimeout:
- gobject.source_remove( self.preloadTimeout )
- self.predrawTimeout = False
-
- if mode == 'jam':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Jam'
- self.modeList[mode] = JamMain(self, self.set_mode)
- self.mode = mode
-
- if mode == 'mini':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Mini'
- self.modeList[mode] = miniTamTamMain(self, self.set_mode)
- else:
- self.modeList[mode].regenerate()
- if self.instrumentPanel in self.preloadList:
- self.instrumentPanel.load() # finish loading
- self.modeList[mode].setInstrumentPanel( self.instrumentPanel )
- self.mode = mode
-
- if mode == 'edit':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam Edit'
- self.modeList[mode] = MainWindow(self, self.set_mode)
- if self.instrumentPanel in self.preloadList:
- self.instrumentPanel.load() # finish loading
- self.modeList[mode].setInstrumentPanel( self.instrumentPanel )
- self.mode = mode
-
- if mode == 'synth':
- if not (mode in self.modeList):
- self.metadata['title'] = 'TamTam SynthLab'
- self.modeList[mode] = SynthLabWindow(self, self.set_mode, None)
- self.mode = mode
-
- if self.mode == None:
- print 'DEBUG: TamTam::set_mode invalid mode:', mode
- else:
- try: # activity mode
- self.set_canvas( self.modeList[ self.mode ] )
- except: # fake mode
- self.add( self.modeList[ self.mode ] )
- self.modeList[ self.mode ].onActivate(arg)
- self.show()
-
- def onFocusIn(self, event, data=None):
- if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
- csnd = new_csound_client()
- csnd.connect(True)
- if self.mode == 'synth':
- self.modeList[ self.mode ].updateSound()
- self.modeList[ self.mode ].updateTables()
- #csnd.load_instruments()
-
- def onFocusOut(self, event, data=None):
- if Config.DEBUG > 3: print 'DEBUG: TamTam::onFocusOut in TamTam.py'
- csnd = new_csound_client()
- csnd.connect(False)
-
- def onActive(self, widget = None, event = None):
- pass
-
- def onKeyPress(self, widget, event):
- if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyPress in TamTam.py'
- if event.state == gtk.gdk.MOD1_MASK:
- key = event.keyval
- if key == gtk.keysyms.j:
- self.set_mode("jam")
- return
- elif key == gtk.keysyms.m:
- self.set_mode('mini')
- return
- elif key == gtk.keysyms.s:
- self.set_mode('synth')
- return
- elif key == gtk.keysyms.w:
- self.set_mode('welcome')
- return
- elif key == gtk.keysyms.e:
- self.set_mode('edit')
- return
- elif key == gtk.keysyms.t:
- self.toolbox.show()
- return
- elif key == gtk.keysyms.y:
- self.toolbox.hide()
- if self.mode:
- self.modeList[ self.mode ].onKeyPress(widget, event)
-
- def onKeyRelease(self, widget, event):
- if Config.DEBUG > 5: print 'DEBUG: TamTam::onKeyRelease in TamTam.py'
- self.modeList[ self.mode ].onKeyRelease(widget, event)
- pass
-
- def onDestroy(self, arg2):
- if Config.DEBUG: print 'DEBUG: TamTam::onDestroy()'
- os.system('rm -f ' + Config.PREF_DIR + '/synthTemp*')
-
- for m in self.modeList:
- if self.modeList[m] != None:
- self.modeList[m].onDestroy()
-
- csnd = new_csound_client()
- csnd.connect(False)
- csnd.destroy()
-
- gtk.main_quit()
-
- def ensure_dir(self, dir, perms=0777, rw=os.R_OK|os.W_OK):
- if not os.path.isdir( dir ):
- try:
- os.makedirs(dir, perms)
- except OSError, e:
- print 'ERROR: failed to make dir %s: %i (%s)\n' % (dir, e.errno, e.strerror)
- if not os.access(dir, rw):
- print 'ERROR: directory %s is missing required r/w access\n' % dir
-
- def ensure_dirs(self):
- self.ensure_dir(Config.TUNE_DIR)
- self.ensure_dir(Config.SYNTH_DIR)
- self.ensure_dir(Config.SNDS_DIR)
- self.ensure_dir(Config.SCRATCH_DIR)
-
- if not os.path.isdir(Config.PREF_DIR):
- os.mkdir(Config.PREF_DIR)
- os.system('chmod 0777 ' + Config.PREF_DIR + ' &')
- for snd in ['mic1','mic2','mic3','mic4','lab1','lab2','lab3','lab4', 'lab5', 'lab6']:
- shutil.copyfile(Config.SOUNDS_DIR + '/' + snd , Config.SNDS_DIR + '/' + snd)
- os.system('chmod 0777 ' + Config.SNDS_DIR + '/' + snd + ' &')
-
- def read_file(self,file_path):
- self.metadata['tamtam_subactivity'] = 'mini'
-
- def write_file(self,file_path):
- f = open(file_path,'w')
- f.close()
-
-
-
-if __name__ == "__main__":
- if len(sys.argv) > 1 :
- mainwin = TamTam(None, sys.argv[1])
- else:
- mainwin = TamTam(None, 'welcome')
-
- gtk.gdk.threads_init()
- gtk.main()
-
- sys.exit(0)
-
-
-
-
-
-
-
-
- def run_edit_mode():
- tamtam = MainWindow()
- mainwin = gtk.Window(gtk.WINDOW_TOPLEVEL)
- mainwin.set_title('TamTam Player')
- display = mainwin.get_display()
- screen = gtk.gdk.Display.get_default_screen(display)
- mainwin.set_geometry_hints( None, screen.get_width(), screen.get_height(), screen.get_width(), screen.get_height(), screen.get_width(), screen.get_height() )
- #mainwin.fullscreen() # don't need to specify full screen, it seem to sit properly anyway
- mainwin.set_resizable(False)
- mainwin.connect('destroy' , tamtam.destroy )
- #mainwin.connect( "configure-event", tamtam.handleConfigureEvent )
- mainwin.connect( "key-press-event", tamtam.onKeyPress )
- mainwin.connect( "key-release-event", tamtam.onKeyRelease )
- mainwin.connect( "delete_event", tamtam.delete_event )
- mainwin.add(tamtam)
- tamtam.show()
- mainwin.show()
- gtk.main()