diff options
Diffstat (limited to 'TamTamJam.activity/TamTam.py')
-rw-r--r-- | TamTamJam.activity/TamTam.py | 1229 |
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() |