Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TamTamSynthLab.activity/common/Util
diff options
context:
space:
mode:
Diffstat (limited to 'TamTamSynthLab.activity/common/Util')
-rw-r--r--TamTamSynthLab.activity/common/Util/CSoundClient.py411
-rw-r--r--TamTamSynthLab.activity/common/Util/CSoundNote.py80
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/Makefile23
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/SoundClient.i14
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/__init__.py21
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/aclient.cpp1101
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/audio.cpp237
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/cmd_csound.cpp22
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/linux32_508/__init__.py0
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/linux32_510/__init__.py0
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/linux64_510/__init__.py0
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/linux64_511_deb/__init__.py0
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/log.cpp52
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/ttest.c53
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/ttest.h15
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/ttest.i15
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/ttest.py54
-rw-r--r--TamTamSynthLab.activity/common/Util/Clooper/ttest_wrap.c3042
-rw-r--r--TamTamSynthLab.activity/common/Util/ControlStream.py254
-rw-r--r--TamTamSynthLab.activity/common/Util/Credits.py39
-rw-r--r--TamTamSynthLab.activity/common/Util/InstrumentDB.py140
-rw-r--r--TamTamSynthLab.activity/common/Util/InstrumentPanel.py379
-rw-r--r--TamTamSynthLab.activity/common/Util/Instruments.py309
-rw-r--r--TamTamSynthLab.activity/common/Util/KeyboardWindow.py180
-rw-r--r--TamTamSynthLab.activity/common/Util/LoopSettings.py229
-rw-r--r--TamTamSynthLab.activity/common/Util/Network.py572
-rw-r--r--TamTamSynthLab.activity/common/Util/NoteDB.py813
-rw-r--r--TamTamSynthLab.activity/common/Util/OS.py36
-rw-r--r--TamTamSynthLab.activity/common/Util/Profiler.py93
-rw-r--r--TamTamSynthLab.activity/common/Util/ThemeWidgets.py1280
-rw-r--r--TamTamSynthLab.activity/common/Util/Trackpad.py95
-rw-r--r--TamTamSynthLab.activity/common/Util/__init__.py0
32 files changed, 0 insertions, 9559 deletions
diff --git a/TamTamSynthLab.activity/common/Util/CSoundClient.py b/TamTamSynthLab.activity/common/Util/CSoundClient.py
deleted file mode 100644
index b6acd96..0000000
--- a/TamTamSynthLab.activity/common/Util/CSoundClient.py
+++ /dev/null
@@ -1,411 +0,0 @@
-import os
-import socket
-import select
-import sys
-import threading
-import time
-import array
-from math import sqrt
-
-from common.Util.Clooper import *
-import common.Config as Config
-
-from common.Generation.GenerationConstants import GenerationConstants
-from common.Util import NoteDB
-import common.Util.InstrumentDB as InstrumentDB
-
-loadedInstruments = []
-
-_note_template = array.array('f', [0] * 19 )
-def _new_note_array():
- return _note_template.__copy__()
-
-def _noteid(dbnote):
- return (dbnote.page << 16) + dbnote.id
-
-_loop_default=0
-
-class _CSoundClientPlugin:
-
- #array index constants for csound
- (INSTR_TRACK, \
- ONSET, \
- DURATION, \
- PITCH,
- REVERBSEND, \
- AMPLITUDE, \
- PAN, \
- INST_ID, \
- ATTACK, \
- DECAY, \
- FILTERTYPE, \
- FILTERCUTOFF, \
- INSTRUMENT2 ) = range(13)
-
- def __init__(self):
- sc_initialize( Config.PLUGIN_UNIVORC, Config.PLUGIN_DEBUG,
- Config.PLUGIN_PERIOD, Config.PLUGIN_NPERIODS,
- Config.PLUGIN_VERBOSE,
- Config.PLUGIN_KSMPS, Config.PLUGIN_RATE)
- self.on = False
- #self.masterVolume = 100.0
- self.periods_per_buffer = 2
- global _loop_default
- _loop_default = self.loopCreate()
- self.instrumentDB = InstrumentDB.getRef()
-
- self.jamesSux = {} # temporyary dictionary of loopId: loopNumTicks, while I wait for james to implement it properly
-
- def __del__(self):
- self.connect(False)
- sc_destroy()
-
- def setChannel(self, name, val):
- sc_setChannel(name, val)
-
- def setMasterVolume(self, volume):
- sc_setChannel( 'masterVolume', volume)
-
- def setTrackVolume( self, volume, trackId ):
- sc_setChannel( 'trackVolume' + str(trackId + 1), volume )
-
- def setTrackpadX( self, value ):
- sc_setChannel( 'trackpadX', value)
-
- def setTrackpadY( self, value ):
- sc_setChannel( 'trackpadY', value)
-
- def micRecording( self, table ):
- sc_inputMessage( Config.CSOUND_MIC_RECORD % table )
-
- def load_mic_instrument( self, inst ):
- fileName = Config.DATA_DIR + '/' + inst
- instrumentId = Config.INSTRUMENT_TABLE_OFFSET + self.instrumentDB.instNamed[inst].instrumentId
- sc_inputMessage(Config.CSOUND_LOAD_INSTRUMENT % (instrumentId, fileName))
-
- def load_synth_instrument( self, inst ):
- fileName = Config.DATA_DIR + '/' + inst
- instrumentId = Config.INSTRUMENT_TABLE_OFFSET + self.instrumentDB.instNamed[inst].instrumentId
- sc_inputMessage(Config.CSOUND_LOAD_INSTRUMENT % (instrumentId, fileName))
-
- def load_ls_instrument( self, inst ):
- fileName = Config.DATA_DIR + '/' + inst
- sc_inputMessage(Config.CSOUND_LOAD_LS_INSTRUMENT % fileName)
-
- def load_instruments( self ):
- for instrumentSoundFile in self.instrumentDB.instNamed.keys():
- if instrumentSoundFile[0:3] == 'mic' or instrumentSoundFile[0:3] == 'lab' or self.instrumentDB.instNamed[instrumentSoundFile].category == 'mysounds':
- fileName = Config.DATA_DIR + '/' + instrumentSoundFile
- else:
- fileName = Config.SOUNDS_DIR + "/" + instrumentSoundFile
- instrumentId = Config.INSTRUMENT_TABLE_OFFSET + self.instrumentDB.instNamed[ instrumentSoundFile ].instrumentId
- sc_inputMessage( Config.CSOUND_LOAD_INSTRUMENT % (instrumentId, fileName) )
-
- def load_instrument(self, inst):
- if not inst in loadedInstruments:
- if inst[0:3] == 'mic' or inst[0:3] == 'lab' or self.instrumentDB.instNamed[inst].category == 'mysounds':
- if os.path.isfile(os.path.join(Config.DATA_DIR, inst)):
- fileName = os.path.join(Config.DATA_DIR, inst)
- else:
- fileName = os.path.join(Config.SOUNDS_DIR, 'armbone')
- else:
- fileName = os.path.join(Config.SOUNDS_DIR, inst)
- instrumentId = Config.INSTRUMENT_TABLE_OFFSET + self.instrumentDB.instNamed[ inst ].instrumentId
- sc_inputMessage( Config.CSOUND_LOAD_INSTRUMENT % (instrumentId, fileName) )
- loadedInstruments.append(inst)
-
- def load_drumkit(self, kit):
- if not kit in loadedInstruments:
- for i in self.instrumentDB.instNamed[kit].kit.values():
- fileName = Config.SOUNDS_DIR + "/" + i
- instrumentId = Config.INSTRUMENT_TABLE_OFFSET + self.instrumentDB.instNamed[ i ].instrumentId
- sc_inputMessage( Config.CSOUND_LOAD_INSTRUMENT % (instrumentId, fileName) )
- loadedInstruments.append(i)
- loadedInstruments.append(kit)
-
- def connect( self, init = True ):
- def reconnect():
- if sc_start(self.periods_per_buffer) :
- if (Config.DEBUG > 0) : print 'ERROR connecting'
- else:
- self.on = True
- def disconnect():
- if sc_stop() :
- if (Config.DEBUG > 0) : print 'ERROR connecting'
- else:
- self.on = False
-
- if init and not self.on :
- reconnect()
- if not init and self.on :
- disconnect()
-
- def destroy( self ):
- self.connect(False)
- sc_destroy()
-
- def inputMessage(self,msg):
- sc_inputMessage(msg)
-
- def getTick( self ):
- return sc_getTickf()
-
- def adjustTick( self, amt ):
- sc_adjustTick(amt)
-
- def setTempo(self,t):
- if (Config.DEBUG > 3) : print 'INFO: loop tempo: %f -> %f' % (t, 60.0 / (Config.TICKS_PER_BEAT * t))
- sc_setTickDuration( 60.0 / (Config.TICKS_PER_BEAT * t))
-
-
- def loopCreate(self):
- return sc_loop_new()
-
- def loopDestroy(self, loopId):
- sc_loop_delete(loopId)
- try:
- del self.jamesSux[ loopId ]
- except:
- pass
-
- def loopClear(self):
- global _loop_default
- sc_loop_delete(_loop_default)
- _loop_default = sc_loop_new()
- try:
- del self.jamesSux[ loopId ]
- except:
- pass
-
-
- # this is function deletes an Event from a loop
- # TODO: rename this function
- def loopDelete(self, dbnote, loopId=_loop_default):
- sc_loop_delScoreEvent( loopId, _noteid(dbnote))
-
- def loopDelete1(self, page, id, loopId=_loop_default):
- sc_loop_delScoreEvent( loopId, (page << 16) + id)
-
- def loopStart(self, loopId=_loop_default):
- sc_loop_playing(loopId, 1)
-
- def loopPause(self, loopId=_loop_default):
- sc_loop_playing(loopId, 0)
-
- def loopSetTick(self,t, loopId=_loop_default):
- sc_loop_setTickf(loopId, t)
-
- def loopGetTick(self, loopId=_loop_default):
- return sc_loop_getTickf(loopId)
-
- def loopSetNumTicks(self,n, loopId=_loop_default):
- sc_loop_setNumTicks(loopId, n)
- self.jamesSux[loopId] = n
-
- def loopGetNumTicks( self, loopId = _loop_default ):
- return self.jamesSux[loopId]
-
- def loopSetTickDuration(self,d, loopId=_loop_default):
- sc_loop_setTickDuration(loopId, d)
- james
-
- def loopDeactivate(self, note = 'all', loopId=_loop_default):
- if note == 'all':
- sc_loop_deactivate_all(loopId)
- else:
- if (Config.DEBUG > 0) : print 'ERROR: deactivating a single note is not implemented'
-
- def loopUpdate(self, note, parameter, value,cmd, loopId=_loop_default):
- page = note.page
- track = note.track
- id = note.id
- if note.cs.mode == 'mini':
- instrument_id_offset = 0
- elif note.cs.mode == 'edit':
- if self.instrumentDB.instId[note.cs.instrumentId].kit != None:
- instrument_id_offset = 0
- else:
- instrument_id_offset = 100
- if (parameter == NoteDB.PARAMETER.ONSET):
- if (Config.DEBUG > 2): print 'INFO: updating onset', (page<<16)+id, value
- sc_loop_updateEvent( loopId, (page<<16)+id, 1, value, cmd)
- elif (parameter == NoteDB.PARAMETER.PITCH):
- if (Config.DEBUG > 2): print 'INFO: updating pitch', (page<<16)+id, value
- pitch = value
- if self.instrumentDB.instId[note.cs.instrumentId].kit != None:
- instrument = self.instrumentDB.instNamed[
- self.instrumentDB.instId[note.cs.instrumentId].kit[pitch]]
- csoundInstId = instrument.csoundInstrumentId
- csoundTable = Config.INSTRUMENT_TABLE_OFFSET + instrument.instrumentId
- if (Config.DEBUG > 2): print 'INFO: updating drum instrument (pitch)', (page<<16)+id, instrument.name, csoundInstId
- sc_loop_updateEvent( loopId, (page<<16)+id, 0, (csoundInstId + instrument_id_offset) + note.track * 0.01, -1 )
- sc_loop_updateEvent( loopId, (page<<16)+id, 7, csoundTable , -1 )
- pitch = 1
- else:
- pitch = GenerationConstants.TRANSPOSE[ pitch - 24 ]
- sc_loop_updateEvent( loopId, (page<<16)+id, 3, pitch, cmd)
- elif (parameter == NoteDB.PARAMETER.AMPLITUDE):
- if (Config.DEBUG > 2): print 'INFO: updating amp', (page<<16)+id, value
- sc_loop_updateEvent( loopId, (page<<16)+id, 5, value, cmd)
- elif (parameter == NoteDB.PARAMETER.DURATION):
- if (Config.DEBUG > 2): print 'INFO: updating duration', (page<<16)+id, value
- sc_loop_updateEvent( loopId, (page<<16)+id, self.DURATION, value, cmd)
- elif (parameter == NoteDB.PARAMETER.INSTRUMENT):
- pitch = note.cs.pitch
- instrument = self.instrumentDB.instId[value]
- if instrument.kit != None:
- instrument = self.instrumentDB.instNamed[instrument.kit[pitch]]
- csoundInstId = instrument.csoundInstrumentId
- csoundTable = Config.INSTRUMENT_TABLE_OFFSET + instrument.instrumentId
- loopStart = instrument.loopStart
- loopEnd = instrument.loopEnd
- crossDur = instrument.crossDur
- if (Config.DEBUG > 2): print 'INFO: updating instrument', (page<<16)+id, instrument.name, csoundInstId
- sc_loop_updateEvent( loopId, (page<<16)+id, 0, (csoundInstId + (track+1) + instrument_id_offset) + note.track * 0.01, cmd )
- sc_loop_updateEvent( loopId, (page<<16)+id, 7, csoundTable, -1 )
- sc_loop_updateEvent( loopId, (page<<16)+id, 12, loopStart, -1 )
- sc_loop_updateEvent( loopId, (page<<16)+id, 13, loopEnd, -1 )
- sc_loop_updateEvent( loopId, (page<<16)+id, 14, crossDur , -1 )
- elif (parameter == NoteDB.PARAMETER.PAN):
- sc_loop_updateEvent( loopId, (page<<16)+id, self.PAN, value, cmd)
- elif (parameter == NoteDB.PARAMETER.REVERB):
- sc_loop_updateEvent( loopId, (page<<16)+id, self.REVERBSEND, value, cmd)
- elif (parameter == NoteDB.PARAMETER.ATTACK):
- sc_loop_updateEvent( loopId, (page<<16)+id, self.ATTACK, value, cmd)
- elif (parameter == NoteDB.PARAMETER.DECAY):
- sc_loop_updateEvent( loopId, (page<<16)+id, self.DECAY, value, cmd)
- elif (parameter == NoteDB.PARAMETER.FILTERTYPE):
- sc_loop_updateEvent( loopId, (page<<16)+id, self.FILTERTYPE, value, cmd)
- elif (parameter == NoteDB.PARAMETER.FILTERCUTOFF):
- sc_loop_updateEvent( loopId, (page<<16)+id, self.FILTERCUTOFF, value, cmd)
- elif (parameter == NoteDB.PARAMETER.INSTRUMENT2):
- sc_loop_updateEvent( loopId, (page<<16)+id, self.INSTRUMENT2, value, cmd)
- else:
- if (Config.DEBUG > 0): print 'ERROR: loopUpdate(): unsupported parameter change'
-
- def loopPlay(self, dbnote, active, storage=_new_note_array(),
- loopId=_loop_default ):
- qid = (dbnote.page << 16) + dbnote.id
- sc_loop_addScoreEvent( loopId, qid, 1, active, 'i',
- self.csnote_to_array( dbnote.cs, storage))
-
- def play(self, csnote, secs_per_tick, storage=_new_note_array()):
- a = self.csnote_to_array(csnote, storage)
- a[self.DURATION] = a[self.DURATION] * secs_per_tick
- a[self.ATTACK] = max(a[self.ATTACK]*a[self.DURATION], 0.002)
- a[self.DECAY] = max(a[self.DECAY]*a[self.DURATION], 0.002)
- sc_scoreEvent( 'i', a)
-
- def csnote_to_array(self, csnote, storage):
- return self._csnote_to_array1(storage,
- csnote.onset,
- csnote.pitch,
- csnote.amplitude,
- csnote.pan,
- csnote.duration,
- csnote.trackId,
- csnote.attack,
- csnote.decay,
- csnote.reverbSend,
- csnote.filterType,
- csnote.filterCutoff,
- csnote.tied,
- csnote.instrumentId,
- csnote.mode,
- csnote.instrumentId2 )
-
- def _csnote_to_array1( self, storage, onset, pitch, amplitude, pan, duration,
- trackId, attack, decay, reverbSend, filterType, filterCutoff,
- tied, instrumentId, mode, instrumentId2 = -1):
-
- rval=storage
- instrument = self.instrumentDB.instId[instrumentId]
-
- if instrument.volatile != None:
- sound = os.path.join(Config.DATA_DIR, instrument.name)
- if os.path.isfile(sound):
- st_mtime = os.stat(sound).st_mtime
- if st_mtime != instrument.volatile:
- instrument.volatile = st_mtime
- loadedInstruments.remove(instrument.name)
- self.load_instrument(instrument.name)
- time.sleep(0.2)
-
- if instrument.kit != None:
- instrument = self.instrumentDB.instNamed[instrument.kit[pitch]]
- pitch = 1
- time_in_ticks = 0
- else:
- pitch = GenerationConstants.TRANSPOSE[ pitch - 24 ]
- time_in_ticks = 1
-
- instrument_id_offset = 0
- # condition for tied notes
- if instrument.csoundInstrumentId == Config.INST_TIED:
- if tied:
- if mode == 'mini':
- duration = -1
- instrument_id_offset = 0
- elif mode == 'edit':
- instrument_id_offset = 0
- if duration < 0:
- duration = -1
- else:
- if mode == 'mini':
- instrument_id_offset = 0
- elif mode == 'edit':
- instrument_id_offset = 100
-
- if instrument.csoundInstrumentId == Config.INST_SIMP:
- if mode == 'mini':
- instrument_id_offset = 0
- elif mode == 'edit':
- if instrument.name[0:4] == 'drum':
- instrument_id_offset = 0
- else:
- instrument_id_offset = 100
-
- amplitude = amplitude / sqrt(pitch) * instrument.ampScale
- rval[0] = (instrument.csoundInstrumentId + \
- (trackId+1) + instrument_id_offset) + trackId * 0.01
- rval[1] = onset
- rval[2] = duration
- rval[3] = pitch
- rval[4] = reverbSend
- rval[5] = amplitude
- rval[6] = pan
- rval[7] = Config.INSTRUMENT_TABLE_OFFSET + instrument.instrumentId
- rval[8] = attack
- rval[9] = decay
- rval[10]= filterType
- rval[11]= filterCutoff
- rval[12]= float(instrument.loopStart)
- rval[13]= float(instrument.loopEnd)
- rval[14]= float(instrument.crossDur)
-
- if instrumentId2 != -1:
- instrument2 = self.instrumentDB.instId[instrumentId2]
- csInstrumentId2 = (instrument2.csoundInstrumentId + 100) * 0.0001
- rval[15] = Config.INSTRUMENT_TABLE_OFFSET + instrumentId2 + csInstrumentId2
- rval[16] = instrument2.loopStart
- rval[17] = instrument2.loopEnd
- rval[18] = instrument2.crossDur
- else:
- rval[15] = -1
- rval[16] = 0
- rval[17] = 0
- rval[18] = 0
-
- return rval
-
-_Client = None
-
-def new_csound_client():
- global _Client
- if _Client == None:
- _Client = _CSoundClientPlugin()
- _Client.connect(True)
- _Client.setMasterVolume(100.0)
- #_Client.load_instruments()
- time.sleep(0.2)
- return _Client
diff --git a/TamTamSynthLab.activity/common/Util/CSoundNote.py b/TamTamSynthLab.activity/common/Util/CSoundNote.py
deleted file mode 100644
index a188a62..0000000
--- a/TamTamSynthLab.activity/common/Util/CSoundNote.py
+++ /dev/null
@@ -1,80 +0,0 @@
-import common.Config as Config
-import common.Util.InstrumentDB as InstrumentDB
-
-class CSoundNote :
- def __init__( self,
- onset,
- pitch,
- amplitude,
- pan,
- duration,
- trackId,
- instrumentId = 1, #self.instrumentDB.instNamed["flute"].instrumentId,
- attack = 0.005,
- decay = 0.098,
- reverbSend = 0.1,
- filterType = 0,
- filterCutoff = 1000,
- tied = False,
- mode = 'edit',
- instrumentId2 = -1 ):
-
- self.instrumentDB = InstrumentDB.getRef()
-
- self.onset = onset
- self.pitch = pitch
- self.amplitude = amplitude
- self.pan = pan
- self.duration = duration
- self.trackId = trackId
- self.instrumentId = instrumentId
- #temp: catch old code trying to pass in instrument names here
- int(instrumentId)
- self.attack = attack
- self.decay = decay
- self.reverbSend = reverbSend
- self.filterType = filterType
- self.filterCutoff = filterCutoff
- self.tied = tied
- self.mode = mode
- self.instrumentId2 = instrumentId2
-
- def clone( self ):
- return CSoundNote( self.onset, self.pitch, self.amplitude, self.pan,
- self.duration, self.trackId, self.instrumentId,
- self.attack, self.decay, self.reverbSend,
- self.filterType, self.filterCutoff, self.tied,
- self.mode, self.instrumentId2 )
-
- def __getstate__unused(self):
- return {'onset': self.onset,
- 'pitch': self.pitch,
- 'amplitude': self.amplitude,
- 'pan': self.pan,
- 'duration': self.duration,
- 'trackId': self.trackId,
- 'instrumentId': self.instrumentId,
- 'attack': self.attack,
- 'decay': self.decay,
- 'reverbSend': self.reverbSend,
- 'filterType': self.filterType,
- 'filterCutoff': self.filterCutoff,
- 'tied': self.tied,
- 'mode': self.mode }
-
- def __setstate__unused(self,dict):
- self.onset = dict['onset']
- self.pitch = dict['pitch']
- self.amplitude = dict['amplitude']
- self.pan = dict['pan']
- self.duration = dict['duration']
- self.trackId = dict['trackId']
- self.instrumentId = dict['instrumentId']
- self.attack = dict['attack']
- self.decay = dict['decay']
- self.reverbSend = dict['reverbSend']
- self.filterType = dict['filterType']
- self.filterCutoff = dict['filterCutoff']
- self.tied = dict['tied']
- self.mode = dict['mode']
- self.nchanges = 0
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/Makefile b/TamTamSynthLab.activity/common/Util/Clooper/Makefile
deleted file mode 100644
index f82d475..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-CC=gcc
-
-CSOUND_ARCH = $(shell arch | grep 64 >/dev/null && echo linux64 || echo linux32)
-CSOUND_VERSION = $(shell csound --version 2>&1 | grep -o "Csound version [0-9]\+\.[0-9]\+" | awk '{print $$3}' | sed s/\\.//g)
-LIB_NAME = $(CSOUND_ARCH)_$(CSOUND_VERSION)
-
-CXXFLAGS = $(shell python-config --cflags) \
- -Wall -Werror -fPIC -O2 -finline
-LDFLAGS+= $(python-config --libs) \
- -lasound -lcsound
-
-all : aclient.so
- rm -rf $(LIB_NAME)
- mkdir $(LIB_NAME)
- mv aclient.so $(LIB_NAME)/
- touch $(LIB_NAME)/__init__.py
-
-aclient.so : aclient.cpp audio.cpp
- g++ $(CXXFLAGS) -shared -o $@ $< $(LDFLAGS)
-
-clean :
- rm aclient*.so
-
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/SoundClient.i b/TamTamSynthLab.activity/common/Util/Clooper/SoundClient.i
deleted file mode 100644
index 80d77df..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/SoundClient.i
+++ /dev/null
@@ -1,14 +0,0 @@
-
-%module SClient
-
-%{
-#define SWIG_FILE_WITH_INIT
-#include "SoundClient.h"
-%}
-
-%pythoncode
-%{
-
-%}
-
-%include "SoundClient.h"
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/__init__.py b/TamTamSynthLab.activity/common/Util/Clooper/__init__.py
deleted file mode 100644
index 363fc88..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/__init__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import os
-import sys
-import logging
-
-_sys_path = sys.path
-_root_path = os.path.dirname(__file__)
-
-for i in os.listdir(_root_path):
- path = os.path.join(_root_path, i)
- if (os.path.isdir(path)):
- sys.path = _sys_path + [os.path.join('.', path)]
- try:
- from aclient import *
- logging.debug('use %s blobs' % path)
- _sys_path = None
- break
- except Exception, e:
- logging.debug('skip %s blobs: %s' % (path, e))
-
-if _sys_path:
- raise('cannot find proper binary blobs')
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/aclient.cpp b/TamTamSynthLab.activity/common/Util/Clooper/aclient.cpp
deleted file mode 100644
index 1a8e81b..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/aclient.cpp
+++ /dev/null
@@ -1,1101 +0,0 @@
-#include <Python.h>
-
-#include <pthread.h>
-#include <stdio.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <sched.h>
-
-#include <vector>
-#include <map>
-#include <cmath>
-
-#include <csound/csound.h>
-#include <alsa/asoundlib.h>
-
-static double pytime(const struct timeval * tv)
-{
- struct timeval t;
- if (!tv)
- {
- tv = &t;
- gettimeofday(&t, NULL);
- }
- return (double) tv->tv_sec + (double) tv->tv_usec / 1000000.0;
-}
-#include "log.cpp"
-#include "audio.cpp"
-
-#define FLOAT_TO_SHORT(in,out) __asm__ __volatile__ ("fistps %0" : "=m" (out) : "t" (in) : "st") ;
-
-int VERBOSE = 3;
-FILE * _debug = NULL;
-struct TamTamSound;
-struct Music;
-TamTamSound * g_tt = NULL;
-Music * g_music = NULL;
-static log_t * g_log = NULL;
-const int STEP_eventMax = 16; //this is the most events that will be queued by a loop per step()
-
-/**
- * Event is the type of event that Clooper puts in the loop buffer.
- * It corresponds to a line of csound that starts with an 'i'
- */
-struct Event
-{
- char type; ///< if this event were listed in a csound file, the line would begin with this letter
- int onset; ///< the onset time of this event (its temporal position)
- bool time_in_ticks; ///< if true, then some parameters will be updated according to the tempo
- bool active; ///< if true, then event() will actually do something
- MYFLT prev_secs_per_tick; ///< normally used for ____, sometimes set to -1 to force recalculation of param[] entries
- MYFLT duration, attack, decay;///< canonical values of some tempo-dependent parameters
- std::vector<MYFLT> param; ///< parameter buffer for csound
-
- Event(char type, MYFLT * p, int param_count, bool in_ticks, bool active)
- : type(type), onset(0), time_in_ticks(in_ticks), active(active), param(param_count)
- {
- assert(param_count >= 4);
- onset = (int) p[1];
- duration = p[2];
- attack = param_count > 8 ? p[8]: 0.0; //attack
- decay = param_count > 9 ? p[9]: 0.0; //decay
- prev_secs_per_tick = -1.0;
- for (int i = 0; i < param_count; ++i) param[i] = p[i];
-
- param[1] = 0.0; //onset
- }
- /*
- bool operator<(const Event &e) const
- {
- return onset < e.onset;
- }
- */
- void ev_print(FILE *f)
- {
- fprintf(f, "INFO: scoreEvent %c ", type);
- for (size_t i = 0; i < param.size(); ++i) fprintf(f, "%lf ", param[i]);
- fprintf(f, "[%s]\n", active ? "active": "inactive");
- }
- /**
- * Update the idx'th param value to have a certain value.
- *
- * Certain of the parameters are linked in strange hack-y ways, as defined by
- * the constructor, and update() (which should be consistent with one another!)
- *
- * These events are for use with the file: TamTam/Resources/univorc.csd.
- * So that file defines how the parameters will be interpreted by csound.
- */
- void update(int idx, MYFLT val)
- {
- if ( (unsigned)idx >= param.size())
- {
- if (_debug && (VERBOSE > 0)) fprintf(_debug, "ERROR: updateEvent request for too-high parameter %i\n", idx);
- return;
- }
- if (time_in_ticks)
- {
- switch(idx)
- {
- case 1: onset = (int) val; break;
- case 2: duration = val; break;
- case 8: attack = val; break;
- case 9: decay = val; break;
- default: param[idx] = val; break;
- }
- prev_secs_per_tick = -1.0; //force recalculation
- }
- else
- {
- param[idx] = val;
- }
- }
- /**
- * An Event instance can be in an active or inactive state. If an Event instance
- * is active, then event() will call a corresponding csoundScoreEvent(). If an
- * Event instance is inactive, then event() is a noop.
- */
- void activate_cmd(int cmd)
- {
- switch(cmd)
- {
- case 0: active = false; break;
- case 1: active = true; break;
- case 2: active = !active; break;
- }
- }
-
- /**
- * Iff this instance is active, this call generates a csound event.
- * Parameters are passed directly as a buffer of floats. If secs_per_tick
- * != prev_secs_per_tick (possibly because prev_secs_per_tick was set to -1
- * by update() ) then this call will do some floating point ops to
- * recalculate the parameter buffer.
- */
- void event(CSOUND * csound, MYFLT secs_per_tick)
- {
- if (!active) return;
-
- if (time_in_ticks && (secs_per_tick != prev_secs_per_tick))
- {
- param[2] = duration * secs_per_tick;
- if (param.size() > 8) param[8] = std::max(0.002f, attack * param[2]);
- if (param.size() > 9) param[9] = std::max(0.002f, decay * param[2]);
- prev_secs_per_tick = secs_per_tick;
- if (_debug && (VERBOSE > 2)) fprintf(_debug, "setting duration to %f\n", param[5]);
- }
- csoundScoreEvent(csound, type, &param[0], param.size());
- }
-};
-
-/**
- *
- * Loop is a repeat-able loop of Event instances.
- * */
-struct Loop
-{
- typedef int onset_t;
- typedef int id_t;
- typedef std::pair<onset_t, Event *> pair_t;
- typedef std::multimap<onset_t, Event *>::iterator iter_t;
- typedef std::map<id_t, iter_t>::iterator idmap_t;
-
- int tick_prev;
- int tickMax;
- MYFLT rtick;
-
- // a container of all events, sorted by onset time
- // used for efficient playback
- std::multimap<onset_t, Event *> ev;
- // the playback head
- std::multimap<onset_t, Event *>::iterator ev_pos;
- // a container of pointers into ev, indexed by note id
- // used for deleting, updating notes
- std::map<id_t, iter_t> idmap;
- int steps;
- int playing; //true means that step() works, else step() is no-op
-
- Loop() : tick_prev(0), tickMax(1), rtick(0.0), ev(), ev_pos(ev.end()), steps(0), playing(0)
- {
- }
- ~Loop()
- {
- //TODO: send these events to a recycling queue, don't erase them
- for (iter_t i = ev.begin(); i != ev.end(); ++i)
- {
- delete i->second;
- }
- }
- void deactivateAll()
- {
- for (iter_t i = ev.begin(); i != ev.end(); ++i)
- {
- i->second->activate_cmd(0);
- }
- }
- MYFLT getTickf()
- {
- return fmod(rtick, (MYFLT)tickMax);
- }
- void setNumTicks(int nticks)
- {
- tickMax = nticks;
- MYFLT fnticks = nticks;
- if (rtick > fnticks)
- {
- rtick = fmodf(rtick, fnticks);
- }
- }
- void setTickf(float t)
- {
- rtick = fmodf(t, (MYFLT) tickMax);
- ev_pos = ev.lower_bound( (int) rtick );
- }
- /** advance in play loop by rtick_inc ticks, possibly generate some
- * csoundScoreEvent calls.
- */
- void step(MYFLT rtick_inc, MYFLT secs_per_tick , CSOUND * csound)
- {
- if (!playing) return;
- rtick += rtick_inc;
- int tick = (int)rtick % tickMax;
- if (tick == tick_prev) return;
-
- int events = 0;
- int loop0 = 0;
- int loop1 = 0;
- if (!ev.empty())
- {
- if (steps && (tick < tick_prev)) // should be true only after the loop wraps (not after insert)
- {
- while (ev_pos != ev.end())
- {
- if (_debug && (VERBOSE > 3)) ev_pos->second->ev_print(_debug);
- if (events < STEP_eventMax) ev_pos->second->event(csound, secs_per_tick);
- ++ev_pos;
- ++events;
- ++loop0;
- }
- ev_pos = ev.begin();
- }
- while ((ev_pos != ev.end()) && (tick >= ev_pos->first))
- {
- if (_debug && (VERBOSE > 3)) ev_pos->second->ev_print(_debug);
- if (events < STEP_eventMax) ev_pos->second->event(csound, secs_per_tick);
- ++ev_pos;
- ++events;
- ++loop1;
- }
- }
- tick_prev = tick;
- if (_debug && (VERBOSE>1) && (events >= STEP_eventMax)) fprintf(_debug, "WARNING: %i/%i events at once (%i, %i)\n", events, (int)ev.size(),loop0,loop1);
- ++steps;
- }
- void addEvent(int id, char type, MYFLT * p, int np, bool in_ticks, bool active)
- {
- Event * e = new Event(type, p, np, in_ticks, active);
-
- idmap_t id_iter = idmap.find(id);
- if (id_iter == idmap.end())
- {
- //this is a new id
- iter_t e_iter = ev.insert(pair_t(e->onset, e));
-
- //TODO: optimize by thinking about whether to do ev_pos = e_iter
- ev_pos = ev.upper_bound( tick_prev );
- idmap[id] = e_iter;
- }
- else
- {
- g_log->printf(1, "%s duplicate note %i\n", __FUNCTION__, id);
- }
- }
- void delEvent(int id)
- {
- idmap_t id_iter = idmap.find(id);
- if (id_iter != idmap.end())
- {
- iter_t e_iter = id_iter->second;//idmap[id];
- if (e_iter == ev_pos) ++ev_pos;
-
- delete e_iter->second;
- ev.erase(e_iter);
- idmap.erase(id_iter);
- }
- else
- {
- g_log->printf( 1, "%s unknown note %i\n", __FUNCTION__, id);
- }
- }
- void updateEvent(int id, int idx, float val, int activate_cmd)
- {
- idmap_t id_iter = idmap.find(id);
- if (id_iter != idmap.end())
- {
- //this is a new id
- iter_t e_iter = id_iter->second;
- Event * e = e_iter->second;
- int onset = e->onset;
- e->update(idx, val);
- e->activate_cmd(activate_cmd);
- if (onset != e->onset)
- {
- ev.erase(e_iter);
-
- e_iter = ev.insert(pair_t(e->onset, e));
-
- //TODO: optimize by thinking about whether to do ev_pos = e_iter
- ev_pos = ev.upper_bound( tick_prev );
- idmap[id] = e_iter;
- }
- }
- else
- {
- g_log->printf(1, "%s unknown note %i\n", __FUNCTION__, id);
- }
- }
- void reset()
- {
- steps = 0;
- }
- void setPlaying(int tf)
- {
- playing = tf;
- }
-};
-
-/** management of loops */
-struct Music
-{
- typedef int loopIdx_t;
- typedef std::map<int, Loop * > eventMap_t;
-
- eventMap_t loop;
- int loop_nextIdx;
- void * mutex; //modification and playing of loops cannot be interwoven
-
- Music() :
- loop(),
- loop_nextIdx(0),
- mutex(csoundCreateMutex(0))
- {
- }
- ~Music()
- {
- for (eventMap_t::iterator i = loop.begin(); i != loop.end(); ++i)
- {
- delete i->second;
- }
- csoundDestroyMutex(mutex);
- }
-
- void step(MYFLT amt, MYFLT secs_per_tick, CSOUND * csound)
- {
- csoundLockMutex(mutex);
- for (eventMap_t::iterator i = loop.begin(); i != loop.end(); ++i)
- {
- i->second->step(amt, secs_per_tick, csound);
- }
- csoundUnlockMutex(mutex);
- }
-
- /** allocate a new loop, and return its index */
- loopIdx_t alloc()
- {
- csoundLockMutex(mutex);
- //find a loop_nextIdx that isn't in loop map already
- while ( loop.find( loop_nextIdx) != loop.end()) ++loop_nextIdx;
- loop[loop_nextIdx] = new Loop();
- csoundUnlockMutex(mutex);
- return loop_nextIdx;
- }
- /** de-allocate a loop */
- void destroy(loopIdx_t loopIdx)
- {
- if (loop.find(loopIdx) != loop.end())
- {
- csoundLockMutex(mutex);
- //TODO: save the note events to a cache for recycling
- delete loop[loopIdx];
- loop.erase(loopIdx);
- csoundUnlockMutex(mutex);
- }
- else
- {
- g_log->printf(1, "%s() called on non-existant loop %i\n", __FUNCTION__ , loopIdx);
- }
- }
- /** set the playing flag of the given loop */
- void playing(loopIdx_t loopIdx, int tf)
- {
- if (loop.find(loopIdx) != loop.end())
- {
- csoundLockMutex(mutex);
- loop[loopIdx]->setPlaying(tf);
- csoundUnlockMutex(mutex);
- }
- else
- {
- g_log->printf(1, "%s() called on non-existant loop %i\n", __FUNCTION__ , loopIdx);
- }
- }
- /** set the playing flag of the given loop */
- void addEvent(loopIdx_t loopIdx, int eventId, char type, MYFLT * p, int np, bool in_ticks, bool active)
- {
- if (loop.find(loopIdx) != loop.end())
- {
- csoundLockMutex(mutex);
- loop[loopIdx]->addEvent(eventId, type, p, np, in_ticks, active);
- csoundUnlockMutex(mutex);
- }
- else
- {
- g_log->printf(1, "%s() called on non-existant loop %i\n", __FUNCTION__ , loopIdx);
- }
- }
- void delEvent(loopIdx_t loopIdx, int eventId)
- {
- if (loop.find(loopIdx) != loop.end())
- {
- csoundLockMutex(mutex);
- loop[loopIdx]->delEvent(eventId);
- csoundUnlockMutex(mutex);
- }
- else
- {
- g_log->printf(1, "%s() called on non-existant loop %i\n", __FUNCTION__ , loopIdx);
- }
- }
- void updateEvent(loopIdx_t loopIdx, int eventId, int pIdx, float pVal, int activate_cmd)
- {
- if (loop.find(loopIdx) != loop.end())
- {
- csoundLockMutex(mutex);
- loop[loopIdx]->updateEvent(eventId, pIdx, pVal, activate_cmd);
- csoundUnlockMutex(mutex);
- }
- else
- {
- g_log->printf(1, "%s() called on non-existant loop %i\n", __FUNCTION__ , loopIdx);
- }
- }
- MYFLT getTickf(loopIdx_t loopIdx)
- {
- if (loop.find(loopIdx) != loop.end())
- {
- return loop[loopIdx]->getTickf();
- }
- else
- {
- g_log->printf(1, "%s() called on non-existant loop %i\n", __FUNCTION__ , loopIdx);
- return 0.0;
- }
- }
- void setTickf(loopIdx_t loopIdx, MYFLT tickf)
- {
- if (loop.find(loopIdx) != loop.end())
- {
- loop[loopIdx]->setTickf(tickf);
- }
- else
- {
- g_log->printf(1, "%s() called on non-existant loop %i\n", __FUNCTION__ , loopIdx);
- }
- }
- void setNumTicks(loopIdx_t loopIdx, int numTicks)
- {
- if (loop.find(loopIdx) != loop.end())
- {
- loop[loopIdx]->setNumTicks(numTicks);
- }
- else
- {
- g_log->printf(1, "%s() called on non-existant loop %i\n", __FUNCTION__ , loopIdx);
- }
- }
- void deactivateAll(loopIdx_t loopIdx)
- {
- if (loop.find(loopIdx) != loop.end())
- {
- loop[loopIdx]->deactivateAll();
- }
- else
- {
- g_log->printf(1, "%s() called on non-existant loop %i\n", __FUNCTION__ , loopIdx);
- }
- }
-
-};
-
-/**
- * The main object of control in the Clooper plugin.
- *
- * This guy controls the sound rendering thread, loads and unloads ALSA,
- * maintains a csound instance, and maintains a subset of notes from the
- * currently-loaded TamTam.
- */
-struct TamTamSound
-{
- /** the id of an running sound-rendering thread, or NULL */
- void * ThreadID;
- /** a flag to tell the thread to continue, or break */
- enum {CONTINUE, STOP} PERF_STATUS;
- /** our csound object, NULL iff there was a problem creating it */
- CSOUND * csound;
- /** our note sources */
- Music music;
-
- MYFLT secs_per_tick;
- MYFLT ticks_per_period;
- MYFLT tick_adjustment; //the default time increment in thread_fn
- MYFLT tick_total;
-
- /** the upsampling ratio from csound */
- unsigned int csound_ksmps;
- snd_pcm_uframes_t csound_frame_rate;
- snd_pcm_uframes_t csound_period_size;
- snd_pcm_uframes_t period0;
- unsigned int period_per_buffer; //should be 2
- int up_ratio; //if the hardware only supports a small integer multiple of our effective samplerate, do a real-time conversion
-
- log_t * ll;
- SystemStuff * sys_stuff;
-
- TamTamSound(log_t * ll, char * orc, snd_pcm_uframes_t period0, unsigned int ppb, int ksmps, int framerate )
- : ThreadID(NULL), PERF_STATUS(STOP), csound(NULL),
- music(),
- ticks_per_period(0.0),
- tick_adjustment(0.0),
- tick_total(0.0),
- csound_ksmps(ksmps), //must agree with the orchestra file
- csound_frame_rate(framerate), //must agree with the orchestra file
- period0(period0),
- period_per_buffer(ppb),
- up_ratio(1),
- ll( ll ),
- sys_stuff(NULL)
- {
- sys_stuff = new SystemStuff(ll);
- if (0 > sys_stuff->open(csound_frame_rate, 4, period0, period_per_buffer))
- {
- return;
- }
- sys_stuff->close(0);
- up_ratio = sys_stuff->rate / csound_frame_rate;
- csound_period_size = (sys_stuff->period_size % up_ratio == 0)
- ? sys_stuff->period_size / up_ratio
- : csound_ksmps * 4;
-
- csound = csoundCreate(NULL);
- int argc=3;
- const char **argv = (const char**)malloc(argc*sizeof(char*));
- argv[0] = "csound";
- argv[1] = "-m0";
- argv[2] = orc;
-
- ll->printf(1, "loading csound orchestra file %s\n", orc);
- //csoundInitialize(&argc, &argv, 0);
- csoundPreCompile(csound);
- csoundSetHostImplementedAudioIO(csound, 1, csound_period_size);
- int result = csoundCompile(csound, argc, (char**)argv);
- if (result)
- {
- csound = NULL;
- ll->printf( "ERROR: csoundCompile of orchestra %s failed with code %i\n", orc, result);
- }
- free(argv);
- setTickDuration(0.05);
- }
- ~TamTamSound()
- {
- if (csound)
- {
- stop();
- ll->printf(2, "Going for csoundDestroy\n");
- csoundDestroy(csound);
- }
- ll->printf(2, "TamTamSound destroyed\n");
- if (sys_stuff) delete sys_stuff;
- delete ll;
- }
- bool good()
- {
- return csound != NULL;
- }
-
- uintptr_t thread_fn()
- {
- assert(csound);
-
- const int nchannels = 2;
- int nloops = 0;
- long int csound_nsamples = csoundGetOutputBufferSize(csound);
- long int csound_nframes = csound_nsamples / nchannels;
-
- ll->printf(2, "INFO: nsamples = %li nframes = %li\n", csound_nsamples, csound_nframes);
-
- if (0 > sys_stuff->open(csound_frame_rate, 4, period0, period_per_buffer))
- {
- ll->printf( "ERROR: failed to open alsa device, thread abort\n");
- return 1;
- }
-
- assert(up_ratio == (signed)(sys_stuff->rate / csound_frame_rate));
-
- bool do_upsample = (signed)sys_stuff->period_size != csound_nframes;
- short *upbuf = new short[ sys_stuff->period_size * nchannels ];
- int cbuf_pos = csound_nframes; // trigger a call to csoundPerformBuffer immediately
- float *cbuf = NULL;
- int up_pos = 0;
- int ratio_pos = 0;
-
- tick_total = 0.0f;
-
- while (PERF_STATUS == CONTINUE)
- {
- if ( do_upsample ) //fill one period of audio buffer data by 0 or more calls to csound
- {
- up_pos = 0;
- int messed = 0;
- short cursample[2]={0,0};
- while(!messed)
- {
- if (cbuf_pos == csound_nframes)
- {
- cbuf_pos = 0;
- if (csoundPerformBuffer(csound)) { messed = 1;break;}
- cbuf = csoundGetOutputBuffer(csound);
- cursample[0] = (signed short int) (cbuf[cbuf_pos*2+0] * (1<<15));
- cursample[1] = (signed short int) (cbuf[cbuf_pos*2+1] * (1<<15));
-
-/*
- cbuf[cbuf_pos*2+0] *= (float) ((1<<14));
- cbuf[cbuf_pos*2+1] *= (float) ((1<<14));
- FLOAT_TO_SHORT( cbuf[cbuf_pos*2+0], cursample[0]);
- FLOAT_TO_SHORT( cbuf[cbuf_pos*2+1], cursample[1]);
-*/
- }
- upbuf[2*up_pos+0] = cursample[0];
- upbuf[2*up_pos+1] = cursample[1];
- if (++ratio_pos == up_ratio)
- {
- ratio_pos = 0;
- ++cbuf_pos;
- cursample[0] = (signed short int) (cbuf[cbuf_pos*2+0] * (1<<15));
- cursample[1] = (signed short int) (cbuf[cbuf_pos*2+1] * (1<<15));
- /*cbuf[cbuf_pos*2+0] *= (float) ((1<<14));
- cbuf[cbuf_pos*2+1] *= (float) ((1<<14));
- FLOAT_TO_SHORT( cbuf[cbuf_pos*2+0], cursample[0]);
- FLOAT_TO_SHORT( cbuf[cbuf_pos*2+1], cursample[1]);
-*/
- }
-
- if (++up_pos == (signed)sys_stuff->period_size) break;
- }
- if (messed || (up_pos != (signed)sys_stuff->period_size)) break;
-
- if (0 > sys_stuff->writebuf(sys_stuff->period_size, upbuf)) break;
- }
- else //fill one period of audio directly from csound
- {
- if (csoundPerformBuffer(csound)) break;
- cbuf = csoundGetOutputBuffer(csound);
- for (int i = 0; i < csound_nframes * nchannels; ++i)
- {
- cbuf[i] *= (float) ((1<<15)-100.0f);
- FLOAT_TO_SHORT( cbuf[i], upbuf[i]);
- }
- if (0 > sys_stuff->writebuf(csound_nframes,upbuf)) break;
- }
-
- if (tick_adjustment > - ticks_per_period)
- {
- MYFLT tick_inc = ticks_per_period + tick_adjustment;
- music.step( tick_inc, secs_per_tick, csound);
- tick_adjustment = 0.0;
- tick_total += tick_inc;
- }
- else
- {
- tick_adjustment += ticks_per_period;
- }
- ++nloops;
- }
-
- sys_stuff->close(1);
- delete [] upbuf;
- ll->printf(2, "INFO: performance thread returning 0\n");
- return 0;
- }
- static uintptr_t csThread(void *clientData)
- {
- return ((TamTamSound*)clientData)->thread_fn();
- }
- int start(int )
- {
- if (!csound) {
- ll->printf(1, "skipping %s, csound==NULL\n", __FUNCTION__);
- return 1;
- }
- if (!ThreadID)
- {
- PERF_STATUS = CONTINUE;
- ThreadID = csoundCreateThread(csThread, (void*)this);
- ll->printf( "INFO(%s:%i) aclient launching performance thread (%p)\n", __FILE__, __LINE__, ThreadID );
- return 0;
- }
- ll->printf( "INFO(%s:%i) skipping duplicate request to launch a thread\n", __FILE__, __LINE__ );
- return 1;
- }
- int stop()
- {
- if (!csound) {
- ll->printf(1, "skipping %s, csound==NULL\n", __FUNCTION__);
- return 1;
- }
- if (ThreadID)
- {
- PERF_STATUS = STOP;
- ll->printf( "INFO(%s:%i) aclient joining performance thread\n", __FILE__, __LINE__ );
- uintptr_t rval = csoundJoinThread(ThreadID);
- ll->printf( "INFO(%s:%i) ... joined\n", __FILE__, __LINE__ );
- if (rval) ll->printf( "WARNING: thread returned %zu\n", rval);
- ThreadID = NULL;
- return 0;
- }
- return 1;
- }
-
- /** pass an array event straight through to csound. only works if perf. thread is running */
- void scoreEvent(char type, MYFLT * p, int np)
- {
- if (!csound) {
- ll->printf(1, "skipping %s, csound==NULL\n", __FUNCTION__);
- return;
- }
- if (!ThreadID)
- {
- if (_debug && (VERBOSE > 1)) fprintf(_debug, "skipping %s, ThreadID==NULL\n", __FUNCTION__);
- return ;
- }
- if (_debug && (VERBOSE > 2))
- {
- fprintf(_debug, "INFO: scoreEvent %c ", type);
- for (int i = 0; i < np; ++i) fprintf(_debug, "%lf ", p[i]);
- fprintf(_debug, "\n");
- }
- csoundScoreEvent(csound, type, p, np);
- }
- /** pass a string event straight through to csound. only works if perf. thread is running */
- void inputMessage(const char * msg)
- {
- if (!csound) {
- ll->printf(1, "skipping %s, csound==NULL\n", __FUNCTION__);
- return;
- }
- if (!ThreadID)
- {
- if (_debug && (VERBOSE > 1)) fprintf(_debug, "skipping %s, ThreadID==NULL\n", __FUNCTION__);
- return ;
- }
- if (_debug &&(VERBOSE > 3)) fprintf(_debug, "%s\n", msg);
- csoundInputMessage(csound, msg);
- }
- /** pass a setChannel command through to csound. only works if perf. thread is running */
- void setChannel(const char * name, MYFLT vol)
- {
- if (!csound) {
- ll->printf(1, "skipping %s, csound==NULL\n", __FUNCTION__);
- return;
- }
- if (!ThreadID)
- {
- if (_debug && (VERBOSE > 1)) fprintf(_debug, "skipping %s, ThreadID==NULL\n", __FUNCTION__);
- return ;
- }
- MYFLT *p;
- if (!(csoundGetChannelPtr(csound, &p, name, CSOUND_CONTROL_CHANNEL | CSOUND_INPUT_CHANNEL)))
- *p = (MYFLT) vol;
- else
- {
- if (_debug && (VERBOSE >0)) fprintf(_debug, "ERROR: failed to set channel: %s\n", name);
- }
- }
-
- /** adjust the global tick value by this much */
- void adjustTick(MYFLT dtick)
- {
- tick_adjustment += dtick;
- }
- void setTickDuration(MYFLT d )
- {
- secs_per_tick = d;
- ticks_per_period = csound_period_size / ( secs_per_tick * csound_frame_rate);
- ll->printf( 3, "INFO: duration %lf := ticks_per_period %lf\n", secs_per_tick , ticks_per_period);
- }
- MYFLT getTickf()
- {
- return tick_total + tick_adjustment;
- }
-};
-
-
-static void cleanup(void)
-{
- if (g_tt)
- {
- delete g_tt;
- g_tt = NULL;
- }
-}
-
-#define DECL(s) static PyObject * s(PyObject * self, PyObject *args)
-#define RetNone Py_INCREF(Py_None); return Py_None;
-
-//call once at end
-DECL(sc_destroy)
-{
- if (!PyArg_ParseTuple(args, ""))
- {
- return NULL;
- }
- if (g_tt)
- {
- delete g_tt;
- g_tt = NULL;
- if (_debug) fclose(_debug);
- }
- RetNone;
-}
-//call once at startup, should return 0
-DECL(sc_initialize) //(char * csd)
-{
- char * str;
- char * log_file;
- int period, ppb, ksmps, framerate;
- if (!PyArg_ParseTuple(args, "ssiiiii", &str, &log_file, &period, &ppb, &VERBOSE, &ksmps, &framerate ))
- {
- return NULL;
- }
- if ( log_file[0] )
- {
- _debug = fopen(log_file,"w");
- if (_debug==NULL)
- {
- fprintf(stderr, "WARNING: fopen(%s) failed, logging to stderr\n", log_file);
- _debug = stderr;
- }
- }
- else
- {
- _debug = NULL;
- fprintf(stderr, "Logging disabled on purpose\n");
- }
- g_log = new log_t(_debug, VERBOSE);
- g_tt = new TamTamSound(g_log, str, period, ppb, ksmps, framerate);
- g_music = & g_tt->music;
- atexit(&cleanup);
- if (g_tt->good())
- return Py_BuildValue("i", 0);
- else
- return Py_BuildValue("i", -1);
-}
-//compile the score, connect to device, start a sound rendering thread
-DECL(sc_start)
-{
- int ppb;
- if (!PyArg_ParseTuple(args, "i", &ppb ))
- {
- return NULL;
- }
- return Py_BuildValue("i", g_tt->start(ppb));
-}
-//stop csound rendering thread, disconnect from sound device, clear tables.
-DECL(sc_stop)
-{
- if (!PyArg_ParseTuple(args, "" ))
- {
- return NULL;
- }
- return Py_BuildValue("i", g_tt->stop());
-}
-DECL(sc_scoreEvent) //(char type, farray param)
-{
- char ev_type;
- PyObject *o;
- if (!PyArg_ParseTuple(args, "cO", &ev_type, &o ))
- {
- return NULL;
- }
- if (o->ob_type
- && o->ob_type->tp_as_buffer
- && (1 == o->ob_type->tp_as_buffer->bf_getsegcount(o, NULL)))
- {
- if (o->ob_type->tp_as_buffer->bf_getreadbuffer)
- {
- void * ptr;
- size_t len;
- len = o->ob_type->tp_as_buffer->bf_getreadbuffer(o, 0, &ptr);
- float * fptr = (float*)ptr;
- size_t flen = len / sizeof(float);
- g_tt->scoreEvent(ev_type, fptr, flen);
-
- Py_INCREF(Py_None);
- return Py_None;
- }
- else
- {
- assert(!"asdf");
- }
- }
- assert(!"not reached");
- return NULL;
-}
-DECL (sc_inputMessage) //(const char *msg)
-{
- char * msg;
- if (!PyArg_ParseTuple(args, "s", &msg ))
- {
- return NULL;
- }
- g_tt->inputMessage(msg);
- RetNone;
-}
-DECL(sc_setChannel) //(string name, float value)
-{
- const char * str;
- float v;
- if (!PyArg_ParseTuple(args, "sf", &str,&v))
- {
- return NULL;
- }
- g_tt->setChannel(str,v);
- Py_INCREF(Py_None);
- return Py_None;
-}
-DECL(sc_getTickf) // () -> float
-{
- if (!PyArg_ParseTuple(args, ""))
- {
- return NULL;
- }
- return Py_BuildValue("f", g_tt->getTickf());
-}
-DECL(sc_adjustTick) // (MYFLT ntick)
-{
- float spt;
- if (!PyArg_ParseTuple(args, "f", &spt ))
- {
- return NULL;
- }
- g_tt->adjustTick(spt);
- RetNone;
-}
-DECL(sc_setTickDuration) // (MYFLT secs_per_tick)
-{
- float spt;
- if (!PyArg_ParseTuple(args, "f", &spt ))
- {
- return NULL;
- }
- g_tt->setTickDuration(spt);
- RetNone;
-}
-DECL(sc_loop_new) // () -> int
-{
- if (!PyArg_ParseTuple(args, "" )) return NULL;
- return Py_BuildValue("i", g_music->alloc());
-}
-DECL(sc_loop_delete) // (int loopIdx)
-{
- int loopIdx;
- if (!PyArg_ParseTuple(args, "i", &loopIdx )) return NULL;
- g_music->destroy(loopIdx);
- RetNone;
-}
-DECL(sc_loop_getTickf) // (int loopIdx) -> float
-{
- int idx;
- if (!PyArg_ParseTuple(args, "i", &idx ))
- {
- return NULL;
- }
- return Py_BuildValue("f", g_music->getTickf(idx));
-}
-DECL(sc_loop_setNumTicks) //(int loopIdx, int nticks)
-{
- int loopIdx;
- int nticks;
- if (!PyArg_ParseTuple(args, "ii", &loopIdx, &nticks )) return NULL;
- g_music->setNumTicks(loopIdx, nticks);
- RetNone;
-}
-DECL(sc_loop_setTickf) // (int loopIdx, float pos)
-{
- int loopIdx;
- MYFLT pos;
- if (!PyArg_ParseTuple(args, "if", &loopIdx, &pos )) return NULL;
- g_music->setTickf(loopIdx, pos);
- RetNone;
-}
-DECL(sc_loop_addScoreEvent) // (int loopIdx, int id, int duration_in_ticks, char type, farray param)
-{
- int loopIdx, qid, inticks, active;
- char ev_type;
- PyObject *o;
- if (!PyArg_ParseTuple(args, "iiiicO", &loopIdx, &qid, &inticks, &active, &ev_type, &o )) return NULL;
-
- if (o->ob_type
- && o->ob_type->tp_as_buffer
- && (1 == o->ob_type->tp_as_buffer->bf_getsegcount(o, NULL)))
- {
- if (o->ob_type->tp_as_buffer->bf_getreadbuffer)
- {
- void * ptr;
- size_t len;
- len = o->ob_type->tp_as_buffer->bf_getreadbuffer(o, 0, &ptr);
- float * fptr = (float*)ptr;
- size_t flen = len / sizeof(float);
-
- g_music->addEvent(loopIdx, qid, ev_type, fptr, flen, inticks, active);
-
- RetNone;
- }
- else
- {
- assert(!"asdf");
- }
- }
- assert(!"not reached");
- return NULL;
-}
-DECL(sc_loop_delScoreEvent) // (int loopIdx, int id)
-{
- int loopIdx, id;
- if (!PyArg_ParseTuple(args, "ii", &loopIdx, &id ))
- {
- return NULL;
- }
- g_music->delEvent(loopIdx, id);
- RetNone;
-}
-DECL(sc_loop_updateEvent) // (int loopIdx, int id, int paramIdx, float paramVal, int activate_cmd))
-{
- int loopIdx, eventId;
- int idx;
- float val;
- int cmd;
- if (!PyArg_ParseTuple(args, "iiifi", &loopIdx, &eventId, &idx, &val, &cmd)) return NULL;
- g_music->updateEvent(loopIdx, eventId, idx, val, cmd);
- RetNone;
-}
-DECL(sc_loop_deactivate_all) // (int id)
-{
- int loopIdx;
- if (!PyArg_ParseTuple(args, "i", &loopIdx)) return NULL;
- g_music->deactivateAll(loopIdx);
- RetNone;
-}
-DECL(sc_loop_playing) // (int loopIdx, int tf)
-{
- int loopIdx, tf;
- if (!PyArg_ParseTuple(args, "ii", &loopIdx, &tf )) return NULL;
- g_music->playing(loopIdx, tf);
- RetNone;
-}
-
-#define MDECL(s) {""#s, s, METH_VARARGS, "documentation of "#s"... nothing!"}
-static PyMethodDef SpamMethods[] = {
- MDECL(sc_destroy),
- MDECL(sc_initialize),
- MDECL(sc_start),
- MDECL(sc_stop),
-
- MDECL(sc_setChannel),
- MDECL(sc_inputMessage),
- MDECL(sc_scoreEvent),
-
- MDECL(sc_getTickf),
- MDECL(sc_adjustTick),
- MDECL(sc_setTickDuration),
-
- MDECL(sc_loop_new),
- MDECL(sc_loop_delete),
- MDECL(sc_loop_getTickf),
- MDECL(sc_loop_setTickf),
- MDECL(sc_loop_setNumTicks),
- MDECL(sc_loop_delScoreEvent),
- MDECL(sc_loop_addScoreEvent),
- MDECL(sc_loop_updateEvent),
- MDECL(sc_loop_deactivate_all),
- MDECL(sc_loop_playing),
- {NULL, NULL, 0, NULL} /*end of list */
-};
-
-PyMODINIT_FUNC
-initaclient(void)
-{
- (void) Py_InitModule("aclient", SpamMethods);
-}
-
-
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/audio.cpp b/TamTamSynthLab.activity/common/Util/Clooper/audio.cpp
deleted file mode 100644
index 6f5a271..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/audio.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-#ifndef AUDIO_HXX
-#define AUDIO_HXX
-
-/*
- * Latency test program
- *
- * Author: Jaroslav Kysela <perex@suse.cz>
- *
- * This small demo program can be used for measuring latency between
- * capture and playback. This latency is measured from driver (diff when
- * playback and capture was started). Scheduler is set to SCHED_RR.
- *
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sched.h>
-#include <errno.h>
-#include <getopt.h>
-#include <sys/time.h>
-#include <math.h>
-
-#include <string>
-#include <alsa/asoundlib.h>
-
-#define ERROR_HERE ll->printf("ERROR_HERE: %s %i\n", __FILE__, __LINE__)
-
-struct SystemStuff
-{
- log_t * ll;
-
- snd_pcm_t *phandle;
- snd_pcm_uframes_t period_size;
- unsigned int rate;
- const snd_pcm_format_t sample_format;
- SystemStuff(log_t * ll) : ll(ll), phandle(NULL), period_size(0), rate(0), sample_format(SND_PCM_FORMAT_S16)
- {
- }
- ~SystemStuff()
- {
- if (phandle) close(0);
- }
-
- void setscheduler(void)
- {
- struct sched_param sched_param;
-
- if (sched_getparam(0, &sched_param) < 0) {
- ll->printf( "Scheduler getparam failed...\n");
- return;
- }
- sched_param.sched_priority = sched_get_priority_max(SCHED_RR);
- if (!sched_setscheduler(0, SCHED_RR, &sched_param)) {
- ll->printf( "Scheduler set to Round Robin with priority %i...\n", sched_param.sched_priority);
- return;
- }
- ll->printf( "!!!Scheduler set to Round Robin with priority %i FAILED!!!\n", sched_param.sched_priority);
- }
-
- int open(unsigned int rate0, int upsample_max, snd_pcm_uframes_t period0, unsigned int p_per_buff)
- {
- snd_pcm_hw_params_t *hw;
-
- if (phandle)
- {
- ll->printf( "ERROR: open called twice! First close the sound device\n");
- return -1;
- }
-
- if ( 0 > snd_pcm_open(&phandle, "default", SND_PCM_STREAM_PLAYBACK, 0)) { ERROR_HERE; return -1; }
- if ( 0 > snd_pcm_hw_params_malloc(&hw)) { ERROR_HERE; snd_pcm_close(phandle); phandle = NULL; return -1; }
-
- //now we can be a bit flexible with the buffer size and the sample-rate...
-
- int upsample;
- for (upsample = 1; upsample < upsample_max; ++upsample)
- {
- rate = rate0 * upsample;
-
- if ( 0 > snd_pcm_hw_params_any(phandle, hw)) { ERROR_HERE; goto open_error;}
-
- //first do the compulsory steps... interleaved float, 2 channel
- if ( 0 > snd_pcm_hw_params_set_rate_resample(phandle, hw, 0)) { ERROR_HERE; goto open_error;}
- if ( 0 > snd_pcm_hw_params_test_access(phandle, hw, SND_PCM_ACCESS_RW_INTERLEAVED)){ ERROR_HERE; goto open_error;}
- if ( 0 > snd_pcm_hw_params_set_access(phandle, hw, SND_PCM_ACCESS_RW_INTERLEAVED)){ ERROR_HERE; goto open_error;}
- if ( 0 > snd_pcm_hw_params_test_format(phandle, hw, sample_format)) { ERROR_HERE; goto open_error;}
- if ( 0 > snd_pcm_hw_params_set_format(phandle, hw, sample_format)) { ERROR_HERE; goto open_error;}
- if ( 0 > snd_pcm_hw_params_set_channels(phandle, hw, 2)) { ERROR_HERE; goto open_error;}
-
- if ( snd_pcm_hw_params_set_rate_near(phandle, hw, &rate, 0))
- {
- ll->printf("test_rate failed( %i\n", rate);
- continue;
- }
- else
- {
- ll->printf(1, "success! setting rate : %i\n", rate);
-
- snd_pcm_uframes_t minb=0, maxb= 0;
- int mind=0, maxd=0;
- snd_pcm_hw_params_get_period_size_min(hw, &minb,&mind);
- snd_pcm_hw_params_get_period_size_max(hw, &maxb,&maxd);
- ll->printf(2, "FYI: period size range is [%li/%i,%li/%i]\n", minb,mind, maxb, maxd);
-
- if ((mind != 0) || (maxd == 0))
- {
- ll->printf(2, "watch out, mind and maxd non-zero... you didn't set rate_resample to 0 did you...\n");
- }
-
- if (period0 < minb)
- {
- ll->printf(1, "requested period size (%li) < min (%li), adjusting to min\n", period_size, minb);
- period_size = minb;
- }
- else if (period0 > maxb)
- {
- ll->printf(2, "requested period size (%li) < max (%li), adjusting to min\n", period_size, maxb);
- period_size = maxb;
- }
- else
- {
- period_size = period0;
- }
-
- ll->printf(1, "testing period size : %li\n", period_size);
- if ( 0 > snd_pcm_hw_params_test_period_size(phandle, hw, period_size, 0)){ ERROR_HERE; goto open_error;}
-
-
- ll->printf(1, "setting period size : %li\n", period_size);
- if ( 0 > snd_pcm_hw_params_set_period_size_near(phandle, hw, &period_size, 0)){ ERROR_HERE; goto open_error;}
-
- ll->printf(1, "setting buffer size : %i * %li = %li\n", p_per_buff, period_size, p_per_buff * period_size);
- snd_pcm_uframes_t buff_size = p_per_buff * period_size;
- if ( 0 > snd_pcm_hw_params_set_buffer_size_near(phandle, hw, &buff_size)) { ERROR_HERE; goto open_error;}
-
- break;
- }
- }
-
- if (upsample_max == upsample) { ERROR_HERE; goto open_error; }
-
- if (0 > snd_pcm_hw_params(phandle, hw)) { ERROR_HERE; goto open_error; }
-
- snd_pcm_hw_params_free (hw);
- return 0;
-
-open_error:
- snd_pcm_hw_params_free (hw);
- snd_pcm_close(phandle);
- phandle = NULL;
- return -1;
- }
- void close(int drain = 0)
- {
- if (!phandle)
- {
- ll->printf(0, "WARNING: attempt to close already-closed pcm\n");
- return;
- }
- ll->printf(1, "INFO: closing phandle device\n");
- if (drain) snd_pcm_drain(phandle);
- snd_pcm_close(phandle);
- phandle = NULL;
- }
- void prepare()
- {
- if (!phandle)
- {
- ll->printf(0, "ERROR: attempt to prepare a closed pcm\n");
- return;
- }
- if (0 > snd_pcm_prepare(phandle)) { ERROR_HERE; }
- }
- int writebuf(snd_pcm_uframes_t frame_count, short int * frame_data)
- {
- if (!phandle)
- {
- ll->printf(0, "ERROR: attempt to write a closed phandle\n");
- return -1;
- }
- int err = 0;
- while (frame_count > 0) {
- err = snd_pcm_writei (phandle, frame_data, frame_count );
- if (err == (signed)frame_count) return 0; //success
- if (err == -EAGAIN)
- continue;
- if (err < 0)
- break;
- frame_data += err * 4;
- frame_count -= err;
- }
-
- if (err >= 0)
- {
- ll->printf(0, "madness on line %s:%i\n", __FILE__, __LINE__);
- return -1;
- }
-
- const char * msg = NULL;
- snd_pcm_state_t state = snd_pcm_state(phandle);
- switch (state)
- {
- case SND_PCM_STATE_OPEN: msg = "open"; break;
- case SND_PCM_STATE_SETUP: msg = "setup"; break;
- case SND_PCM_STATE_PREPARED:msg = "prepared"; break;
- case SND_PCM_STATE_RUNNING: msg = "running"; break;
- case SND_PCM_STATE_XRUN: msg = "xrun"; break;
- case SND_PCM_STATE_DRAINING: msg = "draining"; break;
- case SND_PCM_STATE_PAUSED: msg = "paused"; break;
- case SND_PCM_STATE_SUSPENDED: msg = "suspended"; break;
- case SND_PCM_STATE_DISCONNECTED: msg = "disconnected"; break;
- }
- ll->printf(1, "WARNING: write failed (%s)\tstate = %s\ttime=%lf\n", snd_strerror (err), msg, pytime(NULL));
- if (0 > snd_pcm_recover(phandle, err, 0)) { ERROR_HERE; return err;}
- if (0 > snd_pcm_prepare(phandle)) { ERROR_HERE; return err;}
- return 1; //warning
- }
-};
-#undef ERROR_HERE
-
-#endif
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/cmd_csound.cpp b/TamTamSynthLab.activity/common/Util/Clooper/cmd_csound.cpp
deleted file mode 100644
index ef94f84..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/cmd_csound.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-
-#include <stdio.h>
-#include <csound/csound.hpp>
-
-#include "SoundClient.h"
-
-int main( int argc, char ** argv)
-{
- int userInput = 200;
- int rval = sc_initialize(argv[1]);
- sc_setMasterVolume(30.0);
-
- while ((userInput != 0) && (rval == 0))
- {
- fprintf(stderr, "Enter a pitch\n");
- scanf("%i", &userInput);
- //sc_instrumentLoad(5083, "/home/olpc/tamtam/Resources/Sounds/sitar");
- scanf("%i", &userInput);
- }
-
- return 0;
-}
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/linux32_508/__init__.py b/TamTamSynthLab.activity/common/Util/Clooper/linux32_508/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/linux32_508/__init__.py
+++ /dev/null
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/linux32_510/__init__.py b/TamTamSynthLab.activity/common/Util/Clooper/linux32_510/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/linux32_510/__init__.py
+++ /dev/null
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/linux64_510/__init__.py b/TamTamSynthLab.activity/common/Util/Clooper/linux64_510/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/linux64_510/__init__.py
+++ /dev/null
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/linux64_511_deb/__init__.py b/TamTamSynthLab.activity/common/Util/Clooper/linux64_511_deb/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/linux64_511_deb/__init__.py
+++ /dev/null
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/log.cpp b/TamTamSynthLab.activity/common/Util/Clooper/log.cpp
deleted file mode 100644
index d4a8c72..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/log.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef LOG_HXX
-#define LOG_HXX
-
-#include <stdarg.h>
-#include <stdio.h>
-
-struct log_t
-{
- FILE * _file;
- int _level;
- int _close;
-
- log_t(const char * logpath, int level = 0) : _file(NULL), _level(level), _close(1)
- {
- _file = fopen(logpath, "w");
- if (!_file)
- {
- fprintf(stderr, "Failed to open log file for writing: %s\n", logpath);
- }
- }
- log_t(FILE * file, int level = 0): _file(file), _level(level), _close(0)
- {
- }
- ~log_t()
- {
- if (_close && _file) fclose(_file);
- }
- void printf( const char * fmt, ... ) __attribute__(( format (printf, 2,3)))
- {
- if (!_file) return;
- va_list ap;
- va_start(ap,fmt);
- ::vfprintf(_file, fmt, ap);
- va_end(ap);
- fflush(_file);
- }
- void printf( int level, const char * fmt, ... ) __attribute__(( format (printf, 3,4)))
- {
- if (level <= _level)
- {
- if (!_file) return;
- fprintf(_file, "L%i:", level);
- va_list ap;
- va_start(ap,fmt);
- ::vfprintf(_file, fmt, ap);
- va_end(ap);
- fflush(_file);
- }
- }
-};
-
-#endif
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/ttest.c b/TamTamSynthLab.activity/common/Util/Clooper/ttest.c
deleted file mode 100644
index 9ff3d85..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/ttest.c
+++ /dev/null
@@ -1,53 +0,0 @@
-
-#include <pthread.h>
-#include <stdio.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-double sleeptime = 0.0;
-int usleep(int);
-static void * threadfn(void * _arg)
-{
- double pytime(const struct timeval * tv)
- {
- return (double) tv->tv_sec + (double) tv->tv_usec / 1000000.0;
- }
- struct timeval tv0, tv1;
- double m = 0.0;
-
- int loops = 0;
-
- while (1)
- {
- gettimeofday(&tv0, 0);
- usleep( (int) (sleeptime * 1000000) );
- gettimeofday(&tv1, 0);
- double t0 = pytime(&tv0);
- double t1 = pytime(&tv1);
- if (t1 - t0 > 1.2 * sleeptime)
- {
- fprintf(stderr, "critical lagginess %lf\n", t1 - t0);
- }
- if (m < t1 - t0)
- {
- m = t1 - t0;
- fprintf(stderr, "maximum lag %lf\n", m);
- }
-
- if ( ( loops % 100 ) == 0 )
- {
- fprintf(stderr, "loop (%lf)\n", t0);
- }
- ++loops;
- }
- return NULL;
-}
-void testtimer(double st)
-{
- pthread_t pth;
- sleeptime = st;
-
- pthread_create( &pth, NULL, &threadfn, NULL );
-}
-
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/ttest.h b/TamTamSynthLab.activity/common/Util/Clooper/ttest.h
deleted file mode 100644
index 111f10c..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/ttest.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _MSL_MATH_H
-#define _MSL_MATH_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void testtimer(double);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/ttest.i b/TamTamSynthLab.activity/common/Util/Clooper/ttest.i
deleted file mode 100644
index 0c88add..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/ttest.i
+++ /dev/null
@@ -1,15 +0,0 @@
-
-%module ttest
-
-%{
-#define SWIG_FILE_WITH_INIT
-#include "ttest.h"
-%}
-
-%pythoncode
-%{
-def somefn(seed, mat):
-
-%}
-
-%include "ttest.h"
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/ttest.py b/TamTamSynthLab.activity/common/Util/Clooper/ttest.py
deleted file mode 100644
index 302c8f3..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/ttest.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 1.3.31
-#
-# Don't modify this file, modify the SWIG interface instead.
-# This file is compatible with both classic and new-style classes.
-
-import _ttest
-import new
-new_instancemethod = new.instancemethod
-try:
- _swig_property = property
-except NameError:
- pass # Python < 2.2 doesn't have 'property'.
-def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
- if (name == "thisown"): return self.this.own(value)
- if (name == "this"):
- if type(value).__name__ == 'PySwigObject':
- self.__dict__[name] = value
- return
- method = class_type.__swig_setmethods__.get(name,None)
- if method: return method(self,value)
- if (not static) or hasattr(self,name):
- self.__dict__[name] = value
- else:
- raise AttributeError("You cannot add attributes to %s" % self)
-
-def _swig_setattr(self,class_type,name,value):
- return _swig_setattr_nondynamic(self,class_type,name,value,0)
-
-def _swig_getattr(self,class_type,name):
- if (name == "thisown"): return self.this.own()
- method = class_type.__swig_getmethods__.get(name,None)
- if method: return method(self)
- raise AttributeError,name
-
-def _swig_repr(self):
- try: strthis = "proxy of " + self.this.__repr__()
- except: strthis = ""
- return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
-
-import types
-try:
- _object = types.ObjectType
- _newclass = 1
-except AttributeError:
- class _object : pass
- _newclass = 0
-del types
-
-
-
-testtimer = _ttest.testtimer
-
-
diff --git a/TamTamSynthLab.activity/common/Util/Clooper/ttest_wrap.c b/TamTamSynthLab.activity/common/Util/Clooper/ttest_wrap.c
deleted file mode 100644
index a073e99..0000000
--- a/TamTamSynthLab.activity/common/Util/Clooper/ttest_wrap.c
+++ /dev/null
@@ -1,3042 +0,0 @@
-/* ----------------------------------------------------------------------------
- * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 1.3.31
- *
- * This file is not intended to be easily readable and contains a number of
- * coding conventions designed to improve portability and efficiency. Do not make
- * changes to this file unless you know what you are doing--modify the SWIG
- * interface file instead.
- * ----------------------------------------------------------------------------- */
-
-#define SWIGPYTHON
-#define SWIG_PYTHON_DIRECTOR_NO_VTABLE
-/* -----------------------------------------------------------------------------
- * This section contains generic SWIG labels for method/variable
- * declarations/attributes, and other compiler dependent labels.
- * ----------------------------------------------------------------------------- */
-
-/* template workaround for compilers that cannot correctly implement the C++ standard */
-#ifndef SWIGTEMPLATEDISAMBIGUATOR
-# if defined(__SUNPRO_CC)
-# if (__SUNPRO_CC <= 0x560)
-# define SWIGTEMPLATEDISAMBIGUATOR template
-# else
-# define SWIGTEMPLATEDISAMBIGUATOR
-# endif
-# else
-# define SWIGTEMPLATEDISAMBIGUATOR
-# endif
-#endif
-
-/* inline attribute */
-#ifndef SWIGINLINE
-# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
-# define SWIGINLINE inline
-# else
-# define SWIGINLINE
-# endif
-#endif
-
-/* attribute recognised by some compilers to avoid 'unused' warnings */
-#ifndef SWIGUNUSED
-# if defined(__GNUC__)
-# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-# define SWIGUNUSED __attribute__ ((__unused__))
-# else
-# define SWIGUNUSED
-# endif
-# elif defined(__ICC)
-# define SWIGUNUSED __attribute__ ((__unused__))
-# else
-# define SWIGUNUSED
-# endif
-#endif
-
-#ifndef SWIGUNUSEDPARM
-# ifdef __cplusplus
-# define SWIGUNUSEDPARM(p)
-# else
-# define SWIGUNUSEDPARM(p) p SWIGUNUSED
-# endif
-#endif
-
-/* internal SWIG method */
-#ifndef SWIGINTERN
-# define SWIGINTERN static SWIGUNUSED
-#endif
-
-/* internal inline SWIG method */
-#ifndef SWIGINTERNINLINE
-# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
-#endif
-
-/* exporting methods */
-#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
-# ifndef GCC_HASCLASSVISIBILITY
-# define GCC_HASCLASSVISIBILITY
-# endif
-#endif
-
-#ifndef SWIGEXPORT
-# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
-# if defined(STATIC_LINKED)
-# define SWIGEXPORT
-# else
-# define SWIGEXPORT __declspec(dllexport)
-# endif
-# else
-# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
-# define SWIGEXPORT __attribute__ ((visibility("default")))
-# else
-# define SWIGEXPORT
-# endif
-# endif
-#endif
-
-/* calling conventions for Windows */
-#ifndef SWIGSTDCALL
-# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
-# define SWIGSTDCALL __stdcall
-# else
-# define SWIGSTDCALL
-# endif
-#endif
-
-/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
-#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
-# define _CRT_SECURE_NO_DEPRECATE
-#endif
-
-
-/* Python.h has to appear first */
-#include <Python.h>
-
-/* -----------------------------------------------------------------------------
- * swigrun.swg
- *
- * This file contains generic CAPI SWIG runtime support for pointer
- * type checking.
- * ----------------------------------------------------------------------------- */
-
-/* This should only be incremented when either the layout of swig_type_info changes,
- or for whatever reason, the runtime changes incompatibly */
-#define SWIG_RUNTIME_VERSION "3"
-
-/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
-#ifdef SWIG_TYPE_TABLE
-# define SWIG_QUOTE_STRING(x) #x
-# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
-# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
-#else
-# define SWIG_TYPE_TABLE_NAME
-#endif
-
-/*
- You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
- creating a static or dynamic library from the swig runtime code.
- In 99.9% of the cases, swig just needs to declare them as 'static'.
-
- But only do this if is strictly necessary, ie, if you have problems
- with your compiler or so.
-*/
-
-#ifndef SWIGRUNTIME
-# define SWIGRUNTIME SWIGINTERN
-#endif
-
-#ifndef SWIGRUNTIMEINLINE
-# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
-#endif
-
-/* Generic buffer size */
-#ifndef SWIG_BUFFER_SIZE
-# define SWIG_BUFFER_SIZE 1024
-#endif
-
-/* Flags for pointer conversions */
-#define SWIG_POINTER_DISOWN 0x1
-
-/* Flags for new pointer objects */
-#define SWIG_POINTER_OWN 0x1
-
-
-/*
- Flags/methods for returning states.
-
- The swig conversion methods, as ConvertPtr, return and integer
- that tells if the conversion was successful or not. And if not,
- an error code can be returned (see swigerrors.swg for the codes).
-
- Use the following macros/flags to set or process the returning
- states.
-
- In old swig versions, you usually write code as:
-
- if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
- // success code
- } else {
- //fail code
- }
-
- Now you can be more explicit as:
-
- int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
- if (SWIG_IsOK(res)) {
- // success code
- } else {
- // fail code
- }
-
- that seems to be the same, but now you can also do
-
- Type *ptr;
- int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
- if (SWIG_IsOK(res)) {
- // success code
- if (SWIG_IsNewObj(res) {
- ...
- delete *ptr;
- } else {
- ...
- }
- } else {
- // fail code
- }
-
- I.e., now SWIG_ConvertPtr can return new objects and you can
- identify the case and take care of the deallocation. Of course that
- requires also to SWIG_ConvertPtr to return new result values, as
-
- int SWIG_ConvertPtr(obj, ptr,...) {
- if (<obj is ok>) {
- if (<need new object>) {
- *ptr = <ptr to new allocated object>;
- return SWIG_NEWOBJ;
- } else {
- *ptr = <ptr to old object>;
- return SWIG_OLDOBJ;
- }
- } else {
- return SWIG_BADOBJ;
- }
- }
-
- Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
- more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
- swig errors code.
-
- Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
- allows to return the 'cast rank', for example, if you have this
-
- int food(double)
- int fooi(int);
-
- and you call
-
- food(1) // cast rank '1' (1 -> 1.0)
- fooi(1) // cast rank '0'
-
- just use the SWIG_AddCast()/SWIG_CheckState()
-
-
- */
-#define SWIG_OK (0)
-#define SWIG_ERROR (-1)
-#define SWIG_IsOK(r) (r >= 0)
-#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError)
-
-/* The CastRankLimit says how many bits are used for the cast rank */
-#define SWIG_CASTRANKLIMIT (1 << 8)
-/* The NewMask denotes the object was created (using new/malloc) */
-#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1)
-/* The TmpMask is for in/out typemaps that use temporal objects */
-#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1)
-/* Simple returning values */
-#define SWIG_BADOBJ (SWIG_ERROR)
-#define SWIG_OLDOBJ (SWIG_OK)
-#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK)
-#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK)
-/* Check, add and del mask methods */
-#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
-#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
-#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
-#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
-#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
-#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
-
-
-/* Cast-Rank Mode */
-#if defined(SWIG_CASTRANK_MODE)
-# ifndef SWIG_TypeRank
-# define SWIG_TypeRank unsigned long
-# endif
-# ifndef SWIG_MAXCASTRANK /* Default cast allowed */
-# define SWIG_MAXCASTRANK (2)
-# endif
-# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1)
-# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK)
-SWIGINTERNINLINE int SWIG_AddCast(int r) {
- return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
-}
-SWIGINTERNINLINE int SWIG_CheckState(int r) {
- return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0;
-}
-#else /* no cast-rank mode */
-# define SWIG_AddCast
-# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
-#endif
-
-
-
-
-#include <string.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void *(*swig_converter_func)(void *);
-typedef struct swig_type_info *(*swig_dycast_func)(void **);
-
-/* Structure to store inforomation on one type */
-typedef struct swig_type_info {
- const char *name; /* mangled name of this type */
- const char *str; /* human readable name of this type */
- swig_dycast_func dcast; /* dynamic cast function down a hierarchy */
- struct swig_cast_info *cast; /* linked list of types that can cast into this type */
- void *clientdata; /* language specific type data */
- int owndata; /* flag if the structure owns the clientdata */
-} swig_type_info;
-
-/* Structure to store a type and conversion function used for casting */
-typedef struct swig_cast_info {
- swig_type_info *type; /* pointer to type that is equivalent to this type */
- swig_converter_func converter; /* function to cast the void pointers */
- struct swig_cast_info *next; /* pointer to next cast in linked list */
- struct swig_cast_info *prev; /* pointer to the previous cast */
-} swig_cast_info;
-
-/* Structure used to store module information
- * Each module generates one structure like this, and the runtime collects
- * all of these structures and stores them in a circularly linked list.*/
-typedef struct swig_module_info {
- swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */
- size_t size; /* Number of types in this module */
- struct swig_module_info *next; /* Pointer to next element in circularly linked list */
- swig_type_info **type_initial; /* Array of initially generated type structures */
- swig_cast_info **cast_initial; /* Array of initially generated casting structures */
- void *clientdata; /* Language specific module data */
-} swig_module_info;
-
-/*
- Compare two type names skipping the space characters, therefore
- "char*" == "char *" and "Class<int>" == "Class<int >", etc.
-
- Return 0 when the two name types are equivalent, as in
- strncmp, but skipping ' '.
-*/
-SWIGRUNTIME int
-SWIG_TypeNameComp(const char *f1, const char *l1,
- const char *f2, const char *l2) {
- for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
- while ((*f1 == ' ') && (f1 != l1)) ++f1;
- while ((*f2 == ' ') && (f2 != l2)) ++f2;
- if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
- }
- return (l1 - f1) - (l2 - f2);
-}
-
-/*
- Check type equivalence in a name list like <name1>|<name2>|...
- Return 0 if not equal, 1 if equal
-*/
-SWIGRUNTIME int
-SWIG_TypeEquiv(const char *nb, const char *tb) {
- int equiv = 0;
- const char* te = tb + strlen(tb);
- const char* ne = nb;
- while (!equiv && *ne) {
- for (nb = ne; *ne; ++ne) {
- if (*ne == '|') break;
- }
- equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
- if (*ne) ++ne;
- }
- return equiv;
-}
-
-/*
- Check type equivalence in a name list like <name1>|<name2>|...
- Return 0 if equal, -1 if nb < tb, 1 if nb > tb
-*/
-SWIGRUNTIME int
-SWIG_TypeCompare(const char *nb, const char *tb) {
- int equiv = 0;
- const char* te = tb + strlen(tb);
- const char* ne = nb;
- while (!equiv && *ne) {
- for (nb = ne; *ne; ++ne) {
- if (*ne == '|') break;
- }
- equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
- if (*ne) ++ne;
- }
- return equiv;
-}
-
-
-/* think of this as a c++ template<> or a scheme macro */
-#define SWIG_TypeCheck_Template(comparison, ty) \
- if (ty) { \
- swig_cast_info *iter = ty->cast; \
- while (iter) { \
- if (comparison) { \
- if (iter == ty->cast) return iter; \
- /* Move iter to the top of the linked list */ \
- iter->prev->next = iter->next; \
- if (iter->next) \
- iter->next->prev = iter->prev; \
- iter->next = ty->cast; \
- iter->prev = 0; \
- if (ty->cast) ty->cast->prev = iter; \
- ty->cast = iter; \
- return iter; \
- } \
- iter = iter->next; \
- } \
- } \
- return 0
-
-/*
- Check the typename
-*/
-SWIGRUNTIME swig_cast_info *
-SWIG_TypeCheck(const char *c, swig_type_info *ty) {
- SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty);
-}
-
-/* Same as previous function, except strcmp is replaced with a pointer comparison */
-SWIGRUNTIME swig_cast_info *
-SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) {
- SWIG_TypeCheck_Template(iter->type == from, into);
-}
-
-/*
- Cast a pointer up an inheritance hierarchy
-*/
-SWIGRUNTIMEINLINE void *
-SWIG_TypeCast(swig_cast_info *ty, void *ptr) {
- return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr);
-}
-
-/*
- Dynamic pointer casting. Down an inheritance hierarchy
-*/
-SWIGRUNTIME swig_type_info *
-SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
- swig_type_info *lastty = ty;
- if (!ty || !ty->dcast) return ty;
- while (ty && (ty->dcast)) {
- ty = (*ty->dcast)(ptr);
- if (ty) lastty = ty;
- }
- return lastty;
-}
-
-/*
- Return the name associated with this type
-*/
-SWIGRUNTIMEINLINE const char *
-SWIG_TypeName(const swig_type_info *ty) {
- return ty->name;
-}
-
-/*
- Return the pretty name associated with this type,
- that is an unmangled type name in a form presentable to the user.
-*/
-SWIGRUNTIME const char *
-SWIG_TypePrettyName(const swig_type_info *type) {
- /* The "str" field contains the equivalent pretty names of the
- type, separated by vertical-bar characters. We choose
- to print the last name, as it is often (?) the most
- specific. */
- if (!type) return NULL;
- if (type->str != NULL) {
- const char *last_name = type->str;
- const char *s;
- for (s = type->str; *s; s++)
- if (*s == '|') last_name = s+1;
- return last_name;
- }
- else
- return type->name;
-}
-
-/*
- Set the clientdata field for a type
-*/
-SWIGRUNTIME void
-SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
- swig_cast_info *cast = ti->cast;
- /* if (ti->clientdata == clientdata) return; */
- ti->clientdata = clientdata;
-
- while (cast) {
- if (!cast->converter) {
- swig_type_info *tc = cast->type;
- if (!tc->clientdata) {
- SWIG_TypeClientData(tc, clientdata);
- }
- }
- cast = cast->next;
- }
-}
-SWIGRUNTIME void
-SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
- SWIG_TypeClientData(ti, clientdata);
- ti->owndata = 1;
-}
-
-/*
- Search for a swig_type_info structure only by mangled name
- Search is a O(log #types)
-
- We start searching at module start, and finish searching when start == end.
- Note: if start == end at the beginning of the function, we go all the way around
- the circular list.
-*/
-SWIGRUNTIME swig_type_info *
-SWIG_MangledTypeQueryModule(swig_module_info *start,
- swig_module_info *end,
- const char *name) {
- swig_module_info *iter = start;
- do {
- if (iter->size) {
- register size_t l = 0;
- register size_t r = iter->size - 1;
- do {
- /* since l+r >= 0, we can (>> 1) instead (/ 2) */
- register size_t i = (l + r) >> 1;
- const char *iname = iter->types[i]->name;
- if (iname) {
- register int compare = strcmp(name, iname);
- if (compare == 0) {
- return iter->types[i];
- } else if (compare < 0) {
- if (i) {
- r = i - 1;
- } else {
- break;
- }
- } else if (compare > 0) {
- l = i + 1;
- }
- } else {
- break; /* should never happen */
- }
- } while (l <= r);
- }
- iter = iter->next;
- } while (iter != end);
- return 0;
-}
-
-/*
- Search for a swig_type_info structure for either a mangled name or a human readable name.
- It first searches the mangled names of the types, which is a O(log #types)
- If a type is not found it then searches the human readable names, which is O(#types).
-
- We start searching at module start, and finish searching when start == end.
- Note: if start == end at the beginning of the function, we go all the way around
- the circular list.
-*/
-SWIGRUNTIME swig_type_info *
-SWIG_TypeQueryModule(swig_module_info *start,
- swig_module_info *end,
- const char *name) {
- /* STEP 1: Search the name field using binary search */
- swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
- if (ret) {
- return ret;
- } else {
- /* STEP 2: If the type hasn't been found, do a complete search
- of the str field (the human readable name) */
- swig_module_info *iter = start;
- do {
- register size_t i = 0;
- for (; i < iter->size; ++i) {
- if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
- return iter->types[i];
- }
- iter = iter->next;
- } while (iter != end);
- }
-
- /* neither found a match */
- return 0;
-}
-
-/*
- Pack binary data into a string
-*/
-SWIGRUNTIME char *
-SWIG_PackData(char *c, void *ptr, size_t sz) {
- static const char hex[17] = "0123456789abcdef";
- register const unsigned char *u = (unsigned char *) ptr;
- register const unsigned char *eu = u + sz;
- for (; u != eu; ++u) {
- register unsigned char uu = *u;
- *(c++) = hex[(uu & 0xf0) >> 4];
- *(c++) = hex[uu & 0xf];
- }
- return c;
-}
-
-/*
- Unpack binary data from a string
-*/
-SWIGRUNTIME const char *
-SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
- register unsigned char *u = (unsigned char *) ptr;
- register const unsigned char *eu = u + sz;
- for (; u != eu; ++u) {
- register char d = *(c++);
- register unsigned char uu;
- if ((d >= '0') && (d <= '9'))
- uu = ((d - '0') << 4);
- else if ((d >= 'a') && (d <= 'f'))
- uu = ((d - ('a'-10)) << 4);
- else
- return (char *) 0;
- d = *(c++);
- if ((d >= '0') && (d <= '9'))
- uu |= (d - '0');
- else if ((d >= 'a') && (d <= 'f'))
- uu |= (d - ('a'-10));
- else
- return (char *) 0;
- *u = uu;
- }
- return c;
-}
-
-/*
- Pack 'void *' into a string buffer.
-*/
-SWIGRUNTIME char *
-SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
- char *r = buff;
- if ((2*sizeof(void *) + 2) > bsz) return 0;
- *(r++) = '_';
- r = SWIG_PackData(r,&ptr,sizeof(void *));
- if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
- strcpy(r,name);
- return buff;
-}
-
-SWIGRUNTIME const char *
-SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
- if (*c != '_') {
- if (strcmp(c,"NULL") == 0) {
- *ptr = (void *) 0;
- return name;
- } else {
- return 0;
- }
- }
- return SWIG_UnpackData(++c,ptr,sizeof(void *));
-}
-
-SWIGRUNTIME char *
-SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
- char *r = buff;
- size_t lname = (name ? strlen(name) : 0);
- if ((2*sz + 2 + lname) > bsz) return 0;
- *(r++) = '_';
- r = SWIG_PackData(r,ptr,sz);
- if (lname) {
- strncpy(r,name,lname+1);
- } else {
- *r = 0;
- }
- return buff;
-}
-
-SWIGRUNTIME const char *
-SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
- if (*c != '_') {
- if (strcmp(c,"NULL") == 0) {
- memset(ptr,0,sz);
- return name;
- } else {
- return 0;
- }
- }
- return SWIG_UnpackData(++c,ptr,sz);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-/* Errors in SWIG */
-#define SWIG_UnknownError -1
-#define SWIG_IOError -2
-#define SWIG_RuntimeError -3
-#define SWIG_IndexError -4
-#define SWIG_TypeError -5
-#define SWIG_DivisionByZero -6
-#define SWIG_OverflowError -7
-#define SWIG_SyntaxError -8
-#define SWIG_ValueError -9
-#define SWIG_SystemError -10
-#define SWIG_AttributeError -11
-#define SWIG_MemoryError -12
-#define SWIG_NullReferenceError -13
-
-
-
-
-/* Add PyOS_snprintf for old Pythons */
-#if PY_VERSION_HEX < 0x02020000
-# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM)
-# define PyOS_snprintf _snprintf
-# else
-# define PyOS_snprintf snprintf
-# endif
-#endif
-
-/* A crude PyString_FromFormat implementation for old Pythons */
-#if PY_VERSION_HEX < 0x02020000
-
-#ifndef SWIG_PYBUFFER_SIZE
-# define SWIG_PYBUFFER_SIZE 1024
-#endif
-
-static PyObject *
-PyString_FromFormat(const char *fmt, ...) {
- va_list ap;
- char buf[SWIG_PYBUFFER_SIZE * 2];
- int res;
- va_start(ap, fmt);
- res = vsnprintf(buf, sizeof(buf), fmt, ap);
- va_end(ap);
- return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf);
-}
-#endif
-
-/* Add PyObject_Del for old Pythons */
-#if PY_VERSION_HEX < 0x01060000
-# define PyObject_Del(op) PyMem_DEL((op))
-#endif
-#ifndef PyObject_DEL
-# define PyObject_DEL PyObject_Del
-#endif
-
-/* A crude PyExc_StopIteration exception for old Pythons */
-#if PY_VERSION_HEX < 0x02020000
-# ifndef PyExc_StopIteration
-# define PyExc_StopIteration PyExc_RuntimeError
-# endif
-# ifndef PyObject_GenericGetAttr
-# define PyObject_GenericGetAttr 0
-# endif
-#endif
-/* Py_NotImplemented is defined in 2.1 and up. */
-#if PY_VERSION_HEX < 0x02010000
-# ifndef Py_NotImplemented
-# define Py_NotImplemented PyExc_RuntimeError
-# endif
-#endif
-
-
-/* A crude PyString_AsStringAndSize implementation for old Pythons */
-#if PY_VERSION_HEX < 0x02010000
-# ifndef PyString_AsStringAndSize
-# define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;}
-# endif
-#endif
-
-/* PySequence_Size for old Pythons */
-#if PY_VERSION_HEX < 0x02000000
-# ifndef PySequence_Size
-# define PySequence_Size PySequence_Length
-# endif
-#endif
-
-
-/* PyBool_FromLong for old Pythons */
-#if PY_VERSION_HEX < 0x02030000
-static
-PyObject *PyBool_FromLong(long ok)
-{
- PyObject *result = ok ? Py_True : Py_False;
- Py_INCREF(result);
- return result;
-}
-#endif
-
-/* Py_ssize_t for old Pythons */
-/* This code is as recommended by: */
-/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */
-#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
-typedef int Py_ssize_t;
-# define PY_SSIZE_T_MAX INT_MAX
-# define PY_SSIZE_T_MIN INT_MIN
-#endif
-
-/* -----------------------------------------------------------------------------
- * error manipulation
- * ----------------------------------------------------------------------------- */
-
-SWIGRUNTIME PyObject*
-SWIG_Python_ErrorType(int code) {
- PyObject* type = 0;
- switch(code) {
- case SWIG_MemoryError:
- type = PyExc_MemoryError;
- break;
- case SWIG_IOError:
- type = PyExc_IOError;
- break;
- case SWIG_RuntimeError:
- type = PyExc_RuntimeError;
- break;
- case SWIG_IndexError:
- type = PyExc_IndexError;
- break;
- case SWIG_TypeError:
- type = PyExc_TypeError;
- break;
- case SWIG_DivisionByZero:
- type = PyExc_ZeroDivisionError;
- break;
- case SWIG_OverflowError:
- type = PyExc_OverflowError;
- break;
- case SWIG_SyntaxError:
- type = PyExc_SyntaxError;
- break;
- case SWIG_ValueError:
- type = PyExc_ValueError;
- break;
- case SWIG_SystemError:
- type = PyExc_SystemError;
- break;
- case SWIG_AttributeError:
- type = PyExc_AttributeError;
- break;
- default:
- type = PyExc_RuntimeError;
- }
- return type;
-}
-
-
-SWIGRUNTIME void
-SWIG_Python_AddErrorMsg(const char* mesg)
-{
- PyObject *type = 0;
- PyObject *value = 0;
- PyObject *traceback = 0;
-
- if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback);
- if (value) {
- PyObject *old_str = PyObject_Str(value);
- PyErr_Clear();
- Py_XINCREF(type);
- PyErr_Format(type, "%s %s", PyString_AsString(old_str), mesg);
- Py_DECREF(old_str);
- Py_DECREF(value);
- } else {
- PyErr_Format(PyExc_RuntimeError, mesg);
- }
-}
-
-
-
-#if defined(SWIG_PYTHON_NO_THREADS)
-# if defined(SWIG_PYTHON_THREADS)
-# undef SWIG_PYTHON_THREADS
-# endif
-#endif
-#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */
-# if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL)
-# if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */
-# define SWIG_PYTHON_USE_GIL
-# endif
-# endif
-# if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */
-# ifndef SWIG_PYTHON_INITIALIZE_THREADS
-# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads()
-# endif
-# ifdef __cplusplus /* C++ code */
- class SWIG_Python_Thread_Block {
- bool status;
- PyGILState_STATE state;
- public:
- void end() { if (status) { PyGILState_Release(state); status = false;} }
- SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {}
- ~SWIG_Python_Thread_Block() { end(); }
- };
- class SWIG_Python_Thread_Allow {
- bool status;
- PyThreadState *save;
- public:
- void end() { if (status) { PyEval_RestoreThread(save); status = false; }}
- SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {}
- ~SWIG_Python_Thread_Allow() { end(); }
- };
-# define SWIG_PYTHON_THREAD_BEGIN_BLOCK SWIG_Python_Thread_Block _swig_thread_block
-# define SWIG_PYTHON_THREAD_END_BLOCK _swig_thread_block.end()
-# define SWIG_PYTHON_THREAD_BEGIN_ALLOW SWIG_Python_Thread_Allow _swig_thread_allow
-# define SWIG_PYTHON_THREAD_END_ALLOW _swig_thread_allow.end()
-# else /* C code */
-# define SWIG_PYTHON_THREAD_BEGIN_BLOCK PyGILState_STATE _swig_thread_block = PyGILState_Ensure()
-# define SWIG_PYTHON_THREAD_END_BLOCK PyGILState_Release(_swig_thread_block)
-# define SWIG_PYTHON_THREAD_BEGIN_ALLOW PyThreadState *_swig_thread_allow = PyEval_SaveThread()
-# define SWIG_PYTHON_THREAD_END_ALLOW PyEval_RestoreThread(_swig_thread_allow)
-# endif
-# else /* Old thread way, not implemented, user must provide it */
-# if !defined(SWIG_PYTHON_INITIALIZE_THREADS)
-# define SWIG_PYTHON_INITIALIZE_THREADS
-# endif
-# if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK)
-# define SWIG_PYTHON_THREAD_BEGIN_BLOCK
-# endif
-# if !defined(SWIG_PYTHON_THREAD_END_BLOCK)
-# define SWIG_PYTHON_THREAD_END_BLOCK
-# endif
-# if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW)
-# define SWIG_PYTHON_THREAD_BEGIN_ALLOW
-# endif
-# if !defined(SWIG_PYTHON_THREAD_END_ALLOW)
-# define SWIG_PYTHON_THREAD_END_ALLOW
-# endif
-# endif
-#else /* No thread support */
-# define SWIG_PYTHON_INITIALIZE_THREADS
-# define SWIG_PYTHON_THREAD_BEGIN_BLOCK
-# define SWIG_PYTHON_THREAD_END_BLOCK
-# define SWIG_PYTHON_THREAD_BEGIN_ALLOW
-# define SWIG_PYTHON_THREAD_END_ALLOW
-#endif
-
-/* -----------------------------------------------------------------------------
- * Python API portion that goes into the runtime
- * ----------------------------------------------------------------------------- */
-
-#ifdef __cplusplus
-extern "C" {
-#if 0
-} /* cc-mode */
-#endif
-#endif
-
-/* -----------------------------------------------------------------------------
- * Constant declarations
- * ----------------------------------------------------------------------------- */
-
-/* Constant Types */
-#define SWIG_PY_POINTER 4
-#define SWIG_PY_BINARY 5
-
-/* Constant information structure */
-typedef struct swig_const_info {
- int type;
- char *name;
- long lvalue;
- double dvalue;
- void *pvalue;
- swig_type_info **ptype;
-} swig_const_info;
-
-#ifdef __cplusplus
-#if 0
-{ /* cc-mode */
-#endif
-}
-#endif
-
-
-/* -----------------------------------------------------------------------------
- * See the LICENSE file for information on copyright, usage and redistribution
- * of SWIG, and the README file for authors - http://www.swig.org/release.html.
- *
- * pyrun.swg
- *
- * This file contains the runtime support for Python modules
- * and includes code for managing global variables and pointer
- * type checking.
- *
- * ----------------------------------------------------------------------------- */
-
-/* Common SWIG API */
-
-/* for raw pointers */
-#define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0)
-#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags)
-#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own)
-#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(ptr, type, flags)
-#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty)
-#define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src)
-#define swig_owntype int
-
-/* for raw packed data */
-#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty)
-#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type)
-
-/* for class or struct pointers */
-#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags)
-#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags)
-
-/* for C or C++ function pointers */
-#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type)
-#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(ptr, type, 0)
-
-/* for C++ member pointers, ie, member methods */
-#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty)
-#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type)
-
-
-/* Runtime API */
-
-#define SWIG_GetModule(clientdata) SWIG_Python_GetModule()
-#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer)
-#define SWIG_NewClientData(obj) PySwigClientData_New(obj)
-
-#define SWIG_SetErrorObj SWIG_Python_SetErrorObj
-#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg
-#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code)
-#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg)
-#define SWIG_fail goto fail
-
-
-/* Runtime API implementation */
-
-/* Error manipulation */
-
-SWIGINTERN void
-SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
- SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetObject(errtype, obj);
- Py_DECREF(obj);
- SWIG_PYTHON_THREAD_END_BLOCK;
-}
-
-SWIGINTERN void
-SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
- SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(errtype, (char *) msg);
- SWIG_PYTHON_THREAD_END_BLOCK;
-}
-
-#define SWIG_Python_Raise(obj, type, desc) SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj)
-
-/* Set a constant value */
-
-SWIGINTERN void
-SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
- PyDict_SetItemString(d, (char*) name, obj);
- Py_DECREF(obj);
-}
-
-/* Append a value to the result obj */
-
-SWIGINTERN PyObject*
-SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) {
-#if !defined(SWIG_PYTHON_OUTPUT_TUPLE)
- if (!result) {
- result = obj;
- } else if (result == Py_None) {
- Py_DECREF(result);
- result = obj;
- } else {
- if (!PyList_Check(result)) {
- PyObject *o2 = result;
- result = PyList_New(1);
- PyList_SetItem(result, 0, o2);
- }
- PyList_Append(result,obj);
- Py_DECREF(obj);
- }
- return result;
-#else
- PyObject* o2;
- PyObject* o3;
- if (!result) {
- result = obj;
- } else if (result == Py_None) {
- Py_DECREF(result);
- result = obj;
- } else {
- if (!PyTuple_Check(result)) {
- o2 = result;
- result = PyTuple_New(1);
- PyTuple_SET_ITEM(result, 0, o2);
- }
- o3 = PyTuple_New(1);
- PyTuple_SET_ITEM(o3, 0, obj);
- o2 = result;
- result = PySequence_Concat(o2, o3);
- Py_DECREF(o2);
- Py_DECREF(o3);
- }
- return result;
-#endif
-}
-
-/* Unpack the argument tuple */
-
-SWIGINTERN int
-SWIG_Python_UnpackTuple(PyObject *args, const char *name, int min, int max, PyObject **objs)
-{
- if (!args) {
- if (!min && !max) {
- return 1;
- } else {
- PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none",
- name, (min == max ? "" : "at least "), min);
- return 0;
- }
- }
- if (!PyTuple_Check(args)) {
- PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple");
- return 0;
- } else {
- register int l = PyTuple_GET_SIZE(args);
- if (l < min) {
- PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d",
- name, (min == max ? "" : "at least "), min, l);
- return 0;
- } else if (l > max) {
- PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d",
- name, (min == max ? "" : "at most "), max, l);
- return 0;
- } else {
- register int i;
- for (i = 0; i < l; ++i) {
- objs[i] = PyTuple_GET_ITEM(args, i);
- }
- for (; l < max; ++l) {
- objs[l] = 0;
- }
- return i + 1;
- }
- }
-}
-
-/* A functor is a function object with one single object argument */
-#if PY_VERSION_HEX >= 0x02020000
-#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunctionObjArgs(functor, obj, NULL);
-#else
-#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunction(functor, "O", obj);
-#endif
-
-/*
- Helper for static pointer initialization for both C and C++ code, for example
- static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...);
-*/
-#ifdef __cplusplus
-#define SWIG_STATIC_POINTER(var) var
-#else
-#define SWIG_STATIC_POINTER(var) var = 0; if (!var) var
-#endif
-
-/* -----------------------------------------------------------------------------
- * Pointer declarations
- * ----------------------------------------------------------------------------- */
-
-/* Flags for new pointer objects */
-#define SWIG_POINTER_NOSHADOW (SWIG_POINTER_OWN << 1)
-#define SWIG_POINTER_NEW (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN)
-
-#define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1)
-
-#ifdef __cplusplus
-extern "C" {
-#if 0
-} /* cc-mode */
-#endif
-#endif
-
-/* How to access Py_None */
-#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
-# ifndef SWIG_PYTHON_NO_BUILD_NONE
-# ifndef SWIG_PYTHON_BUILD_NONE
-# define SWIG_PYTHON_BUILD_NONE
-# endif
-# endif
-#endif
-
-#ifdef SWIG_PYTHON_BUILD_NONE
-# ifdef Py_None
-# undef Py_None
-# define Py_None SWIG_Py_None()
-# endif
-SWIGRUNTIMEINLINE PyObject *
-_SWIG_Py_None(void)
-{
- PyObject *none = Py_BuildValue((char*)"");
- Py_DECREF(none);
- return none;
-}
-SWIGRUNTIME PyObject *
-SWIG_Py_None(void)
-{
- static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None();
- return none;
-}
-#endif
-
-/* The python void return value */
-
-SWIGRUNTIMEINLINE PyObject *
-SWIG_Py_Void(void)
-{
- PyObject *none = Py_None;
- Py_INCREF(none);
- return none;
-}
-
-/* PySwigClientData */
-
-typedef struct {
- PyObject *klass;
- PyObject *newraw;
- PyObject *newargs;
- PyObject *destroy;
- int delargs;
- int implicitconv;
-} PySwigClientData;
-
-SWIGRUNTIMEINLINE int
-SWIG_Python_CheckImplicit(swig_type_info *ty)
-{
- PySwigClientData *data = (PySwigClientData *)ty->clientdata;
- return data ? data->implicitconv : 0;
-}
-
-SWIGRUNTIMEINLINE PyObject *
-SWIG_Python_ExceptionType(swig_type_info *desc) {
- PySwigClientData *data = desc ? (PySwigClientData *) desc->clientdata : 0;
- PyObject *klass = data ? data->klass : 0;
- return (klass ? klass : PyExc_RuntimeError);
-}
-
-
-SWIGRUNTIME PySwigClientData *
-PySwigClientData_New(PyObject* obj)
-{
- if (!obj) {
- return 0;
- } else {
- PySwigClientData *data = (PySwigClientData *)malloc(sizeof(PySwigClientData));
- /* the klass element */
- data->klass = obj;
- Py_INCREF(data->klass);
- /* the newraw method and newargs arguments used to create a new raw instance */
- if (PyClass_Check(obj)) {
- data->newraw = 0;
- data->newargs = obj;
- Py_INCREF(obj);
- } else {
-#if (PY_VERSION_HEX < 0x02020000)
- data->newraw = 0;
-#else
- data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__");
-#endif
- if (data->newraw) {
- Py_INCREF(data->newraw);
- data->newargs = PyTuple_New(1);
- PyTuple_SetItem(data->newargs, 0, obj);
- } else {
- data->newargs = obj;
- }
- Py_INCREF(data->newargs);
- }
- /* the destroy method, aka as the C++ delete method */
- data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__");
- if (PyErr_Occurred()) {
- PyErr_Clear();
- data->destroy = 0;
- }
- if (data->destroy) {
- int flags;
- Py_INCREF(data->destroy);
- flags = PyCFunction_GET_FLAGS(data->destroy);
-#ifdef METH_O
- data->delargs = !(flags & (METH_O));
-#else
- data->delargs = 0;
-#endif
- } else {
- data->delargs = 0;
- }
- data->implicitconv = 0;
- return data;
- }
-}
-
-SWIGRUNTIME void
-PySwigClientData_Del(PySwigClientData* data)
-{
- Py_XDECREF(data->newraw);
- Py_XDECREF(data->newargs);
- Py_XDECREF(data->destroy);
-}
-
-/* =============== PySwigObject =====================*/
-
-typedef struct {
- PyObject_HEAD
- void *ptr;
- swig_type_info *ty;
- int own;
- PyObject *next;
-} PySwigObject;
-
-SWIGRUNTIME PyObject *
-PySwigObject_long(PySwigObject *v)
-{
- return PyLong_FromVoidPtr(v->ptr);
-}
-
-SWIGRUNTIME PyObject *
-PySwigObject_format(const char* fmt, PySwigObject *v)
-{
- PyObject *res = NULL;
- PyObject *args = PyTuple_New(1);
- if (args) {
- if (PyTuple_SetItem(args, 0, PySwigObject_long(v)) == 0) {
- PyObject *ofmt = PyString_FromString(fmt);
- if (ofmt) {
- res = PyString_Format(ofmt,args);
- Py_DECREF(ofmt);
- }
- Py_DECREF(args);
- }
- }
- return res;
-}
-
-SWIGRUNTIME PyObject *
-PySwigObject_oct(PySwigObject *v)
-{
- return PySwigObject_format("%o",v);
-}
-
-SWIGRUNTIME PyObject *
-PySwigObject_hex(PySwigObject *v)
-{
- return PySwigObject_format("%x",v);
-}
-
-SWIGRUNTIME PyObject *
-#ifdef METH_NOARGS
-PySwigObject_repr(PySwigObject *v)
-#else
-PySwigObject_repr(PySwigObject *v, PyObject *args)
-#endif
-{
- const char *name = SWIG_TypePrettyName(v->ty);
- PyObject *hex = PySwigObject_hex(v);
- PyObject *repr = PyString_FromFormat("<Swig Object of type '%s' at 0x%s>", name, PyString_AsString(hex));
- Py_DECREF(hex);
- if (v->next) {
-#ifdef METH_NOARGS
- PyObject *nrep = PySwigObject_repr((PySwigObject *)v->next);
-#else
- PyObject *nrep = PySwigObject_repr((PySwigObject *)v->next, args);
-#endif
- PyString_ConcatAndDel(&repr,nrep);
- }
- return repr;
-}
-
-SWIGRUNTIME int
-PySwigObject_print(PySwigObject *v, FILE *fp, int SWIGUNUSEDPARM(flags))
-{
-#ifdef METH_NOARGS
- PyObject *repr = PySwigObject_repr(v);
-#else
- PyObject *repr = PySwigObject_repr(v, NULL);
-#endif
- if (repr) {
- fputs(PyString_AsString(repr), fp);
- Py_DECREF(repr);
- return 0;
- } else {
- return 1;
- }
-}
-
-SWIGRUNTIME PyObject *
-PySwigObject_str(PySwigObject *v)
-{
- char result[SWIG_BUFFER_SIZE];
- return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ?
- PyString_FromString(result) : 0;
-}
-
-SWIGRUNTIME int
-PySwigObject_compare(PySwigObject *v, PySwigObject *w)
-{
- void *i = v->ptr;
- void *j = w->ptr;
- return (i < j) ? -1 : ((i > j) ? 1 : 0);
-}
-
-SWIGRUNTIME PyTypeObject* _PySwigObject_type(void);
-
-SWIGRUNTIME PyTypeObject*
-PySwigObject_type(void) {
- static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigObject_type();
- return type;
-}
-
-SWIGRUNTIMEINLINE int
-PySwigObject_Check(PyObject *op) {
- return ((op)->ob_type == PySwigObject_type())
- || (strcmp((op)->ob_type->tp_name,"PySwigObject") == 0);
-}
-
-SWIGRUNTIME PyObject *
-PySwigObject_New(void *ptr, swig_type_info *ty, int own);
-
-SWIGRUNTIME void
-PySwigObject_dealloc(PyObject *v)
-{
- PySwigObject *sobj = (PySwigObject *) v;
- PyObject *next = sobj->next;
- if (sobj->own) {
- swig_type_info *ty = sobj->ty;
- PySwigClientData *data = ty ? (PySwigClientData *) ty->clientdata : 0;
- PyObject *destroy = data ? data->destroy : 0;
- if (destroy) {
- /* destroy is always a VARARGS method */
- PyObject *res;
- if (data->delargs) {
- /* we need to create a temporal object to carry the destroy operation */
- PyObject *tmp = PySwigObject_New(sobj->ptr, ty, 0);
- res = SWIG_Python_CallFunctor(destroy, tmp);
- Py_DECREF(tmp);
- } else {
- PyCFunction meth = PyCFunction_GET_FUNCTION(destroy);
- PyObject *mself = PyCFunction_GET_SELF(destroy);
- res = ((*meth)(mself, v));
- }
- Py_XDECREF(res);
- } else {
- const char *name = SWIG_TypePrettyName(ty);
-#if !defined(SWIG_PYTHON_SILENT_MEMLEAK)
- printf("swig/python detected a memory leak of type '%s', no destructor found.\n", name);
-#endif
- }
- }
- Py_XDECREF(next);
- PyObject_DEL(v);
-}
-
-SWIGRUNTIME PyObject*
-PySwigObject_append(PyObject* v, PyObject* next)
-{
- PySwigObject *sobj = (PySwigObject *) v;
-#ifndef METH_O
- PyObject *tmp = 0;
- if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL;
- next = tmp;
-#endif
- if (!PySwigObject_Check(next)) {
- return NULL;
- }
- sobj->next = next;
- Py_INCREF(next);
- return SWIG_Py_Void();
-}
-
-SWIGRUNTIME PyObject*
-#ifdef METH_NOARGS
-PySwigObject_next(PyObject* v)
-#else
-PySwigObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
-#endif
-{
- PySwigObject *sobj = (PySwigObject *) v;
- if (sobj->next) {
- Py_INCREF(sobj->next);
- return sobj->next;
- } else {
- return SWIG_Py_Void();
- }
-}
-
-SWIGINTERN PyObject*
-#ifdef METH_NOARGS
-PySwigObject_disown(PyObject *v)
-#else
-PySwigObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
-#endif
-{
- PySwigObject *sobj = (PySwigObject *)v;
- sobj->own = 0;
- return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject*
-#ifdef METH_NOARGS
-PySwigObject_acquire(PyObject *v)
-#else
-PySwigObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args))
-#endif
-{
- PySwigObject *sobj = (PySwigObject *)v;
- sobj->own = SWIG_POINTER_OWN;
- return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject*
-PySwigObject_own(PyObject *v, PyObject *args)
-{
- PyObject *val = 0;
-#if (PY_VERSION_HEX < 0x02020000)
- if (!PyArg_ParseTuple(args,(char *)"|O:own",&val))
-#else
- if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
-#endif
- {
- return NULL;
- }
- else
- {
- PySwigObject *sobj = (PySwigObject *)v;
- PyObject *obj = PyBool_FromLong(sobj->own);
- if (val) {
-#ifdef METH_NOARGS
- if (PyObject_IsTrue(val)) {
- PySwigObject_acquire(v);
- } else {
- PySwigObject_disown(v);
- }
-#else
- if (PyObject_IsTrue(val)) {
- PySwigObject_acquire(v,args);
- } else {
- PySwigObject_disown(v,args);
- }
-#endif
- }
- return obj;
- }
-}
-
-#ifdef METH_O
-static PyMethodDef
-swigobject_methods[] = {
- {(char *)"disown", (PyCFunction)PySwigObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"},
- {(char *)"acquire", (PyCFunction)PySwigObject_acquire, METH_NOARGS, (char *)"aquires ownership of the pointer"},
- {(char *)"own", (PyCFunction)PySwigObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"},
- {(char *)"append", (PyCFunction)PySwigObject_append, METH_O, (char *)"appends another 'this' object"},
- {(char *)"next", (PyCFunction)PySwigObject_next, METH_NOARGS, (char *)"returns the next 'this' object"},
- {(char *)"__repr__",(PyCFunction)PySwigObject_repr, METH_NOARGS, (char *)"returns object representation"},
- {0, 0, 0, 0}
-};
-#else
-static PyMethodDef
-swigobject_methods[] = {
- {(char *)"disown", (PyCFunction)PySwigObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"},
- {(char *)"acquire", (PyCFunction)PySwigObject_acquire, METH_VARARGS, (char *)"aquires ownership of the pointer"},
- {(char *)"own", (PyCFunction)PySwigObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"},
- {(char *)"append", (PyCFunction)PySwigObject_append, METH_VARARGS, (char *)"appends another 'this' object"},
- {(char *)"next", (PyCFunction)PySwigObject_next, METH_VARARGS, (char *)"returns the next 'this' object"},
- {(char *)"__repr__",(PyCFunction)PySwigObject_repr, METH_VARARGS, (char *)"returns object representation"},
- {0, 0, 0, 0}
-};
-#endif
-
-#if PY_VERSION_HEX < 0x02020000
-SWIGINTERN PyObject *
-PySwigObject_getattr(PySwigObject *sobj,char *name)
-{
- return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name);
-}
-#endif
-
-SWIGRUNTIME PyTypeObject*
-_PySwigObject_type(void) {
- static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer";
-
- static PyNumberMethods PySwigObject_as_number = {
- (binaryfunc)0, /*nb_add*/
- (binaryfunc)0, /*nb_subtract*/
- (binaryfunc)0, /*nb_multiply*/
- (binaryfunc)0, /*nb_divide*/
- (binaryfunc)0, /*nb_remainder*/
- (binaryfunc)0, /*nb_divmod*/
- (ternaryfunc)0,/*nb_power*/
- (unaryfunc)0, /*nb_negative*/
- (unaryfunc)0, /*nb_positive*/
- (unaryfunc)0, /*nb_absolute*/
- (inquiry)0, /*nb_nonzero*/
- 0, /*nb_invert*/
- 0, /*nb_lshift*/
- 0, /*nb_rshift*/
- 0, /*nb_and*/
- 0, /*nb_xor*/
- 0, /*nb_or*/
- (coercion)0, /*nb_coerce*/
- (unaryfunc)PySwigObject_long, /*nb_int*/
- (unaryfunc)PySwigObject_long, /*nb_long*/
- (unaryfunc)0, /*nb_float*/
- (unaryfunc)PySwigObject_oct, /*nb_oct*/
- (unaryfunc)PySwigObject_hex, /*nb_hex*/
-#if PY_VERSION_HEX >= 0x02020000
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */
-#elif PY_VERSION_HEX >= 0x02000000
- 0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */
-#endif
- };
-
- static PyTypeObject pyswigobject_type;
- static int type_init = 0;
- if (!type_init) {
- const PyTypeObject tmp
- = {
- PyObject_HEAD_INIT(NULL)
- 0, /* ob_size */
- (char *)"PySwigObject", /* tp_name */
- sizeof(PySwigObject), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)PySwigObject_dealloc, /* tp_dealloc */
- (printfunc)PySwigObject_print, /* tp_print */
-#if PY_VERSION_HEX < 0x02020000
- (getattrfunc)PySwigObject_getattr, /* tp_getattr */
-#else
- (getattrfunc)0, /* tp_getattr */
-#endif
- (setattrfunc)0, /* tp_setattr */
- (cmpfunc)PySwigObject_compare, /* tp_compare */
- (reprfunc)PySwigObject_repr, /* tp_repr */
- &PySwigObject_as_number, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- (hashfunc)0, /* tp_hash */
- (ternaryfunc)0, /* tp_call */
- (reprfunc)PySwigObject_str, /* tp_str */
- PyObject_GenericGetAttr, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- swigobject_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
-#if PY_VERSION_HEX >= 0x02020000
- 0, /* tp_iter */
- 0, /* tp_iternext */
- swigobject_methods, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- 0, /* tp_new */
- 0, /* tp_free */
- 0, /* tp_is_gc */
- 0, /* tp_bases */
- 0, /* tp_mro */
- 0, /* tp_cache */
- 0, /* tp_subclasses */
- 0, /* tp_weaklist */
-#endif
-#if PY_VERSION_HEX >= 0x02030000
- 0, /* tp_del */
-#endif
-#ifdef COUNT_ALLOCS
- 0,0,0,0 /* tp_alloc -> tp_next */
-#endif
- };
- pyswigobject_type = tmp;
- pyswigobject_type.ob_type = &PyType_Type;
- type_init = 1;
- }
- return &pyswigobject_type;
-}
-
-SWIGRUNTIME PyObject *
-PySwigObject_New(void *ptr, swig_type_info *ty, int own)
-{
- PySwigObject *sobj = PyObject_NEW(PySwigObject, PySwigObject_type());
- if (sobj) {
- sobj->ptr = ptr;
- sobj->ty = ty;
- sobj->own = own;
- sobj->next = 0;
- }
- return (PyObject *)sobj;
-}
-
-/* -----------------------------------------------------------------------------
- * Implements a simple Swig Packed type, and use it instead of string
- * ----------------------------------------------------------------------------- */
-
-typedef struct {
- PyObject_HEAD
- void *pack;
- swig_type_info *ty;
- size_t size;
-} PySwigPacked;
-
-SWIGRUNTIME int
-PySwigPacked_print(PySwigPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags))
-{
- char result[SWIG_BUFFER_SIZE];
- fputs("<Swig Packed ", fp);
- if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) {
- fputs("at ", fp);
- fputs(result, fp);
- }
- fputs(v->ty->name,fp);
- fputs(">", fp);
- return 0;
-}
-
-SWIGRUNTIME PyObject *
-PySwigPacked_repr(PySwigPacked *v)
-{
- char result[SWIG_BUFFER_SIZE];
- if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) {
- return PyString_FromFormat("<Swig Packed at %s%s>", result, v->ty->name);
- } else {
- return PyString_FromFormat("<Swig Packed %s>", v->ty->name);
- }
-}
-
-SWIGRUNTIME PyObject *
-PySwigPacked_str(PySwigPacked *v)
-{
- char result[SWIG_BUFFER_SIZE];
- if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){
- return PyString_FromFormat("%s%s", result, v->ty->name);
- } else {
- return PyString_FromString(v->ty->name);
- }
-}
-
-SWIGRUNTIME int
-PySwigPacked_compare(PySwigPacked *v, PySwigPacked *w)
-{
- size_t i = v->size;
- size_t j = w->size;
- int s = (i < j) ? -1 : ((i > j) ? 1 : 0);
- return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size);
-}
-
-SWIGRUNTIME PyTypeObject* _PySwigPacked_type(void);
-
-SWIGRUNTIME PyTypeObject*
-PySwigPacked_type(void) {
- static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigPacked_type();
- return type;
-}
-
-SWIGRUNTIMEINLINE int
-PySwigPacked_Check(PyObject *op) {
- return ((op)->ob_type == _PySwigPacked_type())
- || (strcmp((op)->ob_type->tp_name,"PySwigPacked") == 0);
-}
-
-SWIGRUNTIME void
-PySwigPacked_dealloc(PyObject *v)
-{
- if (PySwigPacked_Check(v)) {
- PySwigPacked *sobj = (PySwigPacked *) v;
- free(sobj->pack);
- }
- PyObject_DEL(v);
-}
-
-SWIGRUNTIME PyTypeObject*
-_PySwigPacked_type(void) {
- static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer";
- static PyTypeObject pyswigpacked_type;
- static int type_init = 0;
- if (!type_init) {
- const PyTypeObject tmp
- = {
- PyObject_HEAD_INIT(NULL)
- 0, /* ob_size */
- (char *)"PySwigPacked", /* tp_name */
- sizeof(PySwigPacked), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)PySwigPacked_dealloc, /* tp_dealloc */
- (printfunc)PySwigPacked_print, /* tp_print */
- (getattrfunc)0, /* tp_getattr */
- (setattrfunc)0, /* tp_setattr */
- (cmpfunc)PySwigPacked_compare, /* tp_compare */
- (reprfunc)PySwigPacked_repr, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- (hashfunc)0, /* tp_hash */
- (ternaryfunc)0, /* tp_call */
- (reprfunc)PySwigPacked_str, /* tp_str */
- PyObject_GenericGetAttr, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- swigpacked_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
-#if PY_VERSION_HEX >= 0x02020000
- 0, /* tp_iter */
- 0, /* tp_iternext */
- 0, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- 0, /* tp_new */
- 0, /* tp_free */
- 0, /* tp_is_gc */
- 0, /* tp_bases */
- 0, /* tp_mro */
- 0, /* tp_cache */
- 0, /* tp_subclasses */
- 0, /* tp_weaklist */
-#endif
-#if PY_VERSION_HEX >= 0x02030000
- 0, /* tp_del */
-#endif
-#ifdef COUNT_ALLOCS
- 0,0,0,0 /* tp_alloc -> tp_next */
-#endif
- };
- pyswigpacked_type = tmp;
- pyswigpacked_type.ob_type = &PyType_Type;
- type_init = 1;
- }
- return &pyswigpacked_type;
-}
-
-SWIGRUNTIME PyObject *
-PySwigPacked_New(void *ptr, size_t size, swig_type_info *ty)
-{
- PySwigPacked *sobj = PyObject_NEW(PySwigPacked, PySwigPacked_type());
- if (sobj) {
- void *pack = malloc(size);
- if (pack) {
- memcpy(pack, ptr, size);
- sobj->pack = pack;
- sobj->ty = ty;
- sobj->size = size;
- } else {
- PyObject_DEL((PyObject *) sobj);
- sobj = 0;
- }
- }
- return (PyObject *) sobj;
-}
-
-SWIGRUNTIME swig_type_info *
-PySwigPacked_UnpackData(PyObject *obj, void *ptr, size_t size)
-{
- if (PySwigPacked_Check(obj)) {
- PySwigPacked *sobj = (PySwigPacked *)obj;
- if (sobj->size != size) return 0;
- memcpy(ptr, sobj->pack, size);
- return sobj->ty;
- } else {
- return 0;
- }
-}
-
-/* -----------------------------------------------------------------------------
- * pointers/data manipulation
- * ----------------------------------------------------------------------------- */
-
-SWIGRUNTIMEINLINE PyObject *
-_SWIG_This(void)
-{
- return PyString_FromString("this");
-}
-
-SWIGRUNTIME PyObject *
-SWIG_This(void)
-{
- static PyObject *SWIG_STATIC_POINTER(swig_this) = _SWIG_This();
- return swig_this;
-}
-
-/* #define SWIG_PYTHON_SLOW_GETSET_THIS */
-
-SWIGRUNTIME PySwigObject *
-SWIG_Python_GetSwigThis(PyObject *pyobj)
-{
- if (PySwigObject_Check(pyobj)) {
- return (PySwigObject *) pyobj;
- } else {
- PyObject *obj = 0;
-#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000))
- if (PyInstance_Check(pyobj)) {
- obj = _PyInstance_Lookup(pyobj, SWIG_This());
- } else {
- PyObject **dictptr = _PyObject_GetDictPtr(pyobj);
- if (dictptr != NULL) {
- PyObject *dict = *dictptr;
- obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0;
- } else {
-#ifdef PyWeakref_CheckProxy
- if (PyWeakref_CheckProxy(pyobj)) {
- PyObject *wobj = PyWeakref_GET_OBJECT(pyobj);
- return wobj ? SWIG_Python_GetSwigThis(wobj) : 0;
- }
-#endif
- obj = PyObject_GetAttr(pyobj,SWIG_This());
- if (obj) {
- Py_DECREF(obj);
- } else {
- if (PyErr_Occurred()) PyErr_Clear();
- return 0;
- }
- }
- }
-#else
- obj = PyObject_GetAttr(pyobj,SWIG_This());
- if (obj) {
- Py_DECREF(obj);
- } else {
- if (PyErr_Occurred()) PyErr_Clear();
- return 0;
- }
-#endif
- if (obj && !PySwigObject_Check(obj)) {
- /* a PyObject is called 'this', try to get the 'real this'
- PySwigObject from it */
- return SWIG_Python_GetSwigThis(obj);
- }
- return (PySwigObject *)obj;
- }
-}
-
-/* Acquire a pointer value */
-
-SWIGRUNTIME int
-SWIG_Python_AcquirePtr(PyObject *obj, int own) {
- if (own) {
- PySwigObject *sobj = SWIG_Python_GetSwigThis(obj);
- if (sobj) {
- int oldown = sobj->own;
- sobj->own = own;
- return oldown;
- }
- }
- return 0;
-}
-
-/* Convert a pointer value */
-
-SWIGRUNTIME int
-SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) {
- if (!obj) return SWIG_ERROR;
- if (obj == Py_None) {
- if (ptr) *ptr = 0;
- return SWIG_OK;
- } else {
- PySwigObject *sobj = SWIG_Python_GetSwigThis(obj);
- while (sobj) {
- void *vptr = sobj->ptr;
- if (ty) {
- swig_type_info *to = sobj->ty;
- if (to == ty) {
- /* no type cast needed */
- if (ptr) *ptr = vptr;
- break;
- } else {
- swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
- if (!tc) {
- sobj = (PySwigObject *)sobj->next;
- } else {
- if (ptr) *ptr = SWIG_TypeCast(tc,vptr);
- break;
- }
- }
- } else {
- if (ptr) *ptr = vptr;
- break;
- }
- }
- if (sobj) {
- if (own) *own = sobj->own;
- if (flags & SWIG_POINTER_DISOWN) {
- sobj->own = 0;
- }
- return SWIG_OK;
- } else {
- int res = SWIG_ERROR;
- if (flags & SWIG_POINTER_IMPLICIT_CONV) {
- PySwigClientData *data = ty ? (PySwigClientData *) ty->clientdata : 0;
- if (data && !data->implicitconv) {
- PyObject *klass = data->klass;
- if (klass) {
- PyObject *impconv;
- data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/
- impconv = SWIG_Python_CallFunctor(klass, obj);
- data->implicitconv = 0;
- if (PyErr_Occurred()) {
- PyErr_Clear();
- impconv = 0;
- }
- if (impconv) {
- PySwigObject *iobj = SWIG_Python_GetSwigThis(impconv);
- if (iobj) {
- void *vptr;
- res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0);
- if (SWIG_IsOK(res)) {
- if (ptr) {
- *ptr = vptr;
- /* transfer the ownership to 'ptr' */
- iobj->own = 0;
- res = SWIG_AddCast(res);
- res = SWIG_AddNewMask(res);
- } else {
- res = SWIG_AddCast(res);
- }
- }
- }
- Py_DECREF(impconv);
- }
- }
- }
- }
- return res;
- }
- }
-}
-
-/* Convert a function ptr value */
-
-SWIGRUNTIME int
-SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) {
- if (!PyCFunction_Check(obj)) {
- return SWIG_ConvertPtr(obj, ptr, ty, 0);
- } else {
- void *vptr = 0;
-
- /* here we get the method pointer for callbacks */
- const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc);
- const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0;
- if (desc) {
- desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0;
- if (!desc) return SWIG_ERROR;
- }
- if (ty) {
- swig_cast_info *tc = SWIG_TypeCheck(desc,ty);
- if (!tc) return SWIG_ERROR;
- *ptr = SWIG_TypeCast(tc,vptr);
- } else {
- *ptr = vptr;
- }
- return SWIG_OK;
- }
-}
-
-/* Convert a packed value value */
-
-SWIGRUNTIME int
-SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) {
- swig_type_info *to = PySwigPacked_UnpackData(obj, ptr, sz);
- if (!to) return SWIG_ERROR;
- if (ty) {
- if (to != ty) {
- /* check type cast? */
- swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
- if (!tc) return SWIG_ERROR;
- }
- }
- return SWIG_OK;
-}
-
-/* -----------------------------------------------------------------------------
- * Create a new pointer object
- * ----------------------------------------------------------------------------- */
-
-/*
- Create a new instance object, whitout calling __init__, and set the
- 'this' attribute.
-*/
-
-SWIGRUNTIME PyObject*
-SWIG_Python_NewShadowInstance(PySwigClientData *data, PyObject *swig_this)
-{
-#if (PY_VERSION_HEX >= 0x02020000)
- PyObject *inst = 0;
- PyObject *newraw = data->newraw;
- if (newraw) {
- inst = PyObject_Call(newraw, data->newargs, NULL);
- if (inst) {
-#if !defined(SWIG_PYTHON_SLOW_GETSET_THIS)
- PyObject **dictptr = _PyObject_GetDictPtr(inst);
- if (dictptr != NULL) {
- PyObject *dict = *dictptr;
- if (dict == NULL) {
- dict = PyDict_New();
- *dictptr = dict;
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- }
- }
-#else
- PyObject *key = SWIG_This();
- PyObject_SetAttr(inst, key, swig_this);
-#endif
- }
- } else {
- PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
- }
- return inst;
-#else
-#if (PY_VERSION_HEX >= 0x02010000)
- PyObject *inst;
- PyObject *dict = PyDict_New();
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- inst = PyInstance_NewRaw(data->newargs, dict);
- Py_DECREF(dict);
- return (PyObject *) inst;
-#else
- PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
- if (inst == NULL) {
- return NULL;
- }
- inst->in_class = (PyClassObject *)data->newargs;
- Py_INCREF(inst->in_class);
- inst->in_dict = PyDict_New();
- if (inst->in_dict == NULL) {
- Py_DECREF(inst);
- return NULL;
- }
-#ifdef Py_TPFLAGS_HAVE_WEAKREFS
- inst->in_weakreflist = NULL;
-#endif
-#ifdef Py_TPFLAGS_GC
- PyObject_GC_Init(inst);
-#endif
- PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this);
- return (PyObject *) inst;
-#endif
-#endif
-}
-
-SWIGRUNTIME void
-SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
-{
- PyObject *dict;
-#if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS)
- PyObject **dictptr = _PyObject_GetDictPtr(inst);
- if (dictptr != NULL) {
- dict = *dictptr;
- if (dict == NULL) {
- dict = PyDict_New();
- *dictptr = dict;
- }
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- return;
- }
-#endif
- dict = PyObject_GetAttrString(inst, (char*)"__dict__");
- PyDict_SetItem(dict, SWIG_This(), swig_this);
- Py_DECREF(dict);
-}
-
-
-SWIGINTERN PyObject *
-SWIG_Python_InitShadowInstance(PyObject *args) {
- PyObject *obj[2];
- if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
- return NULL;
- } else {
- PySwigObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
- if (sthis) {
- PySwigObject_append((PyObject*) sthis, obj[1]);
- } else {
- SWIG_Python_SetSwigThis(obj[0], obj[1]);
- }
- return SWIG_Py_Void();
- }
-}
-
-/* Create a new pointer object */
-
-SWIGRUNTIME PyObject *
-SWIG_Python_NewPointerObj(void *ptr, swig_type_info *type, int flags) {
- if (!ptr) {
- return SWIG_Py_Void();
- } else {
- int own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0;
- PyObject *robj = PySwigObject_New(ptr, type, own);
- PySwigClientData *clientdata = type ? (PySwigClientData *)(type->clientdata) : 0;
- if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) {
- PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
- if (inst) {
- Py_DECREF(robj);
- robj = inst;
- }
- }
- return robj;
- }
-}
-
-/* Create a new packed object */
-
-SWIGRUNTIMEINLINE PyObject *
-SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) {
- return ptr ? PySwigPacked_New((void *) ptr, sz, type) : SWIG_Py_Void();
-}
-
-/* -----------------------------------------------------------------------------*
- * Get type list
- * -----------------------------------------------------------------------------*/
-
-#ifdef SWIG_LINK_RUNTIME
-void *SWIG_ReturnGlobalTypeList(void *);
-#endif
-
-SWIGRUNTIME swig_module_info *
-SWIG_Python_GetModule(void) {
- static void *type_pointer = (void *)0;
- /* first check if module already created */
- if (!type_pointer) {
-#ifdef SWIG_LINK_RUNTIME
- type_pointer = SWIG_ReturnGlobalTypeList((void *)0);
-#else
- type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION,
- (char*)"type_pointer" SWIG_TYPE_TABLE_NAME);
- if (PyErr_Occurred()) {
- PyErr_Clear();
- type_pointer = (void *)0;
- }
-#endif
- }
- return (swig_module_info *) type_pointer;
-}
-
-#if PY_MAJOR_VERSION < 2
-/* PyModule_AddObject function was introduced in Python 2.0. The following function
- is copied out of Python/modsupport.c in python version 2.3.4 */
-SWIGINTERN int
-PyModule_AddObject(PyObject *m, char *name, PyObject *o)
-{
- PyObject *dict;
- if (!PyModule_Check(m)) {
- PyErr_SetString(PyExc_TypeError,
- "PyModule_AddObject() needs module as first arg");
- return SWIG_ERROR;
- }
- if (!o) {
- PyErr_SetString(PyExc_TypeError,
- "PyModule_AddObject() needs non-NULL value");
- return SWIG_ERROR;
- }
-
- dict = PyModule_GetDict(m);
- if (dict == NULL) {
- /* Internal error -- modules must have a dict! */
- PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
- PyModule_GetName(m));
- return SWIG_ERROR;
- }
- if (PyDict_SetItemString(dict, name, o))
- return SWIG_ERROR;
- Py_DECREF(o);
- return SWIG_OK;
-}
-#endif
-
-SWIGRUNTIME void
-SWIG_Python_DestroyModule(void *vptr)
-{
- swig_module_info *swig_module = (swig_module_info *) vptr;
- swig_type_info **types = swig_module->types;
- size_t i;
- for (i =0; i < swig_module->size; ++i) {
- swig_type_info *ty = types[i];
- if (ty->owndata) {
- PySwigClientData *data = (PySwigClientData *) ty->clientdata;
- if (data) PySwigClientData_Del(data);
- }
- }
- Py_DECREF(SWIG_This());
-}
-
-SWIGRUNTIME void
-SWIG_Python_SetModule(swig_module_info *swig_module) {
- static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} };/* Sentinel */
-
- PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION,
- swig_empty_runtime_method_table);
- PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule);
- if (pointer && module) {
- PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer);
- } else {
- Py_XDECREF(pointer);
- }
-}
-
-/* The python cached type query */
-SWIGRUNTIME PyObject *
-SWIG_Python_TypeCache(void) {
- static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New();
- return cache;
-}
-
-SWIGRUNTIME swig_type_info *
-SWIG_Python_TypeQuery(const char *type)
-{
- PyObject *cache = SWIG_Python_TypeCache();
- PyObject *key = PyString_FromString(type);
- PyObject *obj = PyDict_GetItem(cache, key);
- swig_type_info *descriptor;
- if (obj) {
- descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
- } else {
- swig_module_info *swig_module = SWIG_Python_GetModule();
- descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
- if (descriptor) {
- obj = PyCObject_FromVoidPtr(descriptor, NULL);
- PyDict_SetItem(cache, key, obj);
- Py_DECREF(obj);
- }
- }
- Py_DECREF(key);
- return descriptor;
-}
-
-/*
- For backward compatibility only
-*/
-#define SWIG_POINTER_EXCEPTION 0
-#define SWIG_arg_fail(arg) SWIG_Python_ArgFail(arg)
-#define SWIG_MustGetPtr(p, type, argnum, flags) SWIG_Python_MustGetPtr(p, type, argnum, flags)
-
-SWIGRUNTIME int
-SWIG_Python_AddErrMesg(const char* mesg, int infront)
-{
- if (PyErr_Occurred()) {
- PyObject *type = 0;
- PyObject *value = 0;
- PyObject *traceback = 0;
- PyErr_Fetch(&type, &value, &traceback);
- if (value) {
- PyObject *old_str = PyObject_Str(value);
- Py_XINCREF(type);
- PyErr_Clear();
- if (infront) {
- PyErr_Format(type, "%s %s", mesg, PyString_AsString(old_str));
- } else {
- PyErr_Format(type, "%s %s", PyString_AsString(old_str), mesg);
- }
- Py_DECREF(old_str);
- }
- return 1;
- } else {
- return 0;
- }
-}
-
-SWIGRUNTIME int
-SWIG_Python_ArgFail(int argnum)
-{
- if (PyErr_Occurred()) {
- /* add information about failing argument */
- char mesg[256];
- PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum);
- return SWIG_Python_AddErrMesg(mesg, 1);
- } else {
- return 0;
- }
-}
-
-SWIGRUNTIMEINLINE const char *
-PySwigObject_GetDesc(PyObject *self)
-{
- PySwigObject *v = (PySwigObject *)self;
- swig_type_info *ty = v ? v->ty : 0;
- return ty ? ty->str : (char*)"";
-}
-
-SWIGRUNTIME void
-SWIG_Python_TypeError(const char *type, PyObject *obj)
-{
- if (type) {
-#if defined(SWIG_COBJECT_TYPES)
- if (obj && PySwigObject_Check(obj)) {
- const char *otype = (const char *) PySwigObject_GetDesc(obj);
- if (otype) {
- PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'PySwigObject(%s)' is received",
- type, otype);
- return;
- }
- } else
-#endif
- {
- const char *otype = (obj ? obj->ob_type->tp_name : 0);
- if (otype) {
- PyObject *str = PyObject_Str(obj);
- const char *cstr = str ? PyString_AsString(str) : 0;
- if (cstr) {
- PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received",
- type, otype, cstr);
- } else {
- PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received",
- type, otype);
- }
- Py_XDECREF(str);
- return;
- }
- }
- PyErr_Format(PyExc_TypeError, "a '%s' is expected", type);
- } else {
- PyErr_Format(PyExc_TypeError, "unexpected type is received");
- }
-}
-
-
-/* Convert a pointer value, signal an exception on a type mismatch */
-SWIGRUNTIME void *
-SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags) {
- void *result;
- if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) {
- PyErr_Clear();
- if (flags & SWIG_POINTER_EXCEPTION) {
- SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj);
- SWIG_Python_ArgFail(argnum);
- }
- }
- return result;
-}
-
-
-#ifdef __cplusplus
-#if 0
-{ /* cc-mode */
-#endif
-}
-#endif
-
-
-
-#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
-
-#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else
-
-
-
-/* -------- TYPES TABLE (BEGIN) -------- */
-
-#define SWIGTYPE_p_char swig_types[0]
-#define SWIGTYPE_p_gsl_complex swig_types[1]
-static swig_type_info *swig_types[3];
-static swig_module_info swig_module = {swig_types, 2, 0, 0, 0, 0};
-#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
-#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
-
-/* -------- TYPES TABLE (END) -------- */
-
-#if (PY_VERSION_HEX <= 0x02000000)
-# if !defined(SWIG_PYTHON_CLASSIC)
-# error "This python version requires swig to be run with the '-classic' option"
-# endif
-#endif
-
-/*-----------------------------------------------
- @(target):= _ttest.so
- ------------------------------------------------*/
-#define SWIG_init init_ttest
-
-#define SWIG_name "_ttest"
-
-#define SWIGVERSION 0x010331
-#define SWIG_VERSION SWIGVERSION
-
-
-#define SWIG_as_voidptr(a) (void *)((const void *)(a))
-#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),(void**)(a))
-
-
-#define SWIG_FILE_WITH_INIT
-#include "ttest.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-SWIGINTERN PyObject *_wrap_testtimer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
- PyObject *resultobj = 0;
-
- if (!PyArg_ParseTuple(args,(char *)":testtimer")) SWIG_fail;
- testtimer();
- resultobj = SWIG_Py_Void();
- return resultobj;
-fail:
- return NULL;
-}
-
-
-static PyMethodDef SwigMethods[] = {
- { (char *)"testtimer", _wrap_testtimer, METH_VARARGS, NULL},
- { NULL, NULL, 0, NULL }
-};
-
-
-/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-
-static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_gsl_complex = {"_p_gsl_complex", "gsl_complex *|msl_complex_t *", 0, 0, (void*)0, 0};
-
-static swig_type_info *swig_type_initial[] = {
- &_swigt__p_char,
- &_swigt__p_gsl_complex,
-};
-
-static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_gsl_complex[] = { {&_swigt__p_gsl_complex, 0, 0, 0},{0, 0, 0, 0}};
-
-static swig_cast_info *swig_cast_initial[] = {
- _swigc__p_char,
- _swigc__p_gsl_complex,
-};
-
-
-/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
-
-static swig_const_info swig_const_table[] = {
-{0, 0, 0, 0.0, 0, 0}};
-
-#ifdef __cplusplus
-}
-#endif
-/* -----------------------------------------------------------------------------
- * Type initialization:
- * This problem is tough by the requirement that no dynamic
- * memory is used. Also, since swig_type_info structures store pointers to
- * swig_cast_info structures and swig_cast_info structures store pointers back
- * to swig_type_info structures, we need some lookup code at initialization.
- * The idea is that swig generates all the structures that are needed.
- * The runtime then collects these partially filled structures.
- * The SWIG_InitializeModule function takes these initial arrays out of
- * swig_module, and does all the lookup, filling in the swig_module.types
- * array with the correct data and linking the correct swig_cast_info
- * structures together.
- *
- * The generated swig_type_info structures are assigned staticly to an initial
- * array. We just loop through that array, and handle each type individually.
- * First we lookup if this type has been already loaded, and if so, use the
- * loaded structure instead of the generated one. Then we have to fill in the
- * cast linked list. The cast data is initially stored in something like a
- * two-dimensional array. Each row corresponds to a type (there are the same
- * number of rows as there are in the swig_type_initial array). Each entry in
- * a column is one of the swig_cast_info structures for that type.
- * The cast_initial array is actually an array of arrays, because each row has
- * a variable number of columns. So to actually build the cast linked list,
- * we find the array of casts associated with the type, and loop through it
- * adding the casts to the list. The one last trick we need to do is making
- * sure the type pointer in the swig_cast_info struct is correct.
- *
- * First off, we lookup the cast->type name to see if it is already loaded.
- * There are three cases to handle:
- * 1) If the cast->type has already been loaded AND the type we are adding
- * casting info to has not been loaded (it is in this module), THEN we
- * replace the cast->type pointer with the type pointer that has already
- * been loaded.
- * 2) If BOTH types (the one we are adding casting info to, and the
- * cast->type) are loaded, THEN the cast info has already been loaded by
- * the previous module so we just ignore it.
- * 3) Finally, if cast->type has not already been loaded, then we add that
- * swig_cast_info to the linked list (because the cast->type) pointer will
- * be correct.
- * ----------------------------------------------------------------------------- */
-
-#ifdef __cplusplus
-extern "C" {
-#if 0
-} /* c-mode */
-#endif
-#endif
-
-#if 0
-#define SWIGRUNTIME_DEBUG
-#endif
-
-
-SWIGRUNTIME void
-SWIG_InitializeModule(void *clientdata) {
- size_t i;
- swig_module_info *module_head, *iter;
- int found;
-
- clientdata = clientdata;
-
- /* check to see if the circular list has been setup, if not, set it up */
- if (swig_module.next==0) {
- /* Initialize the swig_module */
- swig_module.type_initial = swig_type_initial;
- swig_module.cast_initial = swig_cast_initial;
- swig_module.next = &swig_module;
- }
-
- /* Try and load any already created modules */
- module_head = SWIG_GetModule(clientdata);
- if (!module_head) {
- /* This is the first module loaded for this interpreter */
- /* so set the swig module into the interpreter */
- SWIG_SetModule(clientdata, &swig_module);
- module_head = &swig_module;
- } else {
- /* the interpreter has loaded a SWIG module, but has it loaded this one? */
- found=0;
- iter=module_head;
- do {
- if (iter==&swig_module) {
- found=1;
- break;
- }
- iter=iter->next;
- } while (iter!= module_head);
-
- /* if the is found in the list, then all is done and we may leave */
- if (found) return;
- /* otherwise we must add out module into the list */
- swig_module.next = module_head->next;
- module_head->next = &swig_module;
- }
-
- /* Now work on filling in swig_module.types */
-#ifdef SWIGRUNTIME_DEBUG
- printf("SWIG_InitializeModule: size %d\n", swig_module.size);
-#endif
- for (i = 0; i < swig_module.size; ++i) {
- swig_type_info *type = 0;
- swig_type_info *ret;
- swig_cast_info *cast;
-
-#ifdef SWIGRUNTIME_DEBUG
- printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
-#endif
-
- /* if there is another module already loaded */
- if (swig_module.next != &swig_module) {
- type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
- }
- if (type) {
- /* Overwrite clientdata field */
-#ifdef SWIGRUNTIME_DEBUG
- printf("SWIG_InitializeModule: found type %s\n", type->name);
-#endif
- if (swig_module.type_initial[i]->clientdata) {
- type->clientdata = swig_module.type_initial[i]->clientdata;
-#ifdef SWIGRUNTIME_DEBUG
- printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
-#endif
- }
- } else {
- type = swig_module.type_initial[i];
- }
-
- /* Insert casting types */
- cast = swig_module.cast_initial[i];
- while (cast->type) {
- /* Don't need to add information already in the list */
- ret = 0;
-#ifdef SWIGRUNTIME_DEBUG
- printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
-#endif
- if (swig_module.next != &swig_module) {
- ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
-#ifdef SWIGRUNTIME_DEBUG
- if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
-#endif
- }
- if (ret) {
- if (type == swig_module.type_initial[i]) {
-#ifdef SWIGRUNTIME_DEBUG
- printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
-#endif
- cast->type = ret;
- ret = 0;
- } else {
- /* Check for casting already in the list */
- swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
-#ifdef SWIGRUNTIME_DEBUG
- if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
-#endif
- if (!ocast) ret = 0;
- }
- }
-
- if (!ret) {
-#ifdef SWIGRUNTIME_DEBUG
- printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
-#endif
- if (type->cast) {
- type->cast->prev = cast;
- cast->next = type->cast;
- }
- type->cast = cast;
- }
- cast++;
- }
- /* Set entry in modules->types array equal to the type */
- swig_module.types[i] = type;
- }
- swig_module.types[i] = 0;
-
-#ifdef SWIGRUNTIME_DEBUG
- printf("**** SWIG_InitializeModule: Cast List ******\n");
- for (i = 0; i < swig_module.size; ++i) {
- int j = 0;
- swig_cast_info *cast = swig_module.cast_initial[i];
- printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
- while (cast->type) {
- printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
- cast++;
- ++j;
- }
- printf("---- Total casts: %d\n",j);
- }
- printf("**** SWIG_InitializeModule: Cast List ******\n");
-#endif
-}
-
-/* This function will propagate the clientdata field of type to
-* any new swig_type_info structures that have been added into the list
-* of equivalent types. It is like calling
-* SWIG_TypeClientData(type, clientdata) a second time.
-*/
-SWIGRUNTIME void
-SWIG_PropagateClientData(void) {
- size_t i;
- swig_cast_info *equiv;
- static int init_run = 0;
-
- if (init_run) return;
- init_run = 1;
-
- for (i = 0; i < swig_module.size; i++) {
- if (swig_module.types[i]->clientdata) {
- equiv = swig_module.types[i]->cast;
- while (equiv) {
- if (!equiv->converter) {
- if (equiv->type && !equiv->type->clientdata)
- SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
- }
- equiv = equiv->next;
- }
- }
- }
-}
-
-#ifdef __cplusplus
-#if 0
-{
- /* c-mode */
-#endif
-}
-#endif
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* Python-specific SWIG API */
-#define SWIG_newvarlink() SWIG_Python_newvarlink()
-#define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr)
-#define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants)
-
- /* -----------------------------------------------------------------------------
- * global variable support code.
- * ----------------------------------------------------------------------------- */
-
- typedef struct swig_globalvar {
- char *name; /* Name of global variable */
- PyObject *(*get_attr)(void); /* Return the current value */
- int (*set_attr)(PyObject *); /* Set the value */
- struct swig_globalvar *next;
- } swig_globalvar;
-
- typedef struct swig_varlinkobject {
- PyObject_HEAD
- swig_globalvar *vars;
- } swig_varlinkobject;
-
- SWIGINTERN PyObject *
- swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) {
- return PyString_FromString("<Swig global variables>");
- }
-
- SWIGINTERN PyObject *
- swig_varlink_str(swig_varlinkobject *v) {
- PyObject *str = PyString_FromString("(");
- swig_globalvar *var;
- for (var = v->vars; var; var=var->next) {
- PyString_ConcatAndDel(&str,PyString_FromString(var->name));
- if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", "));
- }
- PyString_ConcatAndDel(&str,PyString_FromString(")"));
- return str;
- }
-
- SWIGINTERN int
- swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) {
- PyObject *str = swig_varlink_str(v);
- fprintf(fp,"Swig global variables ");
- fprintf(fp,"%s\n", PyString_AsString(str));
- Py_DECREF(str);
- return 0;
- }
-
- SWIGINTERN void
- swig_varlink_dealloc(swig_varlinkobject *v) {
- swig_globalvar *var = v->vars;
- while (var) {
- swig_globalvar *n = var->next;
- free(var->name);
- free(var);
- var = n;
- }
- }
-
- SWIGINTERN PyObject *
- swig_varlink_getattr(swig_varlinkobject *v, char *n) {
- PyObject *res = NULL;
- swig_globalvar *var = v->vars;
- while (var) {
- if (strcmp(var->name,n) == 0) {
- res = (*var->get_attr)();
- break;
- }
- var = var->next;
- }
- if (res == NULL && !PyErr_Occurred()) {
- PyErr_SetString(PyExc_NameError,"Unknown C global variable");
- }
- return res;
- }
-
- SWIGINTERN int
- swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) {
- int res = 1;
- swig_globalvar *var = v->vars;
- while (var) {
- if (strcmp(var->name,n) == 0) {
- res = (*var->set_attr)(p);
- break;
- }
- var = var->next;
- }
- if (res == 1 && !PyErr_Occurred()) {
- PyErr_SetString(PyExc_NameError,"Unknown C global variable");
- }
- return res;
- }
-
- SWIGINTERN PyTypeObject*
- swig_varlink_type(void) {
- static char varlink__doc__[] = "Swig var link object";
- static PyTypeObject varlink_type;
- static int type_init = 0;
- if (!type_init) {
- const PyTypeObject tmp
- = {
- PyObject_HEAD_INIT(NULL)
- 0, /* Number of items in variable part (ob_size) */
- (char *)"swigvarlink", /* Type name (tp_name) */
- sizeof(swig_varlinkobject), /* Basic size (tp_basicsize) */
- 0, /* Itemsize (tp_itemsize) */
- (destructor) swig_varlink_dealloc, /* Deallocator (tp_dealloc) */
- (printfunc) swig_varlink_print, /* Print (tp_print) */
- (getattrfunc) swig_varlink_getattr, /* get attr (tp_getattr) */
- (setattrfunc) swig_varlink_setattr, /* Set attr (tp_setattr) */
- 0, /* tp_compare */
- (reprfunc) swig_varlink_repr, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- (reprfunc)swig_varlink_str, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- 0, /* tp_flags */
- varlink__doc__, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
-#if PY_VERSION_HEX >= 0x02020000
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */
-#endif
-#if PY_VERSION_HEX >= 0x02030000
- 0, /* tp_del */
-#endif
-#ifdef COUNT_ALLOCS
- 0,0,0,0 /* tp_alloc -> tp_next */
-#endif
- };
- varlink_type = tmp;
- varlink_type.ob_type = &PyType_Type;
- type_init = 1;
- }
- return &varlink_type;
- }
-
- /* Create a variable linking object for use later */
- SWIGINTERN PyObject *
- SWIG_Python_newvarlink(void) {
- swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type());
- if (result) {
- result->vars = 0;
- }
- return ((PyObject*) result);
- }
-
- SWIGINTERN void
- SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) {
- swig_varlinkobject *v = (swig_varlinkobject *) p;
- swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar));
- if (gv) {
- size_t size = strlen(name)+1;
- gv->name = (char *)malloc(size);
- if (gv->name) {
- strncpy(gv->name,name,size);
- gv->get_attr = get_attr;
- gv->set_attr = set_attr;
- gv->next = v->vars;
- }
- }
- v->vars = gv;
- }
-
- SWIGINTERN PyObject *
- SWIG_globals(void) {
- static PyObject *_SWIG_globals = 0;
- if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink();
- return _SWIG_globals;
- }
-
- /* -----------------------------------------------------------------------------
- * constants/methods manipulation
- * ----------------------------------------------------------------------------- */
-
- /* Install Constants */
- SWIGINTERN void
- SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) {
- PyObject *obj = 0;
- size_t i;
- for (i = 0; constants[i].type; ++i) {
- switch(constants[i].type) {
- case SWIG_PY_POINTER:
- obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0);
- break;
- case SWIG_PY_BINARY:
- obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype));
- break;
- default:
- obj = 0;
- break;
- }
- if (obj) {
- PyDict_SetItemString(d, constants[i].name, obj);
- Py_DECREF(obj);
- }
- }
- }
-
- /* -----------------------------------------------------------------------------*/
- /* Fix SwigMethods to carry the callback ptrs when needed */
- /* -----------------------------------------------------------------------------*/
-
- SWIGINTERN void
- SWIG_Python_FixMethods(PyMethodDef *methods,
- swig_const_info *const_table,
- swig_type_info **types,
- swig_type_info **types_initial) {
- size_t i;
- for (i = 0; methods[i].ml_name; ++i) {
- const char *c = methods[i].ml_doc;
- if (c && (c = strstr(c, "swig_ptr: "))) {
- int j;
- swig_const_info *ci = 0;
- const char *name = c + 10;
- for (j = 0; const_table[j].type; ++j) {
- if (strncmp(const_table[j].name, name,
- strlen(const_table[j].name)) == 0) {
- ci = &(const_table[j]);
- break;
- }
- }
- if (ci) {
- size_t shift = (ci->ptype) - types;
- swig_type_info *ty = types_initial[shift];
- size_t ldoc = (c - methods[i].ml_doc);
- size_t lptr = strlen(ty->name)+2*sizeof(void*)+2;
- char *ndoc = (char*)malloc(ldoc + lptr + 10);
- if (ndoc) {
- char *buff = ndoc;
- void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0;
- if (ptr) {
- strncpy(buff, methods[i].ml_doc, ldoc);
- buff += ldoc;
- strncpy(buff, "swig_ptr: ", 10);
- buff += 10;
- SWIG_PackVoidPtr(buff, ptr, ty->name, lptr);
- methods[i].ml_doc = ndoc;
- }
- }
- }
- }
- }
- }
-
-#ifdef __cplusplus
-}
-#endif
-
-/* -----------------------------------------------------------------------------*
- * Partial Init method
- * -----------------------------------------------------------------------------*/
-
-#ifdef __cplusplus
-extern "C"
-#endif
-SWIGEXPORT void SWIG_init(void) {
- PyObject *m, *d;
-
- /* Fix SwigMethods to carry the callback ptrs when needed */
- SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial);
-
- m = Py_InitModule((char *) SWIG_name, SwigMethods);
- d = PyModule_GetDict(m);
-
- SWIG_InitializeModule(0);
- SWIG_InstallConstants(d,swig_const_table);
-
-
-}
-
diff --git a/TamTamSynthLab.activity/common/Util/ControlStream.py b/TamTamSynthLab.activity/common/Util/ControlStream.py
deleted file mode 100644
index eea3150..0000000
--- a/TamTamSynthLab.activity/common/Util/ControlStream.py
+++ /dev/null
@@ -1,254 +0,0 @@
-import sys
-import types
-import time
-
-import common.Config as Config
-
-import os
-
-from common.Util import NoteDB
-from common.Util.CSoundNote import CSoundNote
-from common.Util.CSoundClient import new_csound_client
-
-import common.Util.InstrumentDB as InstrumentDB
-
-try:
- from Jam import Block
-except:
- pass # we're not in Jam mode
-
-class TamTamOStream:
- def __init__(self, file):
- self.file = file
- self.instrumentDB = InstrumentDB.getRef()
-
- def note_add(self, note):
- l = ['note_add', note.id, note.page, note.track,
- note.cs.onset,
- note.cs.pitch,
- note.cs.amplitude,
- note.cs.pan,
- note.cs.duration,
- note.cs.trackId,
- note.cs.instrumentId,
- note.cs.attack,
- note.cs.decay,
- note.cs.reverbSend,
- note.cs.filterType,
- note.cs.filterCutoff,
- int(note.cs.tied),
- note.cs.mode]
-
- self.file.write( " ".join([str(i) for i in l]))
- self.file.write('\n')
-
- def page_add(self, pid, page):
- l = [ 'page_add', str(pid), str(page.beats), str(page.color), str( [ self.instrumentDB.getInstrument(i).name for i in page.instruments ] ) ]
- self.file.write( " ".join([str(i) for i in l]))
- self.file.write('\n')
-
- def track_vol(self, vols):
- self.file.write('track_vol ')
- self.file.write(" ".join([str(t) for t in vols]))
- self.file.write('\n')
-
- def master_vol(self, volume):
- self.file.write('master_vol ')
- self.file.write(str(volume))
- self.file.write('\n')
-
- def tempo(self, tempo):
- self.file.write('tempo ')
- self.file.write(str(tempo))
- self.file.write('\n')
-
- def block_add( self, typeStr, active, centerX, centerY, child, data ):
- if typeStr == "Drum" or typeStr == "Instrument":
- realId = data["id"] # don't overwrite the block's data
- data["id"] = self.instrumentDB.getInstrument( data["id"] ).name
- l = [ "block_add", typeStr, str(active), str(centerX), str(centerY), str(child), str(data) ]
- self.file.write( " ".join([str(i) for i in l]))
- self.file.write('\n')
- if typeStr == "Drum" or typeStr == "Instrument":
- data["id"] = realId
-
- def desktop_store( self, filename, id ):
- self.file.write( "desktop_store %d\n" % id )
- try:
- file = open( filename, "r" )
- for line in file:
- self.file.write( line )
- file.close()
- except:
- if Config.DEBUG > 3: print "ERROR:: desktop_store could not open file: " + filename
- self.file.write( "desktop_store END\n" )
-
- def desktop_set( self, id ):
- self.file.write( "desktop_set %d\n" % id )
-
- def sync_beats( self, beats ):
- self.file.write( "sync_beats %d\n" % beats )
-
-class TamTamTable:
-
- def __init__(self, noteDB = None, jam = None ):
- self.noteDB = noteDB
- self.jam = jam
- self.csnd = new_csound_client()
- self.pid = {} #stream_pid : local_pid
- self.instrumentDB = InstrumentDB.getRef()
-
- def parseTable(self):
- return {
- 'note_set':self.note_set,
- 'note_add':self.note_add,
- 'page_add':self.page_add,
- 'page_set':self.page_set,
- 'track_vol':self.track_vol,
- 'master_vol':self.master_vol,
- 'tempo':self.tempo,
- 'block_add':self.block_add,
- 'desktop_store':self.desktop_store,
- 'desktop_set':self.desktop_set,
- 'sync_beats':self.sync_beats,
- 'sleep':self.sleep,
- 'quit':self.quit}
-
- def parseFile(self, ifile):
- table = self.parseTable()
- self.file = ifile
- for l in self.file:
- #print "---", l
- cmdlist = l.split()
- if len(cmdlist) > 0:
- if cmdlist[0] not in table:
- print 'ERROR: skipping command %s not found in parse table' % cmdlist[0]
- else:
- table[cmdlist[0]](cmdlist[1:])
-
- def note_add(self, argv):
- if Config.DEBUG > 3: print 'note_add', argv
-
- nid = int(argv[0])
- page = self.pid[int(argv[1])]
- track = int(argv[2])
- instId = self.noteDB.getPage( page ).instruments[ track ]
- cs = CSoundNote(
- int(argv[3]),
- int(argv[4]),
- float(argv[5]),
- float(argv[6]),
- float(argv[7]),
- int(argv[8]),
- instId,
- float(argv[10]),
- float(argv[11]),
- float(argv[12]),
- float(argv[13]),
- float(argv[14]),
- bool(argv[15]),
- argv[16])
-
- self.noteDB.addNote( -1, page, track, cs )
-
- def note_set(self, argv):
- print 'note_set', argv
-
- def page_add(self, argv):
- if Config.DEBUG > 3: print 'page_add', argv
- pid = int (argv[0])
- beats = int (argv[1])
- color = int( argv[2] )
- insts = ""
- for str in argv[3:]:
- insts += str
- #print pid, insts
- instrumentNames = eval( insts )
- instruments = [ self.instrumentDB.getInstrumentByName( i ).instrumentId for i in instrumentNames ]
- for id in instruments:
- i = self.instrumentDB.getInstrument( id )
- if i.kit == None:
- self.csnd.load_instrument(i.name)
- else:
- self.csnd.load_drumkit(i.name)
- if len( self.noteDB.tune ):
- after = self.noteDB.tune[-1]
- else:
- after = False
- self.pid[pid] = self.noteDB.addPage(-1, NoteDB.Page(beats,color,instruments), after)
-
- def page_set(self, argv):
- print 'page_set', argv
-
- def track_vol(self, argv):
- self.tracks_volume = []
- for i in range(len(argv)):
- self.tracks_volume.append(float(argv[i]))
-
- def master_vol(self, argv):
- self.masterVolume = eval( argv[0] )
-
- def tempo(self, argv):
- self.tempo = eval( argv[0] )
-
- def block_add( self, argv ):
- blockClass = Block.StrToClass[argv[0]]
- active = eval( argv[1] )
- x = int( argv[2] )
- y = int( argv[3] )
- child = eval( argv[4] )
- data = ""
- for str in argv[5:]:
- data += str
- data = eval( data )
-
- if blockClass == Block.Drum:
- data["page"] = self.pid[ data["page"] ]
- data["id"] = self.instrumentDB.getInstrumentByName( data["id"] ).instrumentId
- elif blockClass == Block.Instrument:
- data["id"] = self.instrumentDB.getInstrumentByName( data["id"] ).instrumentId
- elif blockClass == Block.Loop:
- data["id"] = self.pid[ data["id"] ]
- self.jam.updateLoopImage( data["id"] )
-
- if child:
- block = blockClass( self.jam.getDesktop(), data )
- self.lastBlock.addChild( block )
- else:
- block = self.jam.getDesktop().addBlock( blockClass, data, ( x, y ) )
-
- block.setPlaced( True )
-
- if blockClass == Block.Instrument and active:
- self.jam.getDesktop().activateInstrument( block )
-
- self.lastBlock = block
-
- def desktop_store( self, argv ):
- filename = self.jam.getDesktopScratchFile( int( argv[0] ) )
- #try:
- if os.path.isfile( filename ):
- os.remove( filename )
-
- file = open( filename, "w" )
- for line in self.file:
- if line == "desktop_store END\n":
- break
- file.write( line )
- file.close
- #except:
- # if Config.DEBUG > 3: print "ERROR:: desktop_store could not open file: " + filename
-
- def desktop_set( self, argv ):
- self.jam.setDesktop( int( argv[0] ), True )
-
- def sync_beats( self, argv ):
- self.jam.setSyncBeats( int( argv[0] ) )
-
- def sleep(self, argv):
- t = float(argv[0])
- print 'sleeping for %i seconds' % t
- time.sleep(t)
- def quit(self, argv):
- print 'quitting...'
- sys.exit(0)
diff --git a/TamTamSynthLab.activity/common/Util/Credits.py b/TamTamSynthLab.activity/common/Util/Credits.py
deleted file mode 100644
index c8d2644..0000000
--- a/TamTamSynthLab.activity/common/Util/Credits.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-import pygtk
-pygtk.require( '2.0' )
-import gtk
-
-class Credits( gtk.Window ):
- def __init__(self , handleCreditsCloseCallback , pos):
- gtk.Window.__init__( self, gtk.WINDOW_TOPLEVEL )
- self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
- self.connect('destroy' , self.destroy)
- #self.set_decorated(False)
- self.handleCreditsCloseCallback = handleCreditsCloseCallback
- self.move(pos[0] , pos[1])
-
- self.vbox = gtk.VBox()
- self.tb = gtk.TextBuffer()
- self.tb.set_text('miniTamTam\n\nby\n\nOlivier Bélanger\nJames Bergstra\nEric Lamothe\nNathanaël Lécaudé\nAdrian Martin\nJean Piché\nSean Wood\n\nThanks to\n\nBarry Vercoe\nVictor Lazzarini\nMarco Pesenti Gritti\nSimon Schampijer\nPeter Kirn\n\nUniversité de Montréal 2006')
- self.tw = gtk.TextView(buffer = self.tb)
- self.tw.set_editable(False)
- self.tw.set_cursor_visible(False)
- #self.tw.set_right_margin(10)
- #self.tw.set_left_margin(10)
- self.tw.set_justification(gtk.JUSTIFY_CENTER)
- self.vbox.add(self.tw)
-
- self.closeButton = gtk.Button(label='X')
- self.closeButton.connect('clicked' , self.destroy)
- self.vbox.add(self.closeButton)
- self.add(self.vbox)
- self.show_all()
-
- def destroy(self, widget):
- self.handleCreditsCloseCallback(False)
- self.hide_all()
-
-
-if __name__ == '__main__':
- credits = Credits()
- gtk.main() \ No newline at end of file
diff --git a/TamTamSynthLab.activity/common/Util/InstrumentDB.py b/TamTamSynthLab.activity/common/Util/InstrumentDB.py
deleted file mode 100644
index ac72a19..0000000
--- a/TamTamSynthLab.activity/common/Util/InstrumentDB.py
+++ /dev/null
@@ -1,140 +0,0 @@
-import os
-
-##############
-## SOUNDS
-##############
-
-class Instrument:
- def __init__(self, id):
- self.instrumentId = id
- self.kitStage = False
- self.volatile = None
-
- # build an Instrument instance from argument list
- def loadFromArgs( self, name, csoundInstrumentId, register, loopStart,
- loopEnd, crossDur, ampScale, kit, wav, img, category, nameTooltip = "" ):
- self.name = name
- self.csoundInstrumentId = csoundInstrumentId
- self.instrumentRegister = register
- self.loopStart = loopStart
- self.loopEnd = loopEnd
- self.crossDur = crossDur
- self.ampScale = ampScale
- self.kit = kit
- self.wav = wav
- self.img = img
- self.category = category
- self.nameTooltip = nameTooltip
-
- # build an Instrument instance by parsing a file
- def loadFromPath(self, path ):
- f = file(path, 'r')
- magic = f.readline()[:-1]
- if (magic != 'TamTam idf v1'):
- raise 'given file has wrong header'
- self.name = f.readline()[:-1]
- self.csoundInstrumentId = float(f.readline()[:-1])
- self.register = f.readline()[:-1]
- self.loopStart = float( f.readline()[:-1])
- self.loopEnd = float( f.readline()[:-1])
- self.crossDur = float( f.readline()[:-1])
- self.ampScale = float( f.readline()[:-1])
- self.kit = None
- self.wav = f.readline()[:-1]
- self.img = f.readline()[:-1]
- self.category = f.readline()
- f.close()
-
-class InstrumentDB:
-
- # initialize an empty InstrumentDB instance
- def __init__(self):
- self.labelSet = {'All':set([])} # <key> -> all instruments labelled by <key>
- self.inst = [] # all instruments
- self.instNamed = {} # <name> -> instrument with that name
- self.instId = {} # <instrumentId> -> instrument
-
- # TEMP? add instrument from args
- def addInstrumentFromArgs( self, name, csoundInstrumentId, register, loopStart,
- loopEnd, crossDur, ampScale, kit, wav, img, category,
- kitStage = False, volatile = False, nameTooltip = "" ):
- i = Instrument(len(self.inst))
- self.inst += [ i ]
- i.loadFromArgs( name, csoundInstrumentId, register, loopStart, loopEnd, crossDur, ampScale, kit, wav, img, category, nameTooltip )
- i.kitStage = kitStage
- if volatile: i.volatile = 0
- self.instNamed[ i.name ] = i
- self.instId[i.instrumentId] = i
-
- self.labelSet['All'].add(i)
- if not self.labelSet.has_key(category):
- self.labelSet[category] = set([])
- self.labelSet[category].add( i )
-
- # add an instrument to the DB by reading from an instrument definition file
- def addInstrument( self, path ):
- from common.Util.CSoundClient import new_csound_client
- csnd = new_csound_client()
- i = Instrument(len(self.inst))
- self.inst += [ i ]
- i.loadFromPath( path )
- self.instNamed[ i.name ] = i
- self.instId[i.instrumentId] = i
- #print 'labelSet... ', self.labelSet
- self.labelSet['All'].add(i)
- if not self.labelSet.has_key(category):
- self.labelSet[category] = set([])
- self.labelSet[category].add( i )
- csnd.load_instrument(i.name)
-
- # try to load each file in a given folder as an instrument def. file
- def scanInstrumentDir( self, path ):
- dirlist = os.listdir( path )
- for fpath in dirlist:
- try :
- self.addInstrument( path + fpath )
- except :
- print 'ERROR: scanning instrument path %s: file %s invalid' % (path, fpath)
-
- def getLabels( self ):
- return self.labelSet.keys()
-
- def getSet( self, label ):
- return self.labelSet[label]
-
- def getInstrument( self, id ):
- return self.instId[id]
-
- def getInstrumentByName( self, name ):
- try:
- return self.instNamed[ name ]
- except:
- print "Instrument not found: ", name
- return self.inst[0]
-
- def debug_summarize(self):
- for i in self.inst:
- print i.id, i.name
-
- for l in self.labelSet:
- print l, [ i.name for i in self.labelSet[l]]
-
-
-db_instance = None
-def getRef():
- global db_instance
- if (None == db_instance):
- db_instance = InstrumentDB()
- return db_instance
-
-
-if __name__ == "__main__":
- i1 = getRef()
- i2 = getRef()
-
- print i1, i2
-
- import sys
- i1.scanInstrumentDir( sys.argv[1] )
-
- i1.debug_summarize()
diff --git a/TamTamSynthLab.activity/common/Util/InstrumentPanel.py b/TamTamSynthLab.activity/common/Util/InstrumentPanel.py
deleted file mode 100644
index 014d794..0000000
--- a/TamTamSynthLab.activity/common/Util/InstrumentPanel.py
+++ /dev/null
@@ -1,379 +0,0 @@
-import pygtk
-pygtk.require( '2.0' )
-import gtk
-
-import time
-
-import common.Util.InstrumentDB as InstrumentDB
-import common.Config as Config
-from common.Util.ThemeWidgets import *
-Tooltips = Config.Tooltips
-
-class InstrumentPanel( gtk.EventBox ):
- def __init__(self,setInstrument = None, playInstrument = None, enterMode = False, micRec = None, synthRec = None, rowLen = 8, _instDic = None, force_load = True ):
- gtk.EventBox.__init__(self)
-
- self.instrumentDB = InstrumentDB.getRef()
- self.setInstrument = setInstrument
- self.playInstrument = playInstrument
- self.micRec = micRec
- self.synthRec = synthRec
- self.rowLen = rowLen
- self.enterMode = enterMode
-
- self.instDic = _instDic
-
- self.loaded = False
- self.loadData = {}
- self.loadStage = [0,0,0]
- if force_load: self.load()
-
- def configure( self, setInstrument = None, playInstrument = None, enterMode = False, micRec = None, synthRec = None, rowLen = 8 ):
-
- self.setInstrument = setInstrument
- self.playInstrument = playInstrument
- self.enterMode = enterMode
- self.micRec = micRec
-
- if self.rowLen != rowLen:
- self.rowLen = rowLen
- self.prepareInstrumentTable( self.category )
- else:
- self.rowLen = rowLen
-
- def load( self, timeout = -1 ):
- if self.loaded: return True
- if Config.DEBUG > 4: print "InstrumentPanel load", self.loadStage
-
- if self.loadStage[0] == 0:
- color = gtk.gdk.color_parse(Config.PANEL_BCK_COLOR)
- self.modify_bg(gtk.STATE_NORMAL, color)
- self.loadStage[0] = 1
- if timeout >= 0 and time.time() > timeout: return False
-
- if self.loadStage[0] == 1:
- self.tooltips = gtk.Tooltips()
- self.loadStage[0] = 2
- if timeout >= 0 and time.time() > timeout: return False
-
- if self.loadStage[0] == 2:
- self.instTable = None
- self.recstate = False
- self.lastInstrumentWidget = None
-
- self.mainVBox = gtk.VBox()
- self.loadStage[0] = 3
- if timeout >= 0 and time.time() > timeout: return False
-
- if self.loadStage[0] == 3:
- if not self.loadInstrumentList( timeout, self.loadStage ):
- return False
- self.loadStage[0] = 4
- if timeout >= 0 and time.time() > timeout: return False
-
- if self.loadStage[0] == 4:
- if not self.loadToolbar( timeout, self.loadStage ):
- return False
- self.loadStage[0] = 5
- if timeout >= 0 and time.time() > timeout: return False
-
- if self.loadStage[0] == 5:
- if self.instDic == None:
- self.instDic = {}
- self.loadStage[0] = 5.1
- else:
- self.loadStage[0] = 6
-
- if self.loadStage[0] == 5.1:
- if not self.loadInstDic( self.instDic, timeout, self.loadStage ):
- return False
- self.loadStage[0] = 6
- if timeout >= 0 and time.time() > timeout: return False
-
- if self.loadStage[0] == 6:
- self.loadInstrumentViewport()
- self.loadStage[0] = 7
- if timeout >= 0 and time.time() > timeout: return False
-
- if self.loadStage[0] == 7:
- self.prepareInstrumentTable()
- self.loadStage[0] = 8
- if timeout >= 0 and time.time() > timeout: return False
-
- self.add(self.mainVBox)
- self.show_all()
-
- self.loaded = True
- return True
-
- def loadInstrumentList( self, timeout = -1, loadStage = [0,0,0] ):
-
- if loadStage[1] == 0:
- self.instrumentList = { "all": [], "all.enterMode": [], "percussions.enterMode": [], "lab": [], "mic": [], "kit": [] }
- for category in Config.CATEGORIES:
- self.instrumentList[category] = []
- loadStage[1] = 1
- if timeout >= 0 and time.time() > timeout: return False
-
- if loadStage[1] == 1:
- keys = self.instrumentDB.instNamed.keys()
- for i in range(loadStage[2], len(keys)):
- key = keys[i]
- instrument = self.instrumentDB.instNamed[key]
- if key[0:4] != 'drum' and key[0:4] != 'guid' and key[0:3] != 'mic' and key[0:3] != 'lab':
- self.instrumentList["all"].append( key )
- if key[0:4] != 'drum' and key[0:4] != 'guid' and key[0:3] != 'mic' and key[0:3] != 'lab':
- self.instrumentList["all.enterMode"].append( key )
- if key[0:4] != 'drum' and key[0:4] != 'guid':
- self.instrumentList[instrument.category].append( key )
- if instrument.category == "percussions":
- self.instrumentList["percussions.enterMode"].append( key )
- if instrument.category == "kit":
- self.instrumentList["kit"].append( key )
- loadStage[2] += 1
- if timeout >= 0 and time.time() > timeout: return False
-
- loadStage[1] = 2
- loadStage[2] = 0
-
- self.instrumentList["mic"].sort()
- self.instrumentList["lab"].sort()
-
- self.instrumentList["all"] += self.instrumentList["kit"] + self.instrumentList["mic"] + self.instrumentList["lab"]
- self.instrumentList["all.enterMode"] += self.instrumentList["mic"] + self.instrumentList["lab"]
- self.instrumentList["percussions"] += self.instrumentList["kit"]
- self.instrumentList["people"] += self.instrumentList["mic"]
- self.instrumentList["keyboard"] += self.instrumentList["lab"]
-
- loadStage[1] = 0
- return True
-
- def loadToolbar( self, timeout = -1, loadStage = [0,0,0] ):
- if loadStage[1] == 0:
- self.loadData["toolbarBox"] = gtk.HBox()
- self.firstTbBtn = None
- self.loadStage[1] = 1
- if timeout >= 0 and time.time() > timeout: return False
-
- for i in range(loadStage[1]-1, len(Config.CATEGORIES)):
- category = Config.CATEGORIES[i]
- if loadStage[2] == 0:
- self.loadData["btnBox"] = RoundVBox(fillcolor = Config.CATEGORY_BCK_COLOR, bordercolor = Config.PANEL_BCK_COLOR, radius = Config.PANEL_RADIUS)
- self.loadData["btnBox"].set_border_width(Config.PANEL_SPACING)
- loadStage[2] = 1
- if timeout >= 0 and time.time() > timeout: return False
-
- if loadStage[2] == 1:
- self.loadData["btn"] = ImageRadioButton(self.firstTbBtn,Config.IMAGE_ROOT + category + '.png', Config.IMAGE_ROOT + category + 'sel.png', Config.IMAGE_ROOT + category + 'sel.png')
- loadStage[2] = 2
- if timeout >= 0 and time.time() > timeout: return False
-
- if self.firstTbBtn == None:
- self.firstTbBtn = self.loadData["btn"]
- self.loadData["btn"].connect('clicked',self.handleToolbarBtnPress,category)
- self.loadData["btnBox"].add(self.loadData["btn"])
- self.loadData["toolbarBox"].pack_start(self.loadData["btnBox"],True,True)
-
- loadStage[2] = 0
- loadStage[1] += 1
- if timeout >= 0 and time.time() > timeout: return False
-
- self.mainVBox.pack_start(self.loadData["toolbarBox"],False,False)
-
- self.loadData.pop("btn")
- self.loadData.pop("btnBox")
- self.loadData.pop("toolbarBox")
- loadStage[1] = 0
- return True
-
- def loadInstDic( self, instDic, timeout = -1, loadStage = [0,0,0] ):
-
- if loadStage[1] == 0:
- self.firstInstButton = None
- self.loadData["len"] = len(self.instrumentList['all'])
- loadStage[1] = 1
- if timeout >= 0 and time.time() > timeout: return False
-
-
- for i in range( loadStage[1]-1, self.loadData["len"] ):
- instrument = self.instrumentList["all"][i]
- if loadStage[2] == 0:
- self.loadData["instBox"] = RoundVBox(fillcolor = Config.INST_BCK_COLOR, bordercolor = Config.INSTRUMENT_GRID_COLOR, radius = Config.PANEL_RADIUS)
- self.loadData["instBox"].set_border_width(Config.PANEL_SPACING)
- loadStage[2] = 1
- if timeout >= 0 and time.time() > timeout: return False
-
- if loadStage[2] == 1:
- try:
- self.loadData["instButton"] = ImageRadioButton(self.firstInstButton, Config.IMAGE_ROOT + instrument + '.png' , Config.IMAGE_ROOT + instrument + 'sel.png', Config.IMAGE_ROOT + instrument + 'sel.png')
- except:
- self.loadData["instButton"] = ImageRadioButton(self.firstInstButton, Config.IMAGE_ROOT + 'generic.png' , Config.IMAGE_ROOT + 'genericsel.png', Config.IMAGE_ROOT + 'genericsel.png')
- loadStage[2] = 2
- if timeout >= 0 and time.time() > timeout: return False
-
- if loadStage[2] == 2:
- self.loadData["instButton"].clickedHandler = self.loadData["instButton"].connect('clicked',self.handleInstrumentButtonClick, instrument)
- self.loadData["instButton"].connect('enter',self.handleInstrumentButtonEnter, instrument)
- loadStage[2] = 3
- if timeout >= 0 and time.time() > timeout: return False
-
- self.loadData["instBox"].pack_start(self.loadData["instButton"],False,False)
- instDic[instrument] = self.loadData["instBox"]
- if self.firstInstButton == None:
- self.firstInstButton = self.loadData["instButton"]
- loadStage[2] = 0
- if timeout >= 0 and time.time() > timeout: return False
-
- loadStage[1] += 1
-
- self.loadData.pop("instBox")
- self.loadData.pop("instButton")
- self.loadData.pop("len")
- loadStage[1] = 0
- return True
-
- def loadInstrumentViewport( self ):
- self.instrumentBox = RoundHBox(fillcolor = Config.INSTRUMENT_GRID_COLOR, bordercolor = Config.PANEL_BCK_COLOR, radius = Config.PANEL_RADIUS)
-
- self.scrollWin = gtk.ScrolledWindow()
- self.scrollWin.set_policy(gtk.POLICY_NEVER,gtk.POLICY_AUTOMATIC)
-
- self.tableEventBox = gtk.EventBox()
- color = gtk.gdk.color_parse(Config.INSTRUMENT_GRID_COLOR)
- self.tableEventBox.modify_bg(gtk.STATE_NORMAL, color)
-
- self.scrollWin.add_with_viewport(self.tableEventBox)
- self.tableEventBox.get_parent().set_shadow_type( gtk.SHADOW_NONE )
- self.instrumentBox.pack_start(self.scrollWin,True,True,0)
- self.mainVBox.pack_start(self.instrumentBox)
- self.show_all()
-
- def prepareInstrumentTable(self,category = 'all'):
-
- self.category = category
-
- if self.enterMode:
- if category == "all": category = "all.enterMode"
- elif category == "percussions": category = "percussions.enterMode"
-
- if self.instTable != None:
- for child in self.instTable.get_children()[:]:
- self.instTable.remove(child)
- self.tableEventBox.remove(self.instTable)
- self.instTable.destroy()
-
- instrumentNum = len(self.instrumentList[category])
- instruments = self.instrumentList[category]
-
- cols = self.rowLen
- if instrumentNum < cols:
- cols = instrumentNum
- rows = (instrumentNum // cols)
- if instrumentNum % cols is not 0: #S'il y a un reste
- rows = rows + 1
-
- self.instTable = gtk.Table(rows,cols,True)
- self.instTable.set_row_spacings(0)
- self.instTable.set_col_spacings(0)
-
- for row in range(rows):
- for col in range(cols):
- if row*cols+col >= instrumentNum:
- break
- instBox = self.instDic[instruments[row*cols+col]]
- self.instTable.attach(instBox, col, col+1, row, row+1, gtk.SHRINK, gtk.SHRINK, 0, 0)
-
- self.tableEventBox.add(self.instTable)
- self.instTable.show_all()
-
- def selectFirstCat(self):
- self.firstTbBtn.set_active(True)
-
- def handleToolbarBtnPress(self, widget, category):
- if widget.get_active():
- self.prepareInstrumentTable(category)
-
- def handleInstrumentButtonClick(self,widget,instrument):
- if widget.get_active() is True and self.recstate == False:
- if self.setInstrument:
- widget.event( gtk.gdk.Event( gtk.gdk.LEAVE_NOTIFY ) ) # fake the leave event
- self.setInstrument(instrument)
- if self.playInstrument: self.playInstrument(instrument)
- if self.enterMode:
- pass #Close the window
-
- def handleInstrumentButtonEnter(self,widget,instrument):
- if self.enterMode and self.playInstrument:
- self.playInstrument(instrument)
-
- def handleMicRecButtonClick(self,widget,mic):
- self.recstate = False
- self.setInstrument(mic)
- if self.micRec: self.micRec(mic)
-
- def handleRecButtonPress(self,widget,btn):
- self.recstate = True
- btn.set_active(True)
-
- def set_activeInstrument(self,instrument, state):
- if len(self.instDic) > 0:
- for key in self.instDic:
- if key == instrument:
- btn = self.instDic[key].get_children()[0]
- btn.handler_block(btn.clickedHandler)
- btn.set_active(state)
- btn.handler_unblock(btn.clickedHandler)
-
-
-class DrumPanel( gtk.EventBox ):
- def __init__(self, setDrum = None):
- gtk.EventBox.__init__(self)
- color = gtk.gdk.color_parse(Config.PANEL_BCK_COLOR)
- self.modify_bg(gtk.STATE_NORMAL, color)
-
- self.setDrum = setDrum
- self.instrumentList = []
- keys = self.instrumentDB.instNamed.keys()
- for key in self.instrumentDB.instNamed.keys():
- if self.instrumentDB.instNamed[key].category == "kit":
- self.instrumentList.append( key )
- self.instrumentList.sort()
- self.drawDrums()
-
- def drawDrums(self):
- firstBtn = None
- btnBox = RoundHBox(fillcolor = '#6F947B', bordercolor = Config.PANEL_BCK_COLOR, radius = Config.PANEL_RADIUS)
- btnBox.set_border_width(Config.PANEL_SPACING)
- self.drums = {}
- for drumkit in self.instrumentList:
- instBox = RoundVBox(fillcolor = Config.INST_BCK_COLOR, bordercolor = Config.PANEL_COLOR, radius = Config.PANEL_RADIUS)
- instBox.set_border_width(Config.PANEL_SPACING)
- self.drums[drumkit] = ImageRadioButton(firstBtn, Config.IMAGE_ROOT + drumkit + '.png' , Config.IMAGE_ROOT + drumkit + 'sel.png', Config.IMAGE_ROOT + drumkit + 'sel.png')
- self.drums[drumkit].clickedHandler = self.drums[drumkit].connect('clicked',self.setDrums,drumkit)
- if firstBtn == None:
- firstBtn = self.drums[drumkit]
- instBox.pack_start(self.drums[drumkit], False, False, 0)
- btnBox.pack_start(instBox, False, False, 0)
- self.add(btnBox)
- self.show_all()
-
- def setDrums(self,widget,data):
- if widget.get_active():
- if self.setDrum:
- widget.event( gtk.gdk.Event( gtk.gdk.LEAVE_NOTIFY ) ) # fake the leave event
- self.setDrum(data)
-
- def set_activeInstrument( self, instrument, state ):
- if instrument in self.instrumentList:
- btn = self.drums[instrument]
- btn.handler_block(btn.clickedHandler)
- btn.set_active(state)
- btn.handler_unblock(btn.clickedHandler)
-
-if __name__ == "__main__":
- win = gtk.Window()
- wc = DrumPanel(None)
- win.add(wc)
- win.show()
- #start the gtk event loop
- gtk.main()
diff --git a/TamTamSynthLab.activity/common/Util/Instruments.py b/TamTamSynthLab.activity/common/Util/Instruments.py
deleted file mode 100644
index 315e451..0000000
--- a/TamTamSynthLab.activity/common/Util/Instruments.py
+++ /dev/null
@@ -1,309 +0,0 @@
-import os
-from gettext import gettext as _
-
-import common.Config as Config
-import common.Util.InstrumentDB as InstrumentDB
-from sugar.activity.activity import get_bundle_name
-
-LOW = Config.LOW
-MID = Config.MID
-HIGH = Config.HIGH
-PUNCH = Config.PUNCH
-
-INSTRUMENT_TABLE_OFFSET = Config.INSTRUMENT_TABLE_OFFSET
-INST_FREE = Config.INST_FREE
-INST_TIED = Config.INST_TIED
-INST_SIMP = Config.INST_SIMP
-INST_PERC = Config.INST_PERC
-
-instrumentDB = InstrumentDB.getRef()
-
-
-def _addInstrument( name, csoundInstrumentId, instrumentRegister, category, loopStart, loopEnd, crossDur, ampScale = 1, kit = None, kitStage = False, volatile = False, nameTooltip = "" ):
- instrumentDB.addInstrumentFromArgs( name, csoundInstrumentId, instrumentRegister, loopStart, loopEnd, crossDur, ampScale, kit, name, Config.IMAGE_ROOT+"/"+name+".png", category, kitStage = kitStage, volatile = volatile, nameTooltip = nameTooltip )
-
-if Config.FEATURES_MIC:
- _addInstrument( "mic1", INST_TIED, MID, 'mysounds', .01, 1.99, .01, 1, volatile = True )
- _addInstrument( "mic2", INST_TIED, MID, 'mysounds', .01, 1.99, .01, 1, volatile = True )
- _addInstrument( "mic3", INST_TIED, MID, 'mysounds', .01, 1.99, .01, 1, volatile = True )
- _addInstrument( "mic4", INST_TIED, MID, 'mysounds', .01, 1.99, .01, 1, volatile = True )
-
-if Config.FEATURES_LAB:
- _addInstrument( "lab1", INST_SIMP, MID, 'mysounds', 0, 0, 0, 1, volatile = True )
- _addInstrument( "lab2", INST_SIMP, MID, 'mysounds', 0, 0, 0, 1, volatile = True )
- _addInstrument( "lab3", INST_SIMP, MID, 'mysounds', 0, 0, 0, 1, volatile = True )
- _addInstrument( "lab4", INST_SIMP, MID, 'mysounds', 0, 0, 0, 1, volatile = True )
- _addInstrument( "lab5", INST_SIMP, MID, 'mysounds', 0, 0, 0, 1, volatile = True )
- _addInstrument( "lab6", INST_SIMP, MID, 'mysounds', 0, 0, 0, 1, volatile = True )
-
-_addInstrument( "ounk", INST_SIMP, MID, 'animals', 0, 0, 0, 1, nameTooltip = _("Ounk") )
-_addInstrument( "gam", INST_TIED, HIGH, 'percussions', .69388, .7536, .02922, 1.4, nameTooltip = _("Gam") )
-_addInstrument( "guit", INST_TIED, MID, 'strings', .08592, .75126, .33571, 0.7, nameTooltip = _("Electric Guitar") )
-_addInstrument( "guitmute", INST_SIMP, MID, 'strings', 0, 0, 0, 0.6, nameTooltip = _("Electric Guitar") )
-_addInstrument( "guitshort", INST_SIMP, MID, 'strings', 0, 0, 0, 0.6, nameTooltip = _("Electric Guitar") )
-_addInstrument( "koto", INST_TIED, HIGH, 'strings', .56523, .70075, .05954, 1, nameTooltip = _("Koto") )
-_addInstrument( "banjo", INST_TIED, MID, 'strings', .8928046875, 1.6325390625, .0525, 0.6, nameTooltip = _("Banjo") )
-_addInstrument( "ukulele", INST_TIED, MID, 'strings', .64097090625, 1.0887984375, .17375, 0.35, nameTooltip = _("Ukulele") )
-_addInstrument( "harpsichord", INST_TIED, MID, 'strings', .57529609375, .936075, .2, 0.35, nameTooltip = _("Harpsichord") )
-_addInstrument( "clarinette", INST_TIED, MID, 'winds', 1.635276375, 2.72956523438, .2, 0.3, nameTooltip = _("Clarinette") )
-_addInstrument( "flute", INST_TIED, MID, 'winds', .47169, .53693, .02481, 1.3, nameTooltip = _("Flute") )
-_addInstrument( "drum1hatpedal", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True)
-_addInstrument( "drum1hatshoulder", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum1hardride", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum1ridebell", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum1snare", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum1snaresidestick", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum1crash", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum1splash", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum1tom", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum1floortom", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True)
-_addInstrument( "drum1chine", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum1kick", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "piano", INST_TIED, MID, 'keyboard', 0.8883, 1.420524, .13575, 1, nameTooltip = _("Piano") )
-_addInstrument( "dog", INST_SIMP, MID, 'animals', 0, 0, 0, 1, nameTooltip = _("Dog") )
-_addInstrument( "chiken", INST_TIED, MID, 'animals', .1972125, .8689675781, .02, 0.5, nameTooltip = _("Chiken") )
-_addInstrument( "duck", INST_SIMP, MID, 'animals', 0, 0, 0, 0.7, nameTooltip = _("Duck") )
-_addInstrument( "armbone", INST_SIMP, MID, 'concret', 0, 0, 0, 0.8, nameTooltip = _("Armbone") )
-_addInstrument( "drum2darbukadoom", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum2darbukapied", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum2darbukapiedsoft", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum2hatflanger", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum2darbukatak", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum2darbukafinger", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum2darbukaroll", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum2darbukaslap", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum2hatpied", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum2tambourinepied", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum2hatpied2", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum2tambourinepiedsoft", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3cowbell", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3cowbelltip", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True)
-_addInstrument( "drum3cup", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3djembelow", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3djembemid", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3djembesidestick", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3djembeslap", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3djembestickmid", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3metalstand", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3pedalperc", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3rainstick", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3tambourinehigh", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum3tambourinelow", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "harmonica", INST_TIED, MID, 'winds', .1531, .19188, .01792, 1, nameTooltip = _("Harmonica") )
-_addInstrument( "alarm", INST_TIED, MID, 'concret', 1.37555859375, 2.0286015625, .0675, 0.4, nameTooltip = _("Alarm") )
-_addInstrument( "bird", INST_TIED, MID, 'animals', .1, 1, .05, 1, nameTooltip = _("Bird") )
-_addInstrument( "frogs", INST_TIED, MID, 'animals', 1.954453125, 4.350234375, .2, 0.5, nameTooltip = _("Frog") )
-_addInstrument( "cat", INST_SIMP, MID, 'animals', 0, 0, 0, 0.8, nameTooltip = _("Cat") )
-_addInstrument( "cow", INST_SIMP, MID, 'animals', 0, 0, 0, 0.7, nameTooltip = _("Cow") )
-_addInstrument( "cricket", INST_SIMP, MID, 'animals', 0, 0, 0, 0.5, nameTooltip = _("Cricket") )
-_addInstrument( "duck2", INST_SIMP, MID, 'animals', 0, 0, 0, 1, nameTooltip = _("Duck") )
-_addInstrument( "bottle", INST_TIED, MID, 'concret', .20532, .41064, .05292, 0.8, nameTooltip = _("Bottle") )
-_addInstrument( "clang", INST_SIMP, MID, 'concret', 0, 0, 0, 0.8, nameTooltip = _("Dump") )
-_addInstrument( "clang2", INST_SIMP, MID, 'concret', 0, 0, 0, 0.6, nameTooltip = _("Clang") )
-_addInstrument( "ow", INST_SIMP, MID, 'people', 0, 0, 0, 1, nameTooltip = _("Ow") )
-_addInstrument( "hey", INST_SIMP, MID, 'people', 0, 0, 0, 0.5, nameTooltip = _("Hey") )
-_addInstrument( "sheep", INST_SIMP, MID, 'animals', 0, 0, 0, 1, nameTooltip = _("Sheep") )
-_addInstrument( "water", INST_SIMP, MID, 'concret', 0, 0, 0, 1, nameTooltip = _("Water") )
-_addInstrument( "zap", INST_TIED, MID, 'keyboard', .299, .7323, .09895, 0.8, nameTooltip = _("Zap") )
-_addInstrument( "trumpet", INST_TIED, MID, 'winds', .91195, 1.652909375, .05375, 0.3, nameTooltip = _("Trumpet") )
-_addInstrument( "clavinet", INST_TIED, MID, 'keyboard', .6398328125, .9401625, .094, 0.4, nameTooltip = _("Clavinet") )
-_addInstrument( "flugel", INST_TIED, MID, 'winds', 1.291740625, 2.37588007813, .065, 0.3, nameTooltip = _("Ow") )
-_addInstrument( "foghorn", INST_TIED, LOW, 'winds', 2.07005, 3.758775, .2, 0.5, nameTooltip = _("Foghorn") )
-_addInstrument( "bubbles", INST_TIED, MID, 'concret', 0.02, 1.177, 0.02, 0.7, nameTooltip = _("Bubbles") )
-_addInstrument( "marimba", INST_TIED, MID, 'percussions', .18883789, .343623047, .07625, 0.4, nameTooltip = _("Marimba") )
-_addInstrument( "triangle", INST_TIED, MID, 'percussions', 2.27261836, 3.2965453, .2, 0.6, nameTooltip = _("Triangle") )
-_addInstrument( "fingercymbals", INST_TIED, HIGH, 'percussions', 1.29635195312, 1.92448125, .094, 0.6, nameTooltip = _("Fingercymbals") )
-_addInstrument( "laugh", INST_SIMP, MID, 'people', 0, 0, 0, 1, nameTooltip = _("Laugh") )
-_addInstrument( "babylaugh", INST_TIED, MID, 'people', 0.72920078, 1.63253906, 0.01, 0.3, nameTooltip = _("Baby Laugh"))
-_addInstrument( "babyuhoh", INST_SIMP, MID, 'people', 0, 0, 0, 0.3, nameTooltip = _("Baby Yuhoh") )
-_addInstrument( "voix", INST_TIED, MID, 'people', .89608, .96092, .02343, 0.8, nameTooltip = _("Voix") )
-_addInstrument( "cling", INST_TIED, MID, 'keyboard', .09096, .7878, .18026, 0.7, nameTooltip = _("Cling") )
-_addInstrument( "byke", INST_SIMP, MID, 'concret', 0, 0, 0, 1, nameTooltip = _("Bike") )
-_addInstrument( "door", INST_SIMP, MID, 'concret', 0, 0, 0, 1, nameTooltip = _("Door") )
-_addInstrument( "basse", INST_TIED, MID, 'strings', 0.50470875, 0.833315, 0.09375, 1.4, nameTooltip = _("Basse") )
-_addInstrument( "acguit", INST_TIED, MID, 'strings', 0.5123225, 0.7491675, 0.08475, 0.5, nameTooltip = _("Acoustic Guitar") )
-_addInstrument( "diceinst", INST_SIMP, MID, 'concret', 0, 0, 0, 1.3, nameTooltip = _("Dice") )
-_addInstrument( "didjeridu", INST_TIED, LOW, 'winds', .55669, 1.73704, .09178, 1.5, nameTooltip = _("Didjeridu") )
-_addInstrument( "harmonium", INST_TIED, MID, 'keyboard', .242032, .898165625, .2, 0.6, nameTooltip = _("Harmonium") )
-_addInstrument( "horse", INST_SIMP, MID, 'animals', 0, 0, 0, 0.6, nameTooltip = _("Horse") )
-_addInstrument( "kalimba", INST_TIED, MID, 'percussions', .20751, .30161, .04658, 1.3, nameTooltip = _("Kalimba") )
-_addInstrument( "mando", INST_TIED, MID, 'strings', 0.507107031, 0.934144531, 0.2, 0.5, nameTooltip = _("Mando") )
-_addInstrument( "ocarina", INST_TIED, MID, 'winds', .06612, .19033, .01776, 0.8, nameTooltip = _("Ocarina") )
-_addInstrument( "rhodes", INST_TIED, MID, 'keyboard', 0.58100625, 0.821625, 0.067, 0.7, nameTooltip = _("Rhodes") )
-_addInstrument( "saxo", INST_TIED, MID, 'winds', .53722, .6583, .05264, 0.25, nameTooltip = _("Saxo") )
-_addInstrument( "saxsoprano", INST_TIED, HIGH, 'winds', .90721015625, 1.71199335938, .07675, 0.25, nameTooltip = _("Saxo Soprano") )
-_addInstrument( "shenai", INST_TIED, MID, 'winds', .29003, .33072, .00634, 0.5, nameTooltip = _("Shenai") )
-_addInstrument( "sitar", INST_TIED, MID, 'strings', 1.1361625, 1.575134375, .183, 0.3, nameTooltip = _("Sitar") )
-_addInstrument( "tuba", INST_TIED, LOW, 'winds', .51063, .58384, .035, 1.2, nameTooltip = _("Tuba") )
-_addInstrument( "violin", INST_TIED, MID, 'strings', .105, .30656, .028, 1, nameTooltip = _("Violin") )
-_addInstrument( "guidice1", INST_SIMP, MID, 'concret', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "guidice2", INST_SIMP, MID, 'concret', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "guidice3", INST_SIMP, MID, 'concret', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "guidice4", INST_SIMP, MID, 'concret', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "guidice5", INST_SIMP, MID, 'concret', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "guidice6", INST_SIMP, MID, 'concret', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "guidice7", INST_SIMP, MID, 'concret', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "guidice8", INST_SIMP, MID, 'concret', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "guidice9", INST_SIMP, MID, 'concret', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "guidice10", INST_SIMP, MID, 'concret', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4afrofeet", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum4fingersn", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4mutecuic", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4stompbass", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4tambouri", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4tr707clap", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4tr707open", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4tr808closed", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4tr808sn", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4tr909bass", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4tr909kick", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum4tr909sn", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5timablesslap", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5congagraveouvert", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5timablesaiguslap", INST_SIMP, LOW, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5congagraveferme", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5guiroretour", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5vibraslap", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5congaaiguouvert", INST_SIMP, MID, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum5quicamedium", INST_SIMP, PUNCH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5quicaaigu", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5agogograve", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5bongoaiguouvert", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5agogoaigu", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "drum5bongograveouvert", INST_SIMP, HIGH, 'percussions', 0, 0, 0, 1, kitStage = True )
-_addInstrument( "camera", INST_SIMP, MID, 'concret', 0, 0, 0, 1, nameTooltip = _("Camera") )
-_addInstrument( "car", INST_TIED, MID, 'concret', .67, 1.05761, .01, 0.6, nameTooltip = _("Car") )
-_addInstrument( "carhorn", INST_SIMP, MID, 'concret', 0, 0, 0, 0.4, nameTooltip = _("Car Horn") )
-_addInstrument( "cello", INST_TIED, MID, 'strings', 0.4761, 0.92244375, 0.19125, .6, nameTooltip = _("Cello") )
-_addInstrument( "chimes", INST_TIED, MID, 'percussions', 4.104825, 5.644134375, .02, 1, nameTooltip = _("Chimes") )
-_addInstrument( "crash", INST_SIMP, MID, 'concret', 0, 0, 0, 1, nameTooltip = _("Crash") )
-_addInstrument( "guit2", INST_TIED, MID, 'strings', 1.186341406, 1.929568266, .2, 0.25, nameTooltip = _("Electric Guitar") )
-_addInstrument( "plane", INST_SIMP, MID, 'concret', 0, 0, 0, 0.6, nameTooltip = _("Plane") )
-_addInstrument( "slap", INST_SIMP, MID, 'concret', 0, 0, 0, 0.7, nameTooltip = _("Slap") )
-_addInstrument( "templebell", INST_SIMP, MID, 'percussions', 0, 0, 0, 1, nameTooltip = _("Temple Bell") )
-_addInstrument( "sarangi", INST_SIMP, MID, 'strings', 0, 0, 0, 1, nameTooltip = _("Sarangi"))
-_addInstrument( "drum6madal00", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal01", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal02", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal03", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal04", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal05", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal06", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal07", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal08", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal09", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal10", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal11", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-_addInstrument( "drum6madal12", INST_SIMP, LOW, 'percussions', 0, 0 ,0, 1, kitStage = True )
-
-if Config.FEATURES_NEWSOUNDS:
- try:
- files = os.listdir(Config.SNDS_INFO_DIR)
- for file in files:
- instrumentDB.addInstrument(Config.SNDS_INFO_DIR + '/' + file)
- except:
- pass
-
-#jamId = os.path.split(os.path.realpath("/home/olpc/isolation/1/bundle_id_to_gid/org.laptop.TamTamJam"))[1]
-
-
-DRUM1KIT = { 24 : "drum1kick",
- 26 : "drum1floortom",
- 28 : "drum1tom",
- 30 : "drum1chine",
- 32 : "drum1splash",
- 34 : "drum1crash",
- 36 : "drum1snaresidestick",
- 38 : "drum1snaresidestick",
- 40 : "drum1snare",
- 42 : "drum1ridebell",
- 44 : "drum1hardride",
- 46 : "drum1hatshoulder",
- 48 : "drum1hatpedal" }
-
-DRUM2KIT = { 24 : "drum2darbukadoom",
- 26 : "drum2darbukapied",
- 28 : "drum2darbukapiedsoft",
- 30 : "drum2hatflanger",
- 32 : "drum2darbukatak",
- 34 : "drum2darbukatak",
- 36 : "drum2darbukafinger",
- 38 : "drum2darbukaroll",
- 40 : "drum2darbukaslap",
- 42 : "drum2hatpied",
- 44 : "drum2tambourinepied",
- 46 : "drum2hatpied2",
- 48 : "drum2tambourinepiedsoft" }
-
-DRUM3KIT = { 24 : "drum3djembelow",
- 26 : "drum3pedalperc",
- 28 : "drum3djembeslap",
- 30 : "drum3tambourinehigh",
- 32 : "drum3tambourinelow",
- 34 : "drum3rainstick",
- 36 : "drum3djembemid",
- 38 : "drum3djembesidestick",
- 40 : "drum3djembestickmid",
- 42 : "drum3cowbell",
- 44 : "drum3cowbelltip",
- 46 : "drum3cup",
- 48 : "drum3metalstand" }
-
-DRUM4KIT = { 24 : "drum4afrofeet",
- 26 : "drum4tr909kick",
- 28 : "drum4tr909bass",
- 30 : "drum4stompbass",
- 32 : "drum4tr707open",
- 34 : "drum4mutecuic",
- 36 : "drum4tr808sn",
- 38 : "drum4tr707clap",
- 40 : "drum4tr909sn",
- 42 : "drum4tambouri",
- 44 : "drum4fingersn",
- 46 : "drum4fingersn",
- 48 : "drum4tr808closed" }
-
-DRUM5KIT = { 24 : "drum5timablesslap",
- 26 : "drum5timablesaiguslap",
- 28 : "drum5congagraveouvert",
- 30 : "drum5quicamedium",
- 32 : "drum5guiroretour",
- 34 : "drum5vibraslap",
- 36 : "drum5congagraveferme",
- 38 : "drum5quicaaigu",
- 40 : "drum5congaaiguouvert",
- 42 : "drum5agogoaigu",
- 44 : "drum5bongograveouvert",
- 46 : "drum5agogograve",
- 48 : "drum5bongoaiguouvert" }
-
-DRUM6KIT = { 24 : "drum6madal00",
- 26 : "drum6madal01",
- 28 : "drum6madal02",
- 30 : "drum6madal03",
- 32 : "drum6madal04",
- 34 : "drum6madal05",
- 36 : "drum6madal06",
- 38 : "drum6madal07",
- 40 : "drum6madal08",
- 42 : "drum6madal09",
- 44 : "drum6madal10",
- 46 : "drum6madal11",
- 48 : "drum6madal12" }
-
-_addInstrument( "drum1kit", 0, 0, "percussions", 0, 0, 0, 1, DRUM1KIT )
-_addInstrument( "drum2kit", 0, 0, "percussions", 0, 0, 0, 1, DRUM2KIT )
-_addInstrument( "drum3kit", 0, 0, "percussions", 0, 0, 0, 1, DRUM3KIT )
-_addInstrument( "drum4kit", 0, 0, "percussions", 0, 0, 0, 1, DRUM4KIT )
-_addInstrument( "drum5kit", 0, 0, "percussions", 0, 0, 0, 1, DRUM5KIT )
-_addInstrument( "drum6kit", 0, 0, "percussions", 0, 0, 0, 1, DRUM6KIT )
-
-DRUMTIPS = [
- _('Jazz / Rock Kit'),
- _('African Kit'),
- _('Arabic Kit'),
- _('South American Kit'),
- _('Electronic Kit'),
- _('Nepali') ]
-
-DRUMCOUNT = 6
diff --git a/TamTamSynthLab.activity/common/Util/KeyboardWindow.py b/TamTamSynthLab.activity/common/Util/KeyboardWindow.py
deleted file mode 100644
index e828967..0000000
--- a/TamTamSynthLab.activity/common/Util/KeyboardWindow.py
+++ /dev/null
@@ -1,180 +0,0 @@
-import pygtk
-pygtk.require( '2.0' )
-import gtk
-import random
-from common.Util.ThemeWidgets import keyButton
-import common.Config as Config
-KEY_MAP_PIANO = Config.KEY_MAP_PIANO
-
-class KeyboardWindow(gtk.Window):
- def __init__(self, size = None, pos = 0, popup = False):
- if popup is False:
- gtk.Window.__init__(self , gtk.WINDOW_TOPLEVEL)
- else:
- gtk.Window.__init__(self , gtk.WINDOW_POPUP)
- color = gtk.gdk.color_parse("#000000")
- self.modify_bg(gtk.STATE_NORMAL, color)
- self.set_decorated(False)
-
- self.add_events(gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.ENTER_NOTIFY_MASK | gtk.gdk.KEY_PRESS_MASK)
- self.connect("key-press-event",self.handle_keypress)
- self.connect("key-release-event",self.handle_keyrelease)
- self.connect("button-press-event",self.handle_mousePress)
- self.connect("button-release-event",self.handle_mouseRelease)
- self.connect("enter-notify-event",self.handle_enter)
-
- self.size = size
- self.pos = pos
- self.popup = popup
- self.set_pos(self.pos)
-
- if self.size == None:
- self.pixel_space = 15
- self.height = 45
- else:
- self.pixel_space = size
- self.height = 3 * size
-
- self.draw()
-
- def draw(self):
- self.rows = {}
- self.rows[1] = [(49,1), (10,3), (11,3), (12,3), (13,3), (14,3), (15,3), (16,3), (17,3), (18,3), (19,3), (20,3), (21,5)]
- self.rows[2] = [(23,3), (24,3), (25,3), (26,3), (27,3), (28,3), (29,3), (30,3), (31,3), (32,3), (33,3), (34,3), (35,4)]
- self.rows[3] = [(37,4), (38,3), (39,3), (40,3), (41,3), (42,3), (43,3), (44,3), (45,3), (46,3), (47,3), (48,3), (51,3)]
- self.rows[4] = [(50,6), (52,3), (53,3), (54,3), (55,3), (56,3), (57,3), (58,3), (59,3), (60,3), (61,3), (62,5)]
- self.rows[5] = [(216,1),(133,4),(64,4), (65,25), (108,4), (134,4,), (113,3)]
-
- self.right_section = [(22,7),(36,(7,7)),(111,3),(219,3),(116,3),(114,3)]
-
- self.btn_dic = {}
-
- mainvbox = gtk.VBox()
- mainhbox = gtk.HBox()
-
- #Main keyboard section
- vbox = gtk.VBox()
- for row in [1,2,3,4,5]:
- hbox = gtk.HBox()
- for key in self.rows[row]:
- self.btn_dic[key[0]] = keyButton(self.pixel_space * key[1], self.height, [0,0,0], [0.5,0.5,0.5])
- hbox.pack_start(self.btn_dic[key[0]], padding = self.pixel_space//2)
- vbox.pack_start(hbox, padding = self.pixel_space//2)
- mainhbox.pack_start(vbox)
-
- #Right part of the keyboard
- right_vbox = gtk.VBox()
- right_tophbox = gtk.HBox()
- right_lowhbox = gtk.HBox()
-
- self.btn_dic[self.right_section[0][0]] = keyButton(self.pixel_space * self.right_section[0][1], self.height, [0,0,0], [0.5,0.5,0.5])
- self.btn_dic[self.right_section[1][0]] = keyButton(self.pixel_space * self.right_section[1][1][0], self.pixel_space * self.right_section[1][1][1], [0,0,0], [0.5,0.5,0.5])
- self.btn_dic[self.right_section[2][0]] = keyButton(self.pixel_space * self.right_section[2][1], self.height, [0,0,0], [0.5,0.5,0.5])
- self.btn_dic[self.right_section[3][0]] = keyButton(self.pixel_space * self.right_section[3][1], self.height, [0,0,0], [0.5,0.5,0.5])
- self.btn_dic[self.right_section[4][0]] = keyButton(self.pixel_space * self.right_section[4][1], self.height, [0,0,0], [0.5,0.5,0.5])
- self.btn_dic[self.right_section[5][0]] = keyButton(self.pixel_space * self.right_section[5][1], self.height, [0,0,0], [0.5,0.5,0.5])
-
- right_vbox.pack_start(self.btn_dic[self.right_section[0][0]], padding = self.pixel_space//2)
- right_vbox.pack_start(self.btn_dic[self.right_section[1][0]], padding = self.pixel_space//2)
- right_tophbox.pack_start(self.btn_dic[self.right_section[2][0]], padding = self.pixel_space//2)
- right_tophbox.pack_start(self.btn_dic[self.right_section[3][0]], padding = self.pixel_space//2)
- right_lowhbox.pack_start(self.btn_dic[self.right_section[4][0]], padding = self.pixel_space//2)
- right_lowhbox.pack_start(self.btn_dic[self.right_section[5][0]], padding = self.pixel_space//2)
- right_vbox.pack_start(right_tophbox, padding = self.pixel_space//2)
- right_vbox.pack_start(right_lowhbox, padding = self.pixel_space//2)
-
- #Mouse buttons
- mouse_hbox = gtk.HBox()
- self.btn_dic["left_mouse"] = keyButton(self.pixel_space * 6, self.pixel_space * 2, [0,0,0], [0.5,0.5,0.5])
- self.btn_dic["right_mouse"] = keyButton(self.pixel_space * 6, self.pixel_space * 2, [0,0,0], [0.5,0.5,0.5])
- mouse_hbox.pack_start(self.btn_dic["left_mouse"], True, True, self.pixel_space//2)
- mouse_hbox.pack_end(self.btn_dic["right_mouse"], True, True, self.pixel_space//2)
-
-
- #Enter and Leave connections
- for key in self.btn_dic:
- self.btn_dic[key].connect("enter",self.handle_mouseEnter)
- self.btn_dic[key].connect("leave",self.handle_mouseLeave)
-
- mainhbox.pack_start(right_vbox)
- mainvbox.pack_start(mainhbox)
- mainvbox.pack_start(mouse_hbox, padding = self.pixel_space//2)
-
- self.add(mainvbox)
-
- def set_pos(self,_pos = 0):
- width = self.get_screen().get_width()
- height = self.get_screen().get_height()
- win_width = self.get_size()[0]
- win_height = self.get_size()[1]
-
- self.pos = _pos
-
- pos = [0,0]
- pos[0] = (0, 0)
- pos[1] = (width - win_width, height - win_height)
- self.move(pos[self.pos][0],pos[self.pos][1])
-
- def color_piano(self):
- for key in KEY_MAP_PIANO:
- self.btn_dic[key].set_fillcolor(1,1,1)
-
-
- def handle_keypress(self,widget,event):
- if event.hardware_keycode == 9: # Hide the keyboard with escape Key
- self.hide_all()
- elif event.hardware_keycode == 216: # Send a fake mouse event
- self.btn_dic["left_mouse"].set_fillcolor(random.random(),random.random(),random.random())
- elif event.hardware_keycode == 133: # Send a fake mouse event
- self.btn_dic["right_mouse"].set_fillcolor(random.random(),random.random(),random.random())
- else:
- if self.btn_dic.has_key(event.hardware_keycode):
- self.btn_dic[event.hardware_keycode].set_fillcolor(random.random(),random.random(),random.random())
-
- def handle_keyrelease(self,widget,event):
- if KEY_MAP_PIANO.has_key(event.hardware_keycode):
- self.btn_dic[event.hardware_keycode].set_fillcolor(1,1,1)
- else:
- if self.btn_dic.has_key(event.hardware_keycode):
- self.btn_dic[event.hardware_keycode].set_fillcolor(0,0,0)
- if event.hardware_keycode == 216 or event.hardware_keycode == 133:
- self.btn_dic["left_mouse"].set_fillcolor(0,0,0)
- self.btn_dic["right_mouse"].set_fillcolor(0,0,0)
-
-
- def handle_mousePress(self,widget,event):
- if event.button == 1:
- self.btn_dic["left_mouse"].set_fillcolor(random.random(),random.random(),random.random())
- elif event.button == 3:
- self.btn_dic["right_mouse"].set_fillcolor(random.random(),random.random(),random.random())
-
- def handle_mouseRelease(self,widget,event):
- if event.button == 1:
- self.btn_dic["left_mouse"].set_fillcolor(0,0,0)
- elif event.button == 3:
- self.btn_dic["right_mouse"].set_fillcolor(0,0,0)
-
- def handle_mouseEnter(self,widget,event = None):
- widget.set_strokecolor(1,1,1)
-
- def handle_mouseLeave(self,widget,event = None):
- widget.set_strokecolor(0.5,0.5,0.5)
-
- def handle_enter(self,widget,event):
- if self.popup is False:
- return
- if self.pos == 0:
- self.set_pos(1)
- else:
- self.set_pos(0)
-
- def close(self,widget,event = None):
- self.hide_all()
-
-
-
-if __name__ == "__main__":
- win = KeyboardWindow()
- win.connect("destroy",gtk.main_quit)
- win.show_all()
- gtk.main()
diff --git a/TamTamSynthLab.activity/common/Util/LoopSettings.py b/TamTamSynthLab.activity/common/Util/LoopSettings.py
deleted file mode 100644
index d672050..0000000
--- a/TamTamSynthLab.activity/common/Util/LoopSettings.py
+++ /dev/null
@@ -1,229 +0,0 @@
-import pygtk
-pygtk.require('2.0')
-import gtk
-import gobject
-import os
-from common.Util.ThemeWidgets import *
-import common.Config as Config
-import commands
-Tooltips = Config.Tooltips()
-
-class LoopSettings( gtk.VBox ):
- def __init__( self, popup, playFunction, setChannelFunction, doneLoopSettingsPopup ):
- gtk.VBox.__init__( self )
- self.tooltips = gtk.Tooltips()
- self.popup = popup
- self.playFunction = playFunction
- self.setChannel = setChannelFunction
- self.doneLoopSettingsPopup = doneLoopSettingsPopup
- self.loopedSound = False
- self.soundLength = 1.00
- self.start = 0
- self.end = 1.00
- self.dur = 0.01
- self.register = 0
- self.ok = True
-
- self.settingsBox = gtk.HBox()
- self.pack_start(self.settingsBox)
-
- self.fixed = gtk.Fixed()
- self.settingsBox.pack_start(self.fixed)
-
- self.mainBox = gtk.VBox()
-
- self.controlsBox = gtk.HBox()
-
- self.GUI = {}
-
- nameBox = gtk.VBox()
- self.nameEntry = gtk.Entry()
- self.nameEntry.set_text("name_of_the_sound")
- nameBox.pack_start(self.nameEntry)
- self.mainBox.pack_start(nameBox, False, False, 5)
-
- loopedBox = gtk.HBox()
- loopedLabel = gtk.Label("Looped sound: ")
- loopedBox.pack_start(loopedLabel)
- loopedToggle = ImageToggleButton(Config.IMAGE_ROOT+"checkOff.svg",Config.IMAGE_ROOT+"checkOn.svg")
- loopedToggle.connect('button-press-event', self.handleLooped )
- loopedBox.pack_start(loopedToggle)
- self.mainBox.pack_start(loopedBox, False, False, 5)
-
- categoryBox = gtk.HBox()
- categoryMenu = gtk.MenuBar()
- cmenu = gtk.Menu()
- for cat in Config.CATEGORIES:
- if cat != 'all':
- entry = gtk.MenuItem(cat)
- cmenu.append(entry)
- entry.connect("activate", self.handleCategory, cat)
- entry.show()
- self.categoryButton = gtk.Button("Category")
- self.categoryButton.connect_object("event", self.categoryBtnPress, cmenu)
- categoryBox.pack_end(self.categoryButton)
- #self.mainBox.pack_start(categoryBox, False, False, 5)
-
- registerBox = gtk.HBox()
- registerMenu = gtk.MenuBar()
- rmenu = gtk.Menu()
- self.registerList = ['LOW', 'MID', 'HIGH', 'PUNCH']
- for reg in self.registerList:
- entry = gtk.MenuItem(reg)
- rmenu.append(entry)
- entry.connect("activate", self.handleRegister, self.registerList.index(reg))
- entry.show()
- self.registerButton = gtk.Button("Register")
- self.registerButton.connect_object("event", self.registerBtnPress, rmenu)
- registerBox.pack_end(self.registerButton)
- self.mainBox.pack_start(registerBox, False, False, 5)
-
- startBox = gtk.VBox()
- self.startAdjust = gtk.Adjustment( 0.01, 0, 1., .001, .001, 0)
- self.GUI['startSlider'] = ImageVScale( Config.IMAGE_ROOT + "sliderEditVolume.png", self.startAdjust, 7 )
- self.startAdjust.connect("value-changed", self.handleStart)
- self.GUI['startSlider'].set_inverted(True)
- self.GUI['startSlider'].set_size_request(50, 200)
- self.startEntry = gtk.Entry()
- self.startEntry.set_width_chars(5)
- self.handleStart( self.startAdjust )
- startBox.pack_start(self.GUI['startSlider'], True, True, 5)
- startBox.pack_start(self.startEntry, True, True, 5)
- self.controlsBox.pack_start(startBox)
-
- endBox = gtk.VBox()
- self.endAdjust = gtk.Adjustment( 0.9, 0, 1, .001, .001, 0)
- self.GUI['endSlider'] = ImageVScale( Config.IMAGE_ROOT + "sliderEditVolume.png", self.endAdjust, 7 )
- self.endAdjust.connect("value-changed", self.handleEnd)
- self.GUI['endSlider'].set_inverted(True)
- self.GUI['endSlider'].set_size_request(50, 200)
- self.endEntry = gtk.Entry()
- self.endEntry.set_width_chars(5)
- self.handleEnd( self.endAdjust )
- endBox.pack_start(self.GUI['endSlider'], True, True, 5)
- endBox.pack_start(self.endEntry, True, True, 5)
- self.controlsBox.pack_start(endBox)
-
- durBox = gtk.VBox()
- self.durAdjust = gtk.Adjustment( 0.01, 0, 0.2, .001, .001, 0)
- self.GUI['durSlider'] = ImageVScale( Config.IMAGE_ROOT + "sliderEditVolume.png", self.durAdjust, 7 )
- self.durAdjust.connect("value-changed", self.handleDur)
- self.GUI['durSlider'].set_inverted(True)
- self.GUI['durSlider'].set_size_request(50, 200)
- self.durEntry = gtk.Entry()
- self.durEntry.set_width_chars(5)
- self.handleDur( self.durAdjust )
- durBox.pack_start(self.GUI['durSlider'], True, True, 5)
- durBox.pack_start(self.durEntry, True, True, 5)
- self.controlsBox.pack_start(durBox)
-
- self.mainBox.pack_start(self.controlsBox, False, False, 5)
-
- previewBox = gtk.VBox()
- self.playStopButton = ImageToggleButton(Config.IMAGE_ROOT + 'miniplay.png', Config.IMAGE_ROOT + 'stop.png')
- self.playStopButton.connect('button-press-event' , self.handlePlayButton)
- previewBox.pack_start(self.playStopButton)
- self.mainBox.pack_start(previewBox, False, False, 5)
-
- checkBox = gtk.VBox()
- checkButton = ImageButton(Config.IMAGE_ROOT + 'check.png')
- checkButton.connect('clicked' , self.handleCheck)
- checkBox.pack_start(checkButton)
- self.mainBox.pack_start(checkBox, False, False, 5)
-
- self.fixed.put( self.mainBox, 0, 0 )
-
- self.show_all()
-
- def handleCheck(self, widget):
- ofile = open(Config.DATA_DIR + "/sounds_settings", 'a')
- name = self.nameEntry.get_text()
- if self.loopedSound:
- tied = str(Config.INST_TIED)
- else:
- tied = str(Config.INST_SIMP)
- register = str(self.register)
- melo = 'melo'
- category = 'mysounds'
- start = str(self.start)
- end = str(self.end)
- dur = str(self.dur)
-
- ofile.write(name + ' ' + tied + ' ' + register + ' ' + melo + ' ' + category + ' ' + start + ' ' + end + ' ' + dur + '\n')
-
- ofile.close()
- (s,o) = commands.getstatusoutput('cp ' + Config.DATA_DIR + '/' + self.oldName + ' ' + Config.DATA_DIR + '/' + name)
- self.doneLoopSettingsPopup()
-
- def set_name(self, name):
- self.oldName = name
- self.nameEntry.set_text('_' + name)
-
- def set_values(self, soundLength):
- self.soundLength = soundLength
- self.handleStart(self.GUI['startSlider'])
- self.handleEnd(self.GUI['endSlider'])
-
- def handleLooped(self, widget, data=None):
- if widget.get_active() == True:
- self.loopedSound = False
- else:
- self.loopedSound = True
-
- def categoryBtnPress(self, widget, event):
- if event.type == gtk.gdk.BUTTON_PRESS:
- widget.popup(None, None, None, event.button, event.time)
- return True
- return False
-
- def handleCategory(self, widget, category):
- self.category = category
- self.categoryButton.set_label(self.category)
-
- def registerBtnPress(self, widget, event):
- if event.type == gtk.gdk.BUTTON_PRESS:
- widget.popup(None, None, None, event.button, event.time)
- return True
- return False
-
- def handleRegister(self, widget, register):
- self.register = register
- self.registerButton.set_label(self.registerList[self.register])
-
- def handleStart(self, widget, data=None):
- self.startSlider = self.startAdjust.value
- self.start = self.startSlider * self.soundLength
- if self.start > self.end:
- self.start = self.end
- self.startEntry.set_text(str(self.start))
- self.setChannel('lstart', self.start)
-
- def handleEnd(self, widget, data=None):
- self.endSlider = self.endAdjust.value
- self.end = self.endSlider * self.soundLength
- if self.end < self.start:
- self.end = self.start
- self.endEntry.set_text(str(self.end))
- self.setChannel('lend', self.end)
-
- def handleDur(self, widget, data=None):
- self.dur = self.durAdjust.value
- self.durEntry.set_text(str(self.dur))
- self.setChannel('ldur', self.dur)
-
- def handlePlayButton(self, widget, data=None):
- if self.ok:
- self.playFunction(widget.get_active(), self.loopedSound)
- if self.loopedSound == False and widget.get_active() == False:
- self.timeoutStop = gobject.timeout_add(int(self.soundLength * 1000)+500, self.playButtonState)
-
- def setButtonState(self):
- self.ok = False
- self.playStopButton.set_active(False)
- self.ok = True
-
- def playButtonState(self):
- self.ok = False
- self.playStopButton.set_active(False)
- gobject.source_remove(self.timeoutStop)
- self.ok = True
diff --git a/TamTamSynthLab.activity/common/Util/Network.py b/TamTamSynthLab.activity/common/Util/Network.py
deleted file mode 100644
index 79fbab5..0000000
--- a/TamTamSynthLab.activity/common/Util/Network.py
+++ /dev/null
@@ -1,572 +0,0 @@
-
-#===========================================================================
-# Networking Module
-#
-# - to force host mode create an empty file named "FORCE_HOST" in the base
-# TamTam directory
-# - to force peer mode create a file named "FORCE_PEER" with a single line
-# containing the IP of the host to connect to
-#
-# !! the host must be running before the peers start up !!
-#---------------------------------------------------------------------------
-
-import os
-import socket
-import select
-import threading
-import xdrlib
-import random
-
-import time
-import gtk
-import gobject
-import common.Config as Config
-
-PORT = 24460
-LISTENER_PORT = PORT-1
-WAIT_PORT = PORT-2
-
-BACKLOG = 5 # allow a backlog of N new connections
-MAX_SIZE = 1024 # max message size to receive in one go
-
-MD_OFFLINE = 0
-MD_HOST = 1
-MD_PEER = 2
-MD_WAIT = 3
-
-# enumerate message types
-# format: ("NAME", <message size>)
-# <message size> specified in bytes
-# special:
-# -1 == dynamic, first byte of data containes size
-# -2 == dynamic, first uint32 of data contains size
-message_enum = [
-("HT_LATENCY_REPLY", 4), # reply to latency test
-("HT_SYNC_REPLY", 8), # reply to sync test
-("HT_TEMPO_UPDATE", 4), # reply to sync test
-
-("PR_LATENCY_QUERY", 4), # test latency
-("PR_SYNC_QUERY", 4), # test sync
-("PR_TEMPO_QUERY", 0), # test sync
-("PR_REQUEST_TEMPO_CHANGE", 4), # request tempo change
-
-("MAX_MSG_ID", 0)
-]
-
-# Initialize message ids and MSG_NAME/MSG_SIZE arrays
-MSG_NAME = [""]
-MSG_SIZE = [0]
-i = 1
-for m in message_enum:
- exec "%s = %d" % (m[0],i)
- MSG_NAME.append(m[0])
- MSG_SIZE.append(m[1])
- i += 1
-del message_enum # clear memory
-if MAX_MSG_ID > 256:
- print "Network:: MAX_MSG_ID exeeds limit of 256!"
-
-
-class Listener( threading.Thread ):
-
- def __init__( self, owner, listenerSocket, inputSockets, outputSockets, exceptSockets ):
- threading.Thread.__init__(self)
- self.owner = owner
- self.listenerSocket = listenerSocket
- self.inputSockets = inputSockets # note that these are array pointers that match
- self.outputSockets = outputSockets # those of the Network and should not be reset
- self.exceptSockets = exceptSockets #
-
- def run(self):
- while 1: # rely on the owner to kill us when necessary
- try:
- inputReady, outputReady, exceptReady = select.select( self.inputSockets, self.outputSockets, self.exceptSockets, 0.5 )
- if not len( inputReady ): # timeout
- continue
- if self.listenerSocket in inputReady:
- data, s = self.listenerSocket.recvfrom(MAX_SIZE)
- if data == "REFRESH":
- continue
- if data == "CLEAR":
- self.owner._clearSockets()
- continue
- else:
- break # exit thread
- gtk.gdk.threads_enter()
- self.owner._processSockets( inputReady )
- gtk.gdk.threads_leave()
- except socket.error, (value, message):
- print "Listener:: socket error: " + message
- gtk.gdk.threads_leave()
- break
-
-class Connection:
-
- def __init__( self, sock, address ):
- self.socket = sock
- self.address = address
- self.recvBuf = ""
- self.waitingForData = 0
- self.message = 0
-
-class Network:
-
- def __init__( self, mode = MD_OFFLINE, hostaddress = None ):
-
- # check for forced networking
- if os.path.isfile("FORCE_HOST"):
- mode = MD_HOST
- elif os.path.isfile("FORCE_PEER"):
- f = open("FORCE_PEER")
- l = f.read(16)
- print l
- f.close()
- mode = MD_PEER
- hostaddress = (l,PORT)
-
- # prepare message handlers
- self.processMessage = {}
- for i in range(1,MAX_MSG_ID):
- self.processMessage[i] = []
-
- self.statusWatcher = []
-
- # data packing classes
- self.packer = xdrlib.Packer()
- self.unpacker = xdrlib.Unpacker("")
-
- self.mode = -1
- self.listener = None
- self._fromListener = False
- try:
- self.listenerSocket = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
- self.listenerSocket.bind( ("localhost", LISTENER_PORT) )
- except socket.error, (value,message):
- print "Network:: FAILED to open listenerSocket: " + message
- mode = MD_OFFLINE
-
- self.inputSockets = [ self.listenerSocket ] # NOTE that these array pointers are passed into
- self.outputSockets = [] # the Listener and should not be reset
- self.exceptSockets = [] #
- self.connection = {} # dict of connections indexed by socket
-
- self.latencyQueryHandler = {}
- self.latencyQueryStart = {}
-
- self.connectMessage( HT_LATENCY_REPLY, self.processHT_LATENCY_REPLY )
- self.connectMessage( PR_LATENCY_QUERY, self.processPR_LATENCY_QUERY )
-
- self.setMode( mode, hostaddress )
-
- def shutdown( self ):
- if Config.DEBUG > 1: print "Network:: shutting down!"
-
- if self.listener:
- self.listenerSocket.sendto( "EXIT", ("localhost",LISTENER_PORT) )
- time.sleep(0.01) # get off the cpu so the listerer thread has a chance to clear.. IS THERE A BETTER WAY TO DO THIS?
- self.listener = None
-
- if self.mode == MD_HOST:
- for s in self.inputSockets:
- s.close()
- elif self.mode == MD_PEER:
- self.socket.close()
- self.hostAddress = None
-
- def setMode( self, mode, hostaddress = None ):
-
- # cleanup old mode
- if Config.DEBUG > 1: print "Network:: cleaning up old connections"
-
- if self._fromListener:
- self._clearSockets()
- elif self.listener: # make the listener wake so sockets can close properly
- self.listenerSocket.sendto( "CLEAR", ("localhost",LISTENER_PORT) )
- time.sleep(0.01) # get off the cpu so the listerer thread has a chance to clear.. IS THERE A BETTER WAY TO DO THIS?
-
- self.hostAddress = None
-
- # initialize new mode
- self.mode = mode
- if self.mode == MD_HOST:
- if Config.DEBUG > 1: print "Network:: initializing network, host mode"
- try:
- self.socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
- address = ("",PORT)
- self.connection[self.socket] = Connection( self.socket, address )
- self.socket.bind(address)
- self.socket.listen(BACKLOG)
- self.inputSockets.append(self.socket)
- if not self._fromListener and self.listener:
- self.listenerSocket.sendto( "REFRESH", ("localhost", LISTENER_PORT) )
- elif not self.listener:
- self.listener = Listener( self, self.listenerSocket, self.inputSockets, self.outputSockets, self.exceptSockets )
- self.listener.start()
- except socket.error, (value, message):
- if self.socket:
- self.socket.close()
- self.connection.pop(self.socket)
- print "Network:: FAILED to open socket: " + message
- self.mode = MD_OFFLINE
- if self.listener:
- self.listenerSocket.sendto( "EXIT", ("localhost", LISTENER_PORT) )
- self.listener = None
-
- elif self.mode == MD_PEER:
- if Config.DEBUG > 1: print "Network:: initializing network, client mode: " + hostaddress[0]
- self.hostAddress = hostaddress
- try:
- self.socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
- self.connection[self.socket] = Connection( self.socket, self.hostAddress )
- self.socket.connect(self.hostAddress)
- self.inputSockets.append(self.socket)
- if not self._fromListener and self.listener:
- self.listenerSocket.sendto( "REFRESH", ("localhost", LISTENER_PORT) )
- elif not self.listener:
- self.listener = Listener( self, self.listenerSocket, self.inputSockets, self.outputSockets, self.exceptSockets )
- self.listener.start()
- except socket.error, (value, message):
- if self.socket:
- self.socket.close()
- self.connection.pop(self.socket)
- print "Network:: FAILED to open socket: " + message
- self.mode = MD_OFFLINE
- self.hostAddress = None
- if self.listener:
- self.listenerSocket.sendto( "EXIT", ("localhost", LISTENER_PORT) )
- self.listener = None
-
- elif self.mode == MD_WAIT:
- if Config.DEBUG > 1: print "Network:: initializing network, wait mode"
- try:
- self.socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
- address = ("",WAIT_PORT)
- self.connection[self.socket] = Connection( self.socket, address )
- self.socket.bind(address)
- self.socket.listen(BACKLOG)
- self.inputSockets.append(self.socket)
- if not self._fromListener and self.listener:
- self.listenerSocket.sendto( "REFRESH", ("localhost", LISTENER_PORT) )
- elif not self.listener:
- self.listener = Listener( self, self.listenerSocket, self.inputSockets, self.outputSockets, self.exceptSockets )
- self.listener.start()
- except socket.error, (value, message):
- if self.socket:
- self.socket.close()
- self.connection.pop(self.socket)
- print "Network:: FAILED to open socket: " + message
- self.mode = MD_OFFLINE
- if self.listener:
- self.listenerSocket.sendto( "EXIT", ("localhost", LISTENER_PORT) )
- self.listener = None
-
- else:
- if Config.DEBUG > 1: print "Network:: offline"
- if self.listener:
- self.listenerSocket.sendto( "EXIT", ("localhost", LISTENER_PORT) )
- self.listener = None
-
- for watcher in self.statusWatcher:
- watcher( self.mode )
-
- def _clearSockets( self ):
- for s in self.inputSockets:
- if s != self.listenerSocket:
- self.inputSockets.remove(s)
- self.connection.pop(s)
- s.close()
- for s in self.outputSockets:
- self.outputSockets.remove(s)
- s.close()
- for s in self.exceptSockets:
- self.exceptSockets.remove(s)
- s.close()
-
-
- def introducePeer( self, ip ):
- if Config.DEBUG > 1: print "Network:: introducing self to peer " + ip
- try:
- poke = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
- poke.setblocking(0)
- except socket.error, (value, message):
- print "Network::introducePeer:: FAILED to open socket: " + message
- return
- if poke.connect_ex( (ip, WAIT_PORT) ): # failed to connect
- gobject.timeout_add( 500, self._pokePeer, poke, ip, 0 )
- else: # connected
- if Config.DEBUG > 1: print "Netwtork:: introduction succeeded"
- poke.close()
-
- def _pokePeer( self, poke, ip, retry ):
- if poke.connect_ex( (ip, WAIT_PORT) ): # failed to connect
- if retry > 120: # give up
- print "Network::introducePeer:: peer failed to respond after 60 seconds, giving up!"
- else:
- gobject.timeout_add( 500, self._pokePeer, poke, ip, retry+1 )
- else: # connected
- if Config.DEBUG > 1: print "Netwtork:: introduction succeeded"
- poke.close()
-
- return False
-
-
- def addPeer( self, peer, address ):
- if Config.DEBUG > 1: print "Network:: adding peer: %s" % address[0]
- self.connection[peer] = Connection( peer, address )
- self.inputSockets.append( peer )
- self.listenerSocket.sendto( "REFRESH", ("localhost", LISTENER_PORT) )
- #self.listener.updateSockets( self.inputSockets, self.outputSockets, self.exceptSockets )
-
- def removePeer( self, peer ):
- if Config.DEBUG > 1: print "Network:: removing peer: %s" % self.connection[peer].address[0]
- self.connection.pop(peer)
- self.inputSockets.remove(peer)
- self.listenerSocket.sendto( "REFRESH", ("localhost", LISTENER_PORT) )
- #self.listener.updateSockets( self.inputSockets, self.outputSockets, self.exceptSockets )
-
- # register a status watcher, format: func( self, status, args )
- def addWatcher( self, func ):
- self.statusWatcher.append( func )
-
- def removeWatcher( self, func ):
- self.statusWatcher.remove( func )
-
- # connect a message handler, format: func( self, sock, message, data )
- def connectMessage( self, message, func ):
- self.processMessage[message].append(func)
-
- def connectMessageAfter( self, message, func, after ):
- try:
- ind = self.processMessage[message].index(after)
- self.processMessage[message].insert(ind+1,func)
- except:
- print "Network::connectMessageAfter:: function not registered: " + str(after)
-
- def connectMessageBefore( self, message, func, before ):
- try:
- ind = self.processMessage[message].index(before)
- self.processMessage[message].insert(ind,func)
- except:
- print "Network::connectMessageBefore:: function not registered: " + str(before)
-
- def disconnectMessage( self, message, func ):
- try:
- self.processMessage[message].remove(func)
- except:
- print "Network::disconnectMessage:: function not registered: " + str(func)
-
- def isOffline( self ):
- if self.mode == MD_OFFLINE: return True
- return False
-
- def isOnline( self ):
- if self.mode != MD_OFFLINE: return True
- return False
-
- def isHost( self ):
- if self.mode == MD_HOST: return True
- return False
-
- def isPeer( self ):
- if self.mode == MD_PEER: return True
- return False
-
- def isWaiting( self ):
- if self.mode == MD_WAIT: return True
- return False
-
-
- #-----------------------------------------------------------------------
- # Message Senders
-
- # basic send function
- # - message type will be automatically inserted before the data
- # - message size will be automatically inserted if applicable
- # - to is only defined in HOST mode
- def send( self, message, data = "", to = None ):
- if self.mode == MD_OFFLINE:
- return
-
- length = len(data)
- size = MSG_SIZE[message]
-
- if size >= 0:
- if length != size:
- print "Network:: message wrong length! Got %d expected %d: %s" % (len(data), MSG_SIZE[message], MSG_NAME[message])
- return
- msg = chr(message) + data
- elif size == -1:
- if length > 255:
- print "Network:: oversized message! Got %d, max size 255: %s" % (length, MSG_NAME[message])
- return
- msg = chr(message) + chr(length) + data
- else: # size == -2
- self.packer.pack_uint(size)
- msg = chr(message) + self.packer.get_buffer() + data
- self.packer.reset()
-
- if self.mode == MD_PEER:
- try:
- self.socket.send( msg )
- #print "Network:: sent %d bytes" % (len(msg))
- except socket.error, (value, errmsg):
- print "Network:: FAILED to send message (%s) to %s: %s" % (MSG_NAME[message], self.hostAddress[0], errmsg)
- # TODO something intelligent
- else: # MD_HOST
- try:
- to.send( msg )
- #print "Network:: sent %d bytes" % (len(msg))
- except socket.error, (value, errmsg):
- print "Network:: FAILED to send message (%s) to %s: %s" % (MSG_NAME[message], self.connection[to].address[0], errmsg)
- # TODO something intelligent
-
-
- def sendAll( self, message, data = "" ):
- if self.mode != MD_HOST:
- return
-
- length = len(data)
- size = MSG_SIZE[message]
-
- if size >= 0:
- if length != size:
- print "Network:: message wrong length! Got %d expected %d: %s" % (MSG_SIZE[message], len(data), MSG_NAME[message])
- return
- msg = chr(message) + data
- elif size == -1:
- if length > 255:
- print "Network:: oversized message! Size %d, max size 255: %s" % (length, MSG_NAME[message])
- return
- msg = chr(message) + chr(length) + data
- else: # size == -2
- self.packer.pack_uint(size)
- msg = chr(message) + self.packer.get_buffer() + data
- self.packer.reset()
-
- for sock in self.connection:
- if sock == self.socket:
- continue
- try:
- sock.send( msg )
- except socket.error, (value, errmsg):
- print "Network:: FAILED to send message (%s) to %s: %s" % (MSG_NAME[message], self.connection[sock].address[0], errmsg)
- # TODO something intelligent
-
- def sendLatencyQuery( self, handler ):
- if self.mode != MD_PEER:
- return
-
- self.packer.pack_float(random.random())
- hash = self.packer.get_buffer()
- self.packer.reset()
- self.latencyQueryHandler[hash] = handler
- self.latencyQueryStart[hash] = time.time()
- self.send(PR_LATENCY_QUERY,hash)
-
- #-----------------------------------------------------------------------
- # Message Handlers
-
- def _processSockets( self, inputReady ):
-
- self._fromListener = True
-
- if self.mode == MD_HOST:
-
- for s in inputReady:
- if s == self.socket:
- # accept new connections
- try:
- peer, address = self.socket.accept()
- self.addPeer( peer, address )
- except socket.error, (value, message):
- print "Network:: error accepting connection: " + message
-
- else:
- try:
- data = s.recv(MAX_SIZE)
- #print "Network:: recv %d bytes: %s" % (len(data), data)
- if not len(data): # no data to read, socket must be closed
- self.removePeer(s)
- else:
- self.processStream( s, data )
- except socket.error, (value, message):
- print "Network:: error reading data: " + message
-
- elif self.mode == MD_PEER:
-
- for s in inputReady:
- try:
- data = s.recv(MAX_SIZE)
- if not len(data): # no data to read, socket must be closed
- self.setMode( MD_OFFLINE )
- else:
- #print "Network:: recv %d bytes: %s" % (len(data), data)
- self.processStream( s, data )
- except socket.error, (value, message):
- print "Network:: error reading data: " + message
-
- else: # MD_WAIT
-
- for s in inputReady:
- try:
- peer, address = self.socket.accept()
- self.setMode( MD_PEER, (address[0], PORT) )
- except socket.error, (value, message):
- print "Network:: error accepting connection: " + message
-
- self._fromListener = False
-
-
- def processStream( self, sock, newData = "" ):
- con = self.connection[sock]
- con.recvBuf += newData
-
- if con.waitingForData == -1: # message size in char
- con.waitingForData = ord(con.recvBuf[0])
- con.recvBuf = con.recvBuf[1:]
-
- elif con.waitingForData == -2: # message size in uint
- if len(con.recvBuf) >= 4:
- self.unpacker.reset(con.recvBuf[0:4])
- con.waitingForData = self.unpacker.unpack_uint()
- con.recvBuf = con.recvBuf[4:]
- else:
- return # wait for more data
-
- elif con.waitingForData:
- if len(con.recvBuf) >= con.waitingForData:
- data = con.recvBuf[0:con.waitingForData]
- con.recvBuf = con.recvBuf[con.waitingForData:]
- con.waitingForData = 0
- for func in self.processMessage[con.message]:
- gobject.idle_add( func, sock, con.message, data )
- else:
- return # wait for more data
-
- else:
- con.message = ord(con.recvBuf[0])
- if MSG_SIZE[con.message] == 0:
- con.recvBuf = con.recvBuf[1:]
- for func in self.processMessage[con.message]:
- gobject.idle_add( func, sock, con.message, "" )
- else:
- con.waitingForData = MSG_SIZE[con.message]
- con.recvBuf = con.recvBuf[1:]
-
- if len(con.recvBuf):
- self.processStream( sock )
-
- #-- HOST handlers ------------------------------------------------------
- def processPR_LATENCY_QUERY( self, sock, message, data ):
- self.send( HT_LATENCY_REPLY, data, sock )
-
- #-- PEER handlers ------------------------------------------------------
- def processHT_LATENCY_REPLY( self, sock, message, data ):
- t = time.time()
- latency = t - self.latencyQueryStart[data]
- #print "got latency reply %d" % (latency*1000)
- self.latencyQueryHandler[data]( latency )
- self.latencyQueryHandler.pop(data)
- self.latencyQueryStart.pop(data)
-
-
diff --git a/TamTamSynthLab.activity/common/Util/NoteDB.py b/TamTamSynthLab.activity/common/Util/NoteDB.py
deleted file mode 100644
index 646f8d8..0000000
--- a/TamTamSynthLab.activity/common/Util/NoteDB.py
+++ /dev/null
@@ -1,813 +0,0 @@
-import common.Util.InstrumentDB as InstrumentDB
-import common.Config as Config
-
-class PARAMETER:
- PAGE_BEATS, \
- PAGE_COLOR, \
- ONSET, \
- PITCH, \
- AMPLITUDE, \
- DURATION, \
- INSTRUMENT, \
- PAN, \
- REVERB, \
- ATTACK, \
- DECAY, \
- FILTERTYPE, \
- FILTERCUTOFF, \
- INSTRUMENT2 \
- = range(14) #python-stye enum
-
-class Note:
- def __init__( self, page, track, id, cs ):
- self.page = page
- self.track = track
- self.id = id
- self.cs = cs
-
- self.csStack = []
-
- def pushState( self ):
- self.csStack.append( self.cs.clone() )
-
- def popState( self ):
- self.cs = self.csStack.pop()
-
-class Page:
- def __init__( self, beats, color = 0, instruments = False, local = True ): # , tempo, insruments, color = 0 ):
- self.instrumentDB = InstrumentDB.getRef()
- self.beats = beats
- self.ticks = beats*Config.TICKS_PER_BEAT
-
- self.color = color
-
- if not instruments:
- self.instruments = [ self.instrumentDB.instNamed["kalimba"].instrumentId for i in range(Config.NUMBER_OF_TRACKS-1) ] + [ self.instrumentDB.instNamed["drum1kit"].instrumentId ]
- else:
- self.instruments = instruments[:]
-
- self.local = local # page local/global?
-
- self.nextNoteId = 0 # first note will be 1
-
- def genId( self ):
- self.nextNoteId += 1
- if self.nextNoteId == 65536: # short
- print "note id overflow!"
- # TODO think of how to handle this!?
- return self.nextNoteId
-
- def setLocal( self, local ):
- self.local = local
-
-class PageListener:
- def notifyPageAdd( self, id, at ):
- pass
-
- def notifyPageDelete( self, which, safe ):
- pass
-
- def notifyPageDuplicate( self, new, at ):
- pass
-
- def notifyPageMove( self, which, low, high ):
- pass
-
- def notifyPageUpdate( self, which, parameter, value ):
- pass
-
-class NoteListener:
- def notifyNoteAdd( self, page, track, id ):
- pass
- def notifyNoteDelete( self, page, track, id ):
- pass
- def notifyNoteUpdate( self, page, track, id, parameter, value ):
- pass
-
-class NoteDB:
- def __init__( self ):
- self.instrumentDB = InstrumentDB.getRef()
- self.noteD = {} # bins containing all the notes by page, track, and id
- # structure self.noteD[pageId][trackIndex][noteId]
-
- self.noteS = {} # bins containing all the notes by page and track
- # first sorted by onset then by pitch (for drum hits)
- # structure self.noteS[pageId][trackIndex][noteIndex]
-
- self.pages = {} # dict of Pages indexed by pageId
-
- self.tune = [] # list of pageIds ordered by tune
-
- #self.beatsBefore = {} # count of beats on previous pages indexed by page id
-
- self.listeners = [] # complete list of listeners
- self.pageListeners = [] # list of listeners who want page notifications
- self.noteListeners = [] # list of listeners who want note notifications
- self.parasiteList = {} # dict of parasites indexed by listener
-
- self.parasiteD = {} # bin of parasites indexed by listener
- self.parasiteS = {} # parasites sorted as in self.noteS,
-
- self.nextId = 0 # base id, first page will be 1
-
- self.clipboard = [] # stores copied cs notes
- self.clipboardArea = [] # stores the limits and tracks for each page in the clipboard
-
- def dumpToStream( self, ostream, localOnly = False ):
- for pid in self.tune:
- if not localOnly or self.pages[pid].local:
- ostream.page_add(pid, self.pages[pid])
- for note in self.getNotesByPage( pid ):
- ostream.note_add( note )
-
- #-- private --------------------------------------------
- def _genId( self ):
- self.nextId += 1
- if self.nextId == 65536: # short
- print "page id overflow!"
- # TODO think of how to handle this!?
- return self.nextId
-
- #=======================================================
- # Page Functions
-
- def addPage( self, pid, page, after = False ):
- pid = self._newPage( pid, page )
- at = self._insertPage( pid, after )
-
- #self._updateBeatsBefore( at )
-
- for l in self.pageListeners:
- l.notifyPageAdd( pid, at )
-
- return pid
-
- def deletePages( self, which, instruments = False ):
- beats = self.pages[self.tune[0]].beats
-
- low = 999999
- ind = -1
- for id in which:
- ind = self.tune.index(id)
- if ind < low: low = ind
-
- for t in range(Config.NUMBER_OF_TRACKS):
- for n in self.noteD[id][t].keys():
- self.deleteNote( id, t, n )
-
- #del self.beatsBefore[id]
-
- del self.noteD[id]
- del self.noteS[id]
- del self.parasiteD[id]
- del self.parasiteS[id]
- del self.pages[id]
-
- at = self.tune.index( id )
- self.tune.pop(at)
-
- if not len(self.tune):
- self.addPage( -1, Page(beats, instruments = instruments) ) # always have at least one page
- safe = self.tune[0]
- #self._updateBeatsBefore(0)
- else:
- safe = self.tune[max(ind-1,0)]
- #self._updateBeatsBefore(low)
-
- for l in self.pageListeners:
- l.notifyPageDelete( which, safe )
-
- def duplicatePages( self, which, after = False ):
- sorted = []
- if after: first = self.tune.index(after)+1
- else: first = 0
-
- i = j = 0
- while i < len(self.tune) and j < len(which):
- if self.tune[i] in which:
- sorted.append(self.tune[i])
- j += 1
- i += 1
-
- new = {}
- for cp in sorted:
- id = self._newPage( -1, Page(self.pages[cp].beats,self.pages[cp].color,self.pages[cp].instruments) )
- self._insertPage( id, after )
- after = id
- new[cp] = id
-
- #self._updateBeatsBefore( first )
-
- for l in self.pageListeners:
- l.notifyPageDuplicate( new, first )
-
- for cp in sorted:
- for t in range(Config.NUMBER_OF_TRACKS):
- for n in self.noteD[cp][t].keys():
- self.duplicateNote( cp, t, n, new[cp], t, 0 )
-
- return new
-
- def movePages( self, which, after = False ):
- sorted = []
- if after: at = self.tune.index(after)+1
- else: at = 0
- low = high = at
-
- i = j = 0
- while i < len(self.tune):
- if self.tune[i] in which:
- sorted.append(self.tune[i])
- self.tune.pop(i)
- if i < low: low = i
- if i > high: high = i
- if i < at: at -= 1
- j += 1
- else:
- i += 1
-
- self.tune = self.tune[:at] + sorted + self.tune[at:]
-
- #self._updateBeatsBefore( low )
-
- for l in self.pageListeners:
- l.notifyPageMove( sorted, low, high )
-
- def updatePage( self, page, parameter, value ):
- if parameter == PARAMETER.PAGE_BEATS:
- ticks = value*Config.TICKS_PER_BEAT
- if self.pages[page].beats > value: # crop some notes
- dstream = []
- ustream = []
- for track in range(Config.NUMBER_OF_TRACKS):
- dsub = []
- usub = []
- for note in self.getNotesByTrack(page, track):
- if ticks <= note.cs.onset:
- dsub.append( note.id )
- elif ticks < note.cs.onset + note.cs.duration:
- usub.append( note.id )
- usub.append( ticks - note.cs.onset )
- if len(dsub):
- dstream += [ page, track, len(dsub) ] + dsub
- if len(usub):
- ustream += [ page, track, PARAMETER.DURATION, len(usub)//2 ] + usub
- if len(dstream):
- self.deleteNotes( dstream + [-1] )
- if len(ustream):
- self.updateNotes( ustream + [-1] )
-
- self.pages[page].beats = value
- self.pages[page].ticks = ticks
- #self._updateBeatsBefore(self.tune.index(page))
- elif parameter == PARAMETER.PAGE_COLOR:
- self.pages[page].color = value
-
- for l in self.pageListeners:
- l.notifyPageUpdate( page, parameter, value )
-
- # stream format:
- # parameter id
- # number of following pages (N)
- # page id
- # value
- def updatePages( self, stream ):
- i = [-1]
- parameter = self._readstream(stream,i)
- N = self._readstream(stream,i)
- for j in range(N):
- page = self._readstream(stream,i)
- val = self._readstream(stream,i)
- self.updatePage( page, parameter, val )
-
- def getInstruments(self, pages):
- dict = {}
- for page in pages:
- list = []
- for track in range(Config.NUMBER_OF_TRACKS):
- list.append(self.instrumentDB.instId[self.pages[page].instruments[track]].name)
- dict[page] = list[:]
- return dict
-
- #-- private --------------------------------------------
- def _newPage( self, pid, page ):
- if pid == -1 : pid = self._genId()
- self.pages[pid] = page
- self.noteD[pid] = [ {} for i in range(Config.NUMBER_OF_TRACKS) ]
- self.noteS[pid] = [ [] for i in range(Config.NUMBER_OF_TRACKS) ]
- self.parasiteD[pid] = [ {} for i in range(Config.NUMBER_OF_TRACKS) ]
- self.parasiteS[pid] = [ {} for i in range(Config.NUMBER_OF_TRACKS) ]
- for i in range(Config.NUMBER_OF_TRACKS):
- for par in self.parasiteList.keys():
- self.parasiteD[pid][i][par] = {}
- self.parasiteS[pid][i][par] = []
- return pid
-
- def _insertPage( self, pid, after ):
- if not after: at = 0
- else: at = self.tune.index(after)+1
- self.tune.insert( at, pid )
-
- return at
-
- #def _updateBeatsBefore( self, ind ):
- # if ind == 0: beats = 0
- # else: beats = self.beatsBefore[self.tune[ind-1]] + self.pages[self.tune[ind-1]].beats
- # for i in range(ind, len(self.tune)):
- # self.beatsBefore[self.tune[ind]] = beats
- # beats += self.pages[self.tune[ind]].beats
-
-
-
- #=======================================================
- # Track Functions
-
- def setInstrument( self, pages, track, instrumentId ):
- stream = []
- for page in pages:
- self.pages[page].instruments[track] = instrumentId
- notes = self.getNotesByTrack( page, track )
- sub = []
- for note in notes:
- sub.append( note.id )
- sub.append( instrumentId )
- if len(sub):
- stream += [ page, track, PARAMETER.INSTRUMENT, len(sub)//2 ] + sub
- if len(stream):
- self.updateNotes( stream + [-1] )
-
- def setInstrument2( self, pages, track, instrumentId ):
- stream = []
- for page in pages:
- #self.pages[page].instruments[track] = instrumentId
- notes = self.getNotesByTrack( page, track )
- sub = []
- for note in notes:
- sub.append( note.id )
- sub.append( instrumentId )
- if len(sub):
- stream += [ page, track, PARAMETER.INSTRUMENT2, len(sub)//2 ] + sub
- if len(stream):
- self.updateNotes( stream + [-1] )
-
- #=======================================================
- # Note Functions
-
- def addNote( self, nid, page, track, cs, hint = False ):
- if nid == -1: nid = self.pages[page].genId()
- n = self.noteD[page][track][nid] = Note( page, track, nid, cs )
-
- if not hint: at = 0
- else: at = hint[0]
- while at > 0:
- onset = self.noteS[page][track][at-1].cs.onset
- if onset <= cs.onset:
- if onset <= cs.onset: break
- elif self.noteS[page][track][at-1].cs.pitch <= cs.pitch: break
- at -= 1
- last = len(self.noteS[page][track])
- while at < last:
- onset = self.noteS[page][track][at].cs.onset
- if onset >= cs.onset:
- if onset > cs.onset: break
- elif self.noteS[page][track][at].cs.pitch > cs.pitch: break
- at += 1
-
- self.noteS[page][track].insert( at, n )
-
- for par in self.parasiteList.keys():
- parasite = self.parasiteList[par]( self, par, n )
- self.parasiteD[page][track][par][nid] = parasite.attach() # give parasites the option of return something other than themselves
- self.parasiteS[page][track][par].insert( at, parasite.attach() )
-
- if hint: hint[0] = at + 1 # assume the next note will fall after this one
-
- for l in self.noteListeners:
- l.notifyNoteAdd( page, track, nid )
-
- return nid
-
- # stream format:
- # page id
- # track index
- # number of following notes (N)
- # cs pointer
- # ... up to N
- # page id or -1 to exit
- def addNotes( self, stream ):
- new = {}
- i = [-1]
- p = self._readstream(stream,i)
- while p != -1:
- if p not in new:
- new[p] = [ [] for x in range(Config.NUMBER_OF_TRACKS) ]
- t = self._readstream(stream,i)
- N = self._readstream(stream,i)
- hint = [0]
- for j in range(N):
- new[p][t].append( self.addNote( -1, p, t, self._readstream(stream,i), hint ) )
- p = self._readstream(stream,i)
-
- return new
-
- def deleteNote( self, page, track, id ):
- ind = self.noteS[page][track].index( self.noteD[page][track][id] )
-
- for par in self.parasiteList.keys():
- self.parasiteD[page][track][par][id].destroy()
- self.parasiteS[page][track][par].pop(ind)
- del self.parasiteD[page][track][par][id]
-
- self.noteS[page][track].pop(ind)
- del self.noteD[page][track][id]
-
- for l in self.noteListeners:
- l.notifyNoteDelete( page, track, id )
-
- # stream format:
- # page id
- # track index
- # number of following notes (N)
- # note id
- # ... up to N
- # page id or -1 to exit
- def deleteNotes( self, stream ):
- i = [-1]
- p = self._readstream(stream,i)
- while p != -1:
- t = self._readstream(stream,i)
- N = self._readstream(stream,i)
- for j in range(N):
- self.deleteNote( p, t, self._readstream(stream,i) )
- p = self._readstream(stream,i)
-
- def deleteNotesByTrack( self, pages, tracks ):
- for p in pages:
- for t in tracks:
- notes = self.noteS[p][t][:]
- for n in notes:
- self.deleteNote( p, t, n.id )
-
- def duplicateNote( self, page, track, id, toPage, toTrack, offset ):
- cs = self.noteD[page][track][id].cs.clone()
- cs.trackId = toTrack
- cs.pageId = toPage
- cs.onset += offset
- ticks = self.pages[toPage].ticks
- if cs.onset >= ticks: return False # off the end of the page
- if cs.onset + cs.duration > ticks:
- cs.duration = ticks - cs.onset
-
- return self.addNote( -1, toPage, toTrack, cs )
-
- # stream format:
- # page id
- # track index
- # toPage id
- # toTrack index
- # offset
- # number of following notes (N)
- # note id
- # ... up to N
- # page id or -1 to exit
- def duplicateNotes( self, stream ):
- i = [-1]
- p = self._readstream(stream,i)
- while p != -1:
- t = self._readstream(stream,i)
- toP = self._readstream(stream,i)
- toT = self._readstream(stream,i)
- offset = self._readstream(stream,i)
- N = self._readstream(stream,i)
- for j in range(N):
- self.duplicateNote( p, t, self._readstream(stream,i), toP, toT, offset )
- p = self._readstream(stream,i)
-
-
- def updateNote( self, page, track, id, parameter, value ):
- if parameter == PARAMETER.ONSET:
- self.noteD[page][track][id].cs.onset = value
- self._resortNote( page, track, id )
- elif parameter == PARAMETER.PITCH:
- self.noteD[page][track][id].cs.pitch= value
- self._resortNote( page, track, id )
- elif parameter == PARAMETER.AMPLITUDE:
- self.noteD[page][track][id].cs.amplitude = value
- elif parameter == PARAMETER.DURATION:
- self.noteD[page][track][id].cs.duration = value
- elif parameter == PARAMETER.INSTRUMENT:
- self.noteD[page][track][id].cs.instrumentId = value
- elif parameter == PARAMETER.PAN:
- self.noteD[page][track][id].cs.pan = value
- elif parameter == PARAMETER.REVERB:
- self.noteD[page][track][id].cs.reverbSend = value
- elif parameter == PARAMETER.ATTACK:
- self.noteD[page][track][id].cs.attack = value
- elif parameter == PARAMETER.DECAY:
- self.noteD[page][track][id].cs.decay = value
- elif parameter == PARAMETER.FILTERTYPE:
- self.noteD[page][track][id].cs.filterType = value
- elif parameter == PARAMETER.FILTERCUTOFF:
- self.noteD[page][track][id].cs.filterCutoff = value
- elif parameter == PARAMETER.INSTRUMENT2:
- self.noteD[page][track][id].cs.instrumentId2 = value
-
- for par in self.parasiteList.keys():
- self.parasiteD[page][track][par][id].updateParameter( parameter, value )
-
- for l in self.noteListeners:
- l.notifyNoteUpdate( page, track, id, parameter, value )
-
- # stream format:
- # page id
- # track index
- # parameter id
- # number of following notes (N)
- # note id
- # value
- # ... up to N
- # page id or -1 to exit
- def updateNotes( self, stream ):
- i = [-1]
- p = self._readstream(stream,i)
- while p != -1:
- t = self._readstream(stream,i)
- param = self._readstream(stream,i)
- N = self._readstream(stream,i)
- for j in range(N):
- self.updateNote( p, t, self._readstream(stream,i), param, self._readstream(stream,i) )
- p = self._readstream(stream,i)
-
- #-- private --------------------------------------------
- def _readstream( self, stream, i ):
- i[0] += 1
- return stream[i[0]]
-
- def _resortNote( self, page, track, id ):
- ins = out = self.noteS[page][track].index(self.noteD[page][track][id])
- cs = self.noteD[page][track][id].cs
- while ins > 0: # check backward
- onset = self.noteS[page][track][ins-1].cs.onset
- if onset <= cs.onset:
- if onset <= cs.onset: break
- elif self.noteS[page][track][ins-1].cs.pitch <= cs.pitch: break
- ins -= 1
- if ins == out: # check forward
- ins += 1
- last = len(self.noteS[page][track])
- while ins < last:
- onset = self.noteS[page][track][ins].cs.onset
- if onset >= cs.onset:
- if onset > cs.onset: break
- elif self.noteS[page][track][ins].cs.pitch > cs.pitch: break
- ins += 1
-
- if ins != out: # resort
- if ins > out: ins -= 1
- n = self.noteS[page][track].pop( out )
- self.noteS[page][track].insert( ins, n )
- for par in self.parasiteList.keys():
- p = self.parasiteS[page][track][par].pop( out )
- self.parasiteS[page][track][par].insert( ins, p )
-
-
- #=======================================================
- # Clipboard Functions
-
- # stream format:
- # page id
- # track index
- # number of following notes (N)
- # note id
- # ... up to N
- # page id or -1 to exit
- def notesToClipboard( self, stream ):
- self.clipboard = []
- self.clipboardArea = []
- i = [-1]
- pages = []
- p = self._readstream(stream,i)
- while p != -1:
- if p not in pages:
- page = [ [] for x in range(Config.NUMBER_OF_TRACKS) ]
- pageArea = { "limit": [ 99999, 0 ],
- "tracks": [ 0 for x in range(Config.NUMBER_OF_TRACKS) ] }
- pages.append(p)
- self.clipboard.append(page)
- self.clipboardArea.append(pageArea)
- else:
- ind = pages.index(p)
- page = self.clipboard[ind]
- pageArea = self.clipboardArea[ind]
- t = self._readstream(stream,i)
- pageArea["tracks"][t] = 1
- N = self._readstream(stream,i)
- for j in range(N):
- cs = self.noteD[p][t][self._readstream(stream,i)].cs.clone()
- if cs.onset < pageArea["limit"][0]: pageArea["limit"][0] = cs.onset
- if cs.onset + cs.duration > pageArea["limit"][1]: pageArea["limit"][1] = cs.onset + cs.duration
- page[t].append( cs )
- p = self._readstream(stream,i)
-
- return self.clipboardArea
-
- def tracksToClipboard( self, pages, tracks ):
- self.clipboard = []
- self.clipboardOrigin = [ 0, 0 ]
- self.clipboardArea = []
- for p in pages:
- page = [ [] for x in range(Config.NUMBER_OF_TRACKS) ]
- pageArea = { "limit": [ 0, 99999 ],
- "tracks": [ 0 for x in range(Config.NUMBER_OF_TRACKS) ] }
- self.clipboard.append(page)
- self.clipboardArea.append(pageArea)
- for t in tracks:
- pageArea["tracks"][t] = 1
- for id in self.noteD[p][t]:
- cs = self.noteD[p][t][id].cs.clone()
- page[t].append( cs )
-
- return self.clipboardArea
-
- # trackMap = { X: Y, W: Z, ... }; X,W are track indices, Y,Z are clipboard indices
- # instrumentMap = { X: Y, W: Z, ... }; X,W are track indices, Y,Z are instrument ids
- def pasteClipboard( self, pages, offset, trackMap, instrumentMap = {} ):
- if not len(self.clipboard): return
-
- deleteStream = []
- updateStream = []
- addStream = []
-
- pp = 0
- ppMax = len(self.clipboard)
- for p in pages:
- ticks = self.pages[p].ticks
- area = self.clipboardArea[pp]
- area["limit"][0] += offset
- area["limit"][1] += offset
- for t in trackMap.keys():
- if not area["tracks"][trackMap[t]]: continue
- if instrumentMap.has_key(t):
- updateInstrument = True
- instrumentId = instrumentMap[t]
- else:
- updateInstrument = False
- tdeleteStream = []
- tupdateOStream = []
- tupdateDStream = []
- taddStream = []
- # clear area
- for n in self.noteS[p][t]:
- start = n.cs.onset
- end = start + n.cs.duration
- if area["limit"][0] <= start < area["limit"][1]: start = area["limit"][1]
- if area["limit"][0] < end <= area["limit"][1]: end = area["limit"][0]
- if start < area["limit"][0] and end > area["limit"][1]: end = area["limit"][0]
- if end <= start:
- tdeleteStream.append( n.id )
- elif start != n.cs.onset:
- tupdateDStream += [ n.id, end - start ]
- tupdateOStream += [ n.id, start ]
- elif end != start + n.cs.duration:
- tupdateDStream += [ n.id, end - start ]
- if len(tdeleteStream):
- deleteStream += [ p, t, len(tdeleteStream) ] + tdeleteStream
- if len(tupdateOStream):
- updateStream += [ p, t, PARAMETER.ONSET, len(tupdateOStream)//2 ] + tupdateOStream
- if len(tupdateDStream):
- updateStream += [ p, t, PARAMETER.DURATION, len(tupdateDStream)//2 ] + tupdateDStream
- # paste notes
- for cs in self.clipboard[pp][trackMap[t]]:
- newcs = cs.clone()
- newcs.onset += offset
- if newcs.onset >= ticks: continue
- if newcs.onset + newcs.duration > ticks:
- newcs.duration = ticks - newcs.onset
- newcs.pageId = p
- newcs.trackId = t
- if updateInstrument:
- newcs.instrumentId = instrumentId
- # TODO update any other parameters?
- taddStream.append( newcs )
- if len(taddStream):
- addStream += [ p, t, len(taddStream) ] + taddStream
-
- pp += 1
- if pp == ppMax: pp -= ppMax
-
-
-
- if len(deleteStream):
- self.deleteNotes( deleteStream + [-1] )
- if len(updateStream):
- self.updateNotes( updateStream + [-1] )
- if len(addStream):
- return self.addNotes( addStream + [-1] )
-
- return None
-
- def getClipboardArea( self, ind ):
- N = len(self.clipboardArea)
- while ind >= N: ind -= N
- return self.clipboardArea[ind]
-
- #=======================================================
- # Listener Functions
-
- def addListener( self, listener, parasite = None, page = False, note = False ):
- if listener in self.listeners:
- return # only one listener per object
-
- if parasite:
- self.parasiteList[listener] = parasite
- self._addParasite( listener, parasite )
-
- if page: self.pageListeners.append( listener )
- if note: self.noteListeners.append( listener )
- self.listeners.append( listener )
-
- def deleteListener( self, listener ):
- self.listeners.remove( listener )
- if listener in self.pageListeners:
- self.pageListeners.remove( listener )
- if listener in self.noteListeners:
- self.noteListeners.remove( listener )
- if self.parasites.has_key( listener ):
- self._deleteParasite( listener )
- del self.parasiteList[listener]
-
- #-- private --------------------------------------------
- def _addParasite( self, listener, parasite ):
- for p in self.tune:
- for t in range(Config.NUMBER_OF_TRACKS):
- self.parasiteD[p][t][listener] = {}
- self.parasiteS[p][t][listener] = []
- for n in self.noteD[p][t].keys():
- parasite( self, listener, self.noteD[p][t][n] )
- self.parasiteD[p][t][listener][n] = parasite.attach() # give parasites the option of returning something other than themselves
- self.parasiteS[p][t][listener].insert( self.noteS[p][t].index( self.noteD[p][t][n]), parasite.attach() )
-
- def _deleteParasite( self, listener ):
- for p in self.tune:
- for t in range(Config.NUMBER_OF_TRACKS):
- for n in self.notes[p][t].keys():
- self.parasiteD[p][t][listener][n].destroy()
- del self.parasiteD[p][t][listener]
- del self.parasiteS[p][t][listener]
-
- #=======================================================
- # Get Functions
-
- def getPageCount( self ):
- return len(self.pages)
-
- def getTune( self ):
- return self.tune
-
- def getPage( self, page ):
- return self.pages[page]
-
- def getPageByIndex( self, ind ):
- return self.tune[ind]
-
- def getPageIndex( self, page ):
- return self.tune.index(page)
-
- # Not sure if this is useful!
- #def getBeatsBeforePage( self, page ):
- # return self.beatsBefore[page]
-
- def getNote( self, page, track, id, listener = None ):
- if listener:
- return self.parasiteD[page][track][listener][id]
- return self.noteD[page][track][id]
-
- def getNotesByPage( self, page, listener = None ):
- notes = []
- if listener:
- for i in range(Config.NUMBER_OF_TRACKS):
- notes.extend( self.parasiteS[page][i][listener] )
- else:
- for i in range(Config.NUMBER_OF_TRACKS):
- notes.extend( self.noteS[page][i] )
- return notes
-
-
- def getNotesByTrack( self, page, track, listener = None ):
- if listener:
- return self.parasiteS[page][track][listener]
- else:
- return self.noteS[page][track]
-
- def getNotes(self, listener = None ):
- notes = []
- for p in self.pages:
- notes.extend( self.getNotesByPage(p, listener ) )
- return notes
-
-
- def getCSNotesByPage( self, page ):
- return map( lambda n: n.cs, self.getNotesByPage( page ) )
-
- def getCSNotesByTrack( self, page, track ):
- return map( lambda n: n.cs, self.getNotesByTrack( page, track ) )
diff --git a/TamTamSynthLab.activity/common/Util/OS.py b/TamTamSynthLab.activity/common/Util/OS.py
deleted file mode 100644
index 605fbf4..0000000
--- a/TamTamSynthLab.activity/common/Util/OS.py
+++ /dev/null
@@ -1,36 +0,0 @@
-import commands
-import logging
-import os
-
-import common.Config as Config
-
-def system(*args):
- cmd = ' '.join(args)
- logging.debug('[system] %s' % cmd)
-
- status = commands.getstatusoutput(cmd)
- logging.debug('[system][out] %d: %s' % status)
-
- return status
-
-def arecord(duration, crop_csd, dst):
- tmp_file = os.path.join(Config.TMP_DIR, 'tempMic.wav')
- out_file = os.path.join(Config.TMP_DIR, 'micTemp.wav')
- crop_file = os.path.join(Config.FILES_DIR, crop_csd)
- dst_file = os.path.join(Config.DATA_DIR, dst)
-
- if system(Config.ARECORD, "-d", str(duration), tmp_file)[0] != 0:
- logging.error('arecord failed')
- return False
-
- system("csound", "--strset999=" + Config.TMP_DIR, crop_file)
-
- if os.path.isfile(dst):
- os.remove(dst_file)
-
- if os.path.isfile(out_file):
- os.rename(out_file, dst_file)
- os.remove(tmp_file)
- else:
- logging.debug('crop failed')
- os.rename(tmp_file, dst_file)
diff --git a/TamTamSynthLab.activity/common/Util/Profiler.py b/TamTamSynthLab.activity/common/Util/Profiler.py
deleted file mode 100644
index 0019a6c..0000000
--- a/TamTamSynthLab.activity/common/Util/Profiler.py
+++ /dev/null
@@ -1,93 +0,0 @@
-
-import time
-
-class TaskProfiler( object ):
- def __init__( self ):
- self.profiles = {}
-
- def ProfileBegin( self, profile ):
- if self.profiles.has_key(profile) == False: self.profiles[profile] = TaskProfile(profile)
- self.profiles[profile].begin()
-
- def ProfilePause( self, profile ):
- if self.profiles.has_key(profile) == False: return False
- self.profiles[profile].pause()
-
- def ProfileEnd( self, profile ):
- if self.profiles.has_key(profile) == False: return False
- self.profiles[profile].end()
-
- def Profile(self, profile):
- if profile in self.profiles:
- if self.profiles[profile].inProgress:
- self.profiles[profile].end()
- else:
- self.profiles[profile].begin()
- else:
- self.profiles[profile] = TaskProfile(profile)
- self.profiles[profile].begin()
-
- def ProfilePrint( self, profile ):
- if self.profiles.has_key(profile) == False: return "Couldn't find profile: " + profile
- return self.profiles[profile].printoverall()
-
- def ProfileEndAndPrint( self, profile ):
- if self.profiles.has_key(profile) == False: return "Couldn't find profile: " + profile
- self.profiles[profile].end()
- return self.profiles[profile].printlast()
-
-
- def PrintAll( self ):
- str = ""
- keys = self.profiles.keys()
- keys.sort()
- return "\n".join( [self.profiles[k].printoverall() for k in keys] )
- #for p in self.profiles:
- #str += "\n" + self.profiles[p].printoverall()
- #return str
-
-
-class TaskProfile( object ):
- def __init__( self, name ):
- self.name = name
- self.count = 0
- self.min = 666666666.0 # really high
- self.max = -1.0 # pretty low
- self.avg = 0.0
- self.dt = 0
- self.inProgress = False
- self.paused = False
-
- def begin( self ):
- if self.inProgress: return False # you fucked up your ProfileBegin and ProfileEnd pairs
- self.inProgress = True
- if self.paused:
- self.paused = False
- self.startTime += time.time() - self.pauseTime
- else:
- self.startTime = time.time()
-
- def pause( self ):
- self.pauseTime = time.time()
- self.inProgress = False
- self.paused = True
-
- def end( self ):
- self.dt = time.time() - self.startTime
- if self.paused:
- self.dt = self.pauseTime - self.startTime
- if self.dt > self.max: self.max = self.dt
- if self.dt < self.min: self.min = self.dt
- self.avg = (self.dt + self.avg*self.count)/(self.count+1)
- self.count += 1
- self.inProgress = False
- self.paused = False
-
- def printlast( self ):
- return "Profile: " + self.name + " last dt: %f" % (self.dt)
-
- def printoverall( self ):
- if self.count == 0: return "Profile: " + self.name + ", no data!"
- return "Profile: " + self.name + " avg: %f max: %f min: %f count: %d" % (self.avg, self.max, self.min, self.count)
-
-TP = TaskProfiler()
diff --git a/TamTamSynthLab.activity/common/Util/ThemeWidgets.py b/TamTamSynthLab.activity/common/Util/ThemeWidgets.py
deleted file mode 100644
index 6512655..0000000
--- a/TamTamSynthLab.activity/common/Util/ThemeWidgets.py
+++ /dev/null
@@ -1,1280 +0,0 @@
-import pygtk
-pygtk.require( '2.0' )
-import gtk
-import logging
-import common.Config as Config
-
-from sugar.graphics.combobox import ComboBox
-from sugar.graphics.palette import Palette, WidgetInvoker
-
-
-class ITYPE:
- PIXBUF = 0
- PIXMAP = 1
-
-class ImageHScale( gtk.HScale ):
- def __init__( self, image_name, adjustment = None, slider_border = 0, insensitive_name = None, trough_color = "#3D403A", snap = False ):
- gtk.HScale.__init__( self, adjustment )
-
- if snap: self.snap = 1/snap
- else: self.snap = False
-
- colormap = self.get_colormap()
- self.troughcolor = colormap.alloc_color( trough_color, True, True )
-
- img = gtk.Image()
- img.set_from_file( image_name )
- self.sliderPixbuf = img.get_pixbuf()
-
- if insensitive_name == None:
- self.insensitivePixbuf = None
- else:
- img = gtk.Image()
- img.set_from_file( insensitive_name )
- self.insensitivePixbuf = img.get_pixbuf()
-
- name = image_name + "ImageHScale"
- self.set_name(name)
-
- rc_str = """
-style "scale_style" {
- GtkRange::slider_width = %d
- GtkScale::slider_length = %d
-}
-widget "*%s*" style "scale_style"
- """ % ( self.sliderPixbuf.get_width(), self.sliderPixbuf.get_height(), name)
- gtk.rc_parse_string( rc_str )
-
- self.pixbufWidth = self.sliderPixbuf.get_width()
- self.pixbufHeight = self.sliderPixbuf.get_height()
- self.sliderBorder = slider_border
- self.sliderBorderMUL2 = self.sliderBorder*2
-
- self.set_draw_value(False)
-
- self.connect( "expose-event", self.expose )
- self.connect( "size-allocate", self.size_allocate )
- self.connect( "button-release-event", self.button_release )
- adjustment.connect( "changed", self.value_changed )
- adjustment.connect( "value-changed", self.value_changed )
-
- def size_allocate( self, widget, allocation ):
- self.alloc = allocation
- self.sliderY = self.alloc.height//2 - self.pixbufHeight//2
- return False
-
- def set_snap( self, snap ):
- if snap: self.snap = 1/snap
- else: self.snap = False
- self.queue_draw()
-
- def value_changed( self, adjustment ):
- if self.snap:
- val = round(self.snap*self.get_value())/self.snap
- if val != self.get_value():
- self.set_value( val )
- return True
-
- def expose( self, widget, event ):
-
- style = self.get_style()
- gc = style.fg_gc[gtk.STATE_NORMAL]
-
- gc.foreground = self.troughcolor
-
- self.window.draw_rectangle( gc, True, self.alloc.x + self.sliderBorder, self.alloc.y + self.alloc.height//2 - 1, self.alloc.width - self.sliderBorderMUL2, 3 )
-
- val = self.get_value()
- if self.snap:
- val = round(self.snap*val)/self.snap
- adj = self.get_adjustment()
- if self.get_inverted():
- sliderX = int((self.alloc.width - self.pixbufWidth)*(adj.upper-val)/(adj.upper - adj.lower))
- else:
- sliderX = int((self.alloc.width - self.pixbufWidth)*(val-adj.lower)/(adj.upper - adj.lower))
-
- if self.insensitivePixbuf != None and self.state == gtk.STATE_INSENSITIVE:
- self.window.draw_pixbuf( gc, self.insensitivePixbuf, 0, 0, self.alloc.x + sliderX, self.alloc.y + self.sliderY, self.pixbufWidth, self.pixbufHeight, gtk.gdk.RGB_DITHER_NORMAL, 0, 0 )
- else:
- self.window.draw_pixbuf( gc, self.sliderPixbuf, 0, 0, self.alloc.x + sliderX, self.alloc.y + self.sliderY, self.pixbufWidth, self.pixbufHeight, gtk.gdk.RGB_DITHER_NORMAL, 0, 0 )
-
- return True
-
- def button_release( self, widget, event ):
-
- if self.snap:
- self.set_value( round(self.snap*self.get_value())/self.snap )
-
-class ImageVScale( gtk.VScale ):
- def __init__( self, image_name, adjustment = None, slider_border = 0, insensitive_name = None, trough_color = "#3D403A", snap = False ):
- gtk.VScale.__init__( self, adjustment )
-
- if snap: self.snap = 1/snap
- else: self.snap = False
-
- colormap = self.get_colormap()
- self.troughcolor = colormap.alloc_color( trough_color, True, True )
-
- img = gtk.Image()
- img.set_from_file( image_name )
- self.sliderPixbuf = img.get_pixbuf()
-
- if insensitive_name == None:
- self.insensitivePixbuf = None
- else:
- img = gtk.Image()
- img.set_from_file( insensitive_name )
- self.insensitivePixbuf = img.get_pixbuf()
-
- name = image_name + "ImageVScale"
- self.set_name(name)
-
- rc_str = """
-style "scale_style" {
- GtkRange::slider_width = %d
- GtkScale::slider_length = %d
-}
-widget "*%s*" style "scale_style"
- """ % ( self.sliderPixbuf.get_width(), self.sliderPixbuf.get_height(), name)
- gtk.rc_parse_string( rc_str )
-
- self.pixbufWidth = self.sliderPixbuf.get_width()
- self.pixbufHeight = self.sliderPixbuf.get_height()
- self.sliderBorder = slider_border
- self.sliderBorderMUL2 = self.sliderBorder*2
-
- self.set_draw_value(False)
-
- self.connect( "expose-event", self.expose )
- self.connect( "size-allocate", self.size_allocate )
- self.connect( "button-release-event", self.button_release )
- adjustment.connect( "value-changed", self.value_changed )
-
- def size_allocate( self, widget, allocation ):
- self.alloc = allocation
- self.sliderX = self.alloc.width//2 - self.pixbufWidth//2
- return False
-
- def set_snap( self, snap ):
- if snap: self.snap = 1/snap
- else: self.snap = False
- self.queue_draw()
-
- def value_changed( self, adjustment ):
- if self.snap:
- val = round(self.snap*self.get_value())/self.snap
- if val != self.get_value():
- self.set_value( val )
-
- def expose( self, widget, event ):
-
- style = self.get_style()
- gc = style.fg_gc[gtk.STATE_NORMAL]
-
- gc.foreground = self.troughcolor
-
- self.window.draw_rectangle( gc, True, self.alloc.x + self.alloc.width//2 - 1, self.alloc.y + self.sliderBorder, 3, self.alloc.height - self.sliderBorderMUL2 )
-
- val = self.get_value()
- if self.snap:
- val = round(self.snap*val)/self.snap
- adj = self.get_adjustment()
- if self.get_inverted():
- sliderY = int((self.alloc.height - self.pixbufHeight)*(adj.upper-val)/(adj.upper - adj.lower))
- else:
- sliderY = int((self.alloc.height - self.pixbufHeight)*(val-adj.lower)/(adj.upper - adj.lower))
-
- if self.insensitivePixbuf != None and self.state == gtk.STATE_INSENSITIVE:
- self.window.draw_pixbuf( gc, self.insensitivePixbuf, 0, 0, self.alloc.x + self.sliderX, self.alloc.y + sliderY, self.pixbufWidth, self.pixbufHeight, gtk.gdk.RGB_DITHER_NORMAL, 0, 0 )
- else:
- self.window.draw_pixbuf( gc, self.sliderPixbuf, 0, 0, self.alloc.x + self.sliderX, self.alloc.y + sliderY, self.pixbufWidth, self.pixbufHeight, gtk.gdk.RGB_DITHER_NORMAL, 0, 0 )
-
- return True
-
- def button_release( self, widget, event ):
-
- if self.snap:
- self.set_value( round(self.snap*self.get_value())/self.snap )
-
-class XYSlider( gtk.EventBox ):
- def __init__( self, fixed, button, xadjustment, yadjustment, flipX = False, flipY = False ):
- gtk.EventBox.__init__( self )
-
- self.fixed = fixed
- self.button = button
- self.xadjustment = xadjustment
- self.yadjustment = yadjustment
- self.flipX = flipX
- self.flipY = flipY
-
- if ( button.get_parent() == None ):
- fixed.put( button, 0, 0 )
-
- self.add(fixed)
-
- self.fWidth = self.fHeight = 1
- self.bWidth = self.bHeight = 1
-
- self.add_events(gtk.gdk.POINTER_MOTION_HINT_MASK)
- self.connect( "size-allocate", lambda w,a:self.updateAlloc() )
- self.connect( "button-press-event", self.handlePress )
- self.connect( "button-release-event", self.handleRelease )
- self.connect( "motion-notify-event", self.handleMotion )
- self.button.connect( "size-allocate", lambda w,a: self.updateButton() )
- self.button.connect( "button-press-event", self.handleButtonPress )
- self.button.connect( "button-release-event", self.handleButtonRelease )
- self.button.add_events(gtk.gdk.BUTTON_MOTION_MASK|gtk.gdk.POINTER_MOTION_HINT_MASK)
- self.button.connect( "motion-notify-event", self.handleMotion )
- self.xadjustment.connect( "changed", lambda a1: self.updateAdjustemnt("x") )
- self.xadjustment.connect( "value-changed", lambda a1: self.updateLoc() )
- self.yadjustment.connect( "changed", lambda a1: self.updateAdjustment("y") )
- self.yadjustment.connect( "value-changed", lambda a1: self.updateLoc() )
-
- self.updateAdjustment("x")
- self.updateAdjustment("y")
- self.updateButton()
-
- def updateAlloc( self ):
- alloc = self.fixed.get_allocation()
- if self.fWidth != alloc.width or self.fHeight != alloc.height:
- self.fWidth = alloc.width
- self.fHeight = alloc.height
- self.width = self.fWidth - self.bWidth
- self.height = self.fHeight - self.bHeight
- self.updateLoc()
-
- def updateButton( self ):
- alloc = self.button.get_allocation()
- if self.bWidth != alloc.width or self.bHeight != alloc.height:
- self.bWidth = alloc.width
- self.bHeight = alloc.height
- self.bWidthDIV2 = alloc.width//2
- self.bHeightDIV2 = alloc.height//2
- self.width = self.fWidth - self.bWidth
- self.height = self.fHeight - self.bHeight
- self.updateLoc()
-
- def updateAdjustment( self, which ):
- if which == "x": self.xRange = int(self.xadjustment.upper - self.xadjustment.lower)
- else: self.yRange = int(self.yadjustment.upper - self.yadjustment.lower)
-
- def updateLoc( self ):
- if self.flipX: self.x = (self.width*int(self.xadjustment.upper - self.xadjustment.value))//self.xRange
- else: self.x = (self.width*int(self.xadjustment.value - self.xadjustment.lower))//self.xRange
- if self.flipY: self.y = (self.height*int(self.yadjustment.upper - self.yadjustment.value))//self.yRange
- else: self.y = (self.height*int(self.yadjustment.value - self.yadjustment.lower))//self.yRange
-
- self.fixed.move( self.button, self.x, self.y )
-
- def handlePress( self, w, event ):
- self.clickOffset = (0,0)
- self.updatePointer( int(event.x), int(event.y) )
- self.button.set_active(True)
-
- def handleRelease( self, w, event ):
- self.button.set_active(False)
- return True
-
- def handleButtonPress( self, w, event ):
- self.clickOffset = ( event.x - self.bWidthDIV2, event.y - self.bHeightDIV2 )
- self.button.set_active(True)
-
- def handleButtonRelease( self, w, event ):
- self.button.set_active(False)
- return True # block event propagation
-
- def handleMotion( self, w, event ):
- x, y, state = self.window.get_pointer()
- self.updatePointer( int(x - self.clickOffset[0]), int(y - self.clickOffset[1]) )
- return True
-
- def updatePointer( self, x, y ):
- x -= self.bWidthDIV2
- y -= self.bHeightDIV2
- if x < 0: x = 0
- elif x > self.width: x = self.width
- if y < 0: y = 0
- elif y > self.height: y = self.height
- if self.flipX: xvalue = self.xadjustment.lower+(self.xRange*(self.width - x))//self.width
- else: xvalue = self.xadjustment.lower+(self.xRange*x)//self.width
- if xvalue != self.xadjustment.value: self.xadjustment.set_value(xvalue)
- if self.flipY: yvalue = self.yadjustment.lower+(self.yRange*(self.height - y))//self.height
- else: yvalue = self.yadjustment.lower+(self.yRange*y)//self.height
- if yvalue != self.yadjustment.value: self.yadjustment.set_value(yvalue)
-
-class RoundHBox( gtk.HBox ):
- def __init__( self, radius = 5, fillcolor = "#000", bordercolor = "#FFF", homogeneous = False, spacing = 0 ):
- gtk.HBox.__init__( self, homogeneous, spacing )
- self.alloc = None
-
- self.radius = radius
-
- colormap = self.get_colormap()
- self.fillcolor = colormap.alloc_color(fillcolor,True,True)
- self.bordercolor = colormap.alloc_color(bordercolor,True,True)
-
- self.connect( "expose-event", self.expose )
- self.connect( "size-allocate", self.size_allocate )
-
- def update_constants( self ):
-
- if self.alloc == None: return
-
- self.borderW = self.get_border_width()
- self.borderWMUL2 = self.borderW*2
- self.corner = self.radius + self.borderW
- self.cornerMUL2 = self.corner*2
- self.cornerMINborderW = self.corner - self.borderW
-
- self.xPLUborderW = self.alloc.x + self.borderW
- self.xPLUcorner = self.alloc.x + self.corner
- self.xPLUwidthMINborderW = self.alloc.x + self.alloc.width - self.borderW
- self.xPLUwidthMINcorner = self.alloc.x + self.alloc.width - self.corner
- self.yPLUborderW = self.alloc.y + self.borderW
- self.yPLUcorner = self.alloc.y + self.corner
- self.yPLUheightMINborderW = self.alloc.y + self.alloc.height - self.borderW
- self.yPLUheightMINcorner = self.alloc.y + self.alloc.height - self.corner
- self.widthMINborderW = self.alloc.width - self.borderW
- self.widthMINcorner = self.alloc.width - self.corner
- self.widthMINcornerMUL2 = self.alloc.width - self.cornerMUL2
- self.heightMINborderW = self.alloc.height - self.borderW
- self.heightMINcorner = self.alloc.height - self.corner
- self.heightMINborderWMUL2 = self.alloc.height - self.borderWMUL2
- self.heightMINcornerMUL2 = self.alloc.height - self.cornerMUL2
-
- self.roundX1 = self.alloc.x + self.borderW - 1
- self.roundX2 = self.alloc.x + self.alloc.width - self.corner - self.radius - 1
- self.roundY1 = self.alloc.y + self.borderW - 1
- self.roundY2 = self.alloc.y + self.alloc.height - self.corner - self.radius - 1
- self.roundD = self.radius*2 + 1
- self.rightAngle = 90*64
-
- def size_allocate( self, widget, allocation ):
- self.alloc = allocation
- self.update_constants()
- return False
-
- def set_border_width( self, width ):
- gtk.HBox.set_border_width( self, width )
- self.update_constants()
-
- def set_radius( self, radius ):
- self.radius = radius
- self.update_constants()
-
- def set_fill_color( self, color ):
- colormap = self.get_colormap()
- self.fillcolor = colormap.alloc_color(color,True,True)
-
- def set_border_color( self, color ):
- colormap = self.get_colormap()
- self.bordercolor = colormap.alloc_color(color,True,True)
-
- def expose( self, widget, event ):
-
- if self.alloc == None: return
-
- #TP.ProfileBegin( "Round*Box::expose" )
-
- style = self.get_style()
- gc = style.fg_gc[gtk.STATE_NORMAL]
-
- startX = event.area.x - self.alloc.x
- startY = event.area.y - self.alloc.y
- stopX = startX + event.area.width
- stopY = startY + event.area.height
-
- saveForeground = gc.foreground
-
- # Note: could maybe do some optimization to fill only areas that are within the dirty rect, but drawing
- # seems to be quite fast compared to python code, so just leave it at clipping by each geometry feature
-
- gc.foreground = self.bordercolor
- if self.borderW:
- if stopY > self.corner and startY < self.heightMINcorner:
- if startX < self.borderW: # draw left border
- self.window.draw_rectangle( gc, True, self.alloc.x, self.yPLUcorner, self.borderW, self.heightMINcornerMUL2 )
- if stopX > self.widthMINborderW: # draw right border
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINborderW, self.yPLUcorner, self.borderW, self.heightMINcornerMUL2 )
-
- if stopX > self.corner and startX < self.widthMINcorner:
- if startY < self.borderW: # draw top border
- self.window.draw_rectangle( gc, True, self.xPLUcorner, self.alloc.y, self.widthMINcornerMUL2, self.borderW )
- if stopY > self.heightMINborderW: # draw bottom border
- self.window.draw_rectangle( gc, True, self.xPLUcorner, self.yPLUheightMINborderW, self.widthMINcornerMUL2, self.borderW )
-
- if startX < self.corner:
- if startY < self.corner: # draw top left corner
- self.window.draw_rectangle( gc, True, self.alloc.x, self.alloc.y, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX1, self.roundY1, self.roundD, self.roundD, self.rightAngle, self.rightAngle )
- gc.foreground = self.bordercolor
- if stopY > self.heightMINcorner: # draw bottom left corner
- self.window.draw_rectangle( gc, True, self.alloc.x, self.yPLUheightMINcorner, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX1, self.roundY2, self.roundD, self.roundD, -self.rightAngle, -self.rightAngle )
- gc.foreground = self.bordercolor
- if stopX > self.widthMINcorner:
- if startY < self.corner: # draw top right corner
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINcorner, self.alloc.y, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX2, self.roundY1, self.roundD, self.roundD, 0, self.rightAngle )
- gc.foreground = self.bordercolor
- if stopY > self.heightMINcorner: # draw bottom right corner
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINcorner, self.yPLUheightMINcorner, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX2, self.roundY2, self.roundD, self.roundD, 0, -self.rightAngle )
- gc.foreground = self.bordercolor
-
- gc.foreground = self.fillcolor
- if startX < self.widthMINcorner and stopX > self.corner:
- if startY < self.heightMINborderW and stopY > self.borderW: # draw centre fill
- self.window.draw_rectangle( gc, True, self.xPLUcorner, self.yPLUborderW, self.widthMINcornerMUL2, self.heightMINborderWMUL2 )
- if startX < self.corner and stopX > self.borderW:
- if startY < self.heightMINcorner and stopY > self.corner: # draw left fill
- self.window.draw_rectangle( gc, True, self.xPLUborderW, self.yPLUcorner, self.cornerMINborderW, self.heightMINcornerMUL2 )
- if startX < self.widthMINborderW and stopX > self.widthMINcorner:
- if startY < self.heightMINcorner and stopY > self.corner: # draw right fill
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINcorner, self.yPLUcorner, self.cornerMINborderW, self.heightMINcornerMUL2 )
-
- gc.foreground = saveForeground
-
- #TP.ProfileEnd( "Round*Box::expose" )
-
- return False
-
-class RoundVBox( gtk.VBox ):
- def __init__( self, radius = 5, fillcolor = "#000", bordercolor = "#FFF", homogeneous = False, spacing = 0 ):
- gtk.VBox.__init__( self, homogeneous, spacing )
- self.alloc = None
-
- self.radius = radius
-
- colormap = self.get_colormap()
- self.fillcolor = colormap.alloc_color(fillcolor,True,True)
- self.bordercolor = colormap.alloc_color(bordercolor,True,True)
-
- self.connect( "expose-event",self.expose )
- self.connect( "size-allocate", self.size_allocate )
-
- def update_constants( self ):
-
- if self.alloc == None: return
-
- self.borderW = self.get_border_width()
- self.borderWMUL2 = self.borderW*2
- self.corner = self.radius + self.borderW
- self.cornerMUL2 = self.corner*2
- self.cornerMINborderW = self.corner - self.borderW
-
- self.xPLUborderW = self.alloc.x + self.borderW
- self.xPLUcorner = self.alloc.x + self.corner
- self.xPLUwidthMINborderW = self.alloc.x + self.alloc.width - self.borderW
- self.xPLUwidthMINcorner = self.alloc.x + self.alloc.width - self.corner
- self.yPLUborderW = self.alloc.y + self.borderW
- self.yPLUcorner = self.alloc.y + self.corner
- self.yPLUheightMINborderW = self.alloc.y + self.alloc.height - self.borderW
- self.yPLUheightMINcorner = self.alloc.y + self.alloc.height - self.corner
- self.widthMINborderW = self.alloc.width - self.borderW
- self.widthMINcorner = self.alloc.width - self.corner
- self.widthMINcornerMUL2 = self.alloc.width - self.cornerMUL2
- self.heightMINborderW = self.alloc.height - self.borderW
- self.heightMINcorner = self.alloc.height - self.corner
- self.heightMINborderWMUL2 = self.alloc.height - self.borderWMUL2
- self.heightMINcornerMUL2 = self.alloc.height - self.cornerMUL2
-
- self.roundX1 = self.alloc.x + self.borderW - 1
- self.roundX2 = self.alloc.x + self.alloc.width - self.corner - self.radius - 1
- self.roundY1 = self.alloc.y + self.borderW - 1
- self.roundY2 = self.alloc.y + self.alloc.height - self.corner - self.radius - 1
- self.roundD = self.radius*2 + 1
- self.rightAngle = 90*64
-
- def size_allocate( self, widget, allocation ):
- self.alloc = allocation
- self.update_constants()
- return False
-
- def set_border_width( self, width ):
- gtk.VBox.set_border_width( self, width )
- self.update_constants()
-
- def set_radius( self, radius ):
- self.radius = radius
- self.update_constants()
-
- def set_fill_color( self, color ):
- colormap = self.get_colormap()
- self.fillcolor = colormap.alloc_color(color,True,True)
-
- def set_border_color( self, color ):
- colormap = self.get_colormap()
- self.bordercolor = colormap.alloc_color(color,True,True)
-
- def expose( self, widget, event ):
-
- if self.alloc == None: return
-
- #TP.ProfileBegin( "Round*Box::expose" )
-
- style = self.get_style()
- gc = style.fg_gc[gtk.STATE_NORMAL]
-
- startX = event.area.x - self.alloc.x
- startY = event.area.y - self.alloc.y
- stopX = startX + event.area.width
- stopY = startY + event.area.height
-
- saveForeground = gc.foreground
-
- # Note: could maybe do some optimization to fill only areas that are within the dirty rect, but drawing
- # seems to be quite fast compared to python code, so just leave it at clipping by each geometry feature
-
- gc.foreground = self.bordercolor
- if self.borderW:
- if stopY > self.corner and startY < self.heightMINcorner:
- if startX < self.borderW: # draw left border
- self.window.draw_rectangle( gc, True, self.alloc.x, self.yPLUcorner, self.borderW, self.heightMINcornerMUL2 )
- if stopX > self.widthMINborderW: # draw right border
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINborderW, self.yPLUcorner, self.borderW, self.heightMINcornerMUL2 )
-
- if stopX > self.corner and startX < self.widthMINcorner:
- if startY < self.borderW: # draw top border
- self.window.draw_rectangle( gc, True, self.xPLUcorner, self.alloc.y, self.widthMINcornerMUL2, self.borderW )
- if stopY > self.heightMINborderW: # draw bottom border
- self.window.draw_rectangle( gc, True, self.xPLUcorner, self.yPLUheightMINborderW, self.widthMINcornerMUL2, self.borderW )
-
- if startX < self.corner:
- if startY < self.corner: # draw top left corner
- self.window.draw_rectangle( gc, True, self.alloc.x, self.alloc.y, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX1, self.roundY1, self.roundD, self.roundD, self.rightAngle, self.rightAngle )
- gc.foreground = self.bordercolor
- if stopY > self.heightMINcorner: # draw bottom left corner
- self.window.draw_rectangle( gc, True, self.alloc.x, self.yPLUheightMINcorner, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX1, self.roundY2, self.roundD, self.roundD, -self.rightAngle, -self.rightAngle )
- gc.foreground = self.bordercolor
- if stopX > self.widthMINcorner:
- if startY < self.corner: # draw top right corner
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINcorner, self.alloc.y, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX2, self.roundY1, self.roundD, self.roundD, 0, self.rightAngle )
- gc.foreground = self.bordercolor
- if stopY > self.heightMINcorner: # draw bottom right corner
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINcorner, self.yPLUheightMINcorner, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX2, self.roundY2, self.roundD, self.roundD, 0, -self.rightAngle )
- gc.foreground = self.bordercolor
-
- gc.foreground = self.fillcolor
- if startX < self.widthMINcorner and stopX > self.corner:
- if startY < self.heightMINborderW and stopY > self.borderW: # draw centre fill
- self.window.draw_rectangle( gc, True, self.xPLUcorner, self.yPLUborderW, self.widthMINcornerMUL2, self.heightMINborderWMUL2 )
- if startX < self.corner and stopX > self.borderW:
- if startY < self.heightMINcorner and stopY > self.corner: # draw left fill
- self.window.draw_rectangle( gc, True, self.xPLUborderW, self.yPLUcorner, self.cornerMINborderW, self.heightMINcornerMUL2 )
- if startX < self.widthMINborderW and stopX > self.widthMINcorner:
- if startY < self.heightMINcorner and stopY > self.corner: # draw right fill
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINcorner, self.yPLUcorner, self.cornerMINborderW, self.heightMINcornerMUL2 )
-
- gc.foreground = saveForeground
-
- #TP.ProfileEnd( "Round*Box::expose" )
-
- return False
-
-class RoundFixed( gtk.Fixed ):
- def __init__( self, radius = 5, fillcolor = "#000", bordercolor = "#FFF" ):
- gtk.Fixed.__init__( self )
- self.alloc = None
-
- self.radius = radius
-
- colormap = self.get_colormap()
- self.fillcolor = colormap.alloc_color(fillcolor,True,True)
- self.bordercolor = colormap.alloc_color(bordercolor,True,True)
-
- self.connect( "expose-event", self.expose )
- self.connect( "size-allocate", self.size_allocate )
-
- def update_constants( self ):
-
- if self.alloc == None: return
-
- self.borderW = self.get_border_width()
- self.borderWMUL2 = self.borderW*2
- self.corner = self.radius + self.borderW
- self.cornerMUL2 = self.corner*2
- self.cornerMINborderW = self.corner - self.borderW
-
- self.xPLUborderW = self.alloc.x + self.borderW
- self.xPLUcorner = self.alloc.x + self.corner
- self.xPLUwidthMINborderW = self.alloc.x + self.alloc.width - self.borderW
- self.xPLUwidthMINcorner = self.alloc.x + self.alloc.width - self.corner
- self.yPLUborderW = self.alloc.y + self.borderW
- self.yPLUcorner = self.alloc.y + self.corner
- self.yPLUheightMINborderW = self.alloc.y + self.alloc.height - self.borderW
- self.yPLUheightMINcorner = self.alloc.y + self.alloc.height - self.corner
- self.widthMINborderW = self.alloc.width - self.borderW
- self.widthMINcorner = self.alloc.width - self.corner
- self.widthMINcornerMUL2 = self.alloc.width - self.cornerMUL2
- self.heightMINborderW = self.alloc.height - self.borderW
- self.heightMINcorner = self.alloc.height - self.corner
- self.heightMINborderWMUL2 = self.alloc.height - self.borderWMUL2
- self.heightMINcornerMUL2 = self.alloc.height - self.cornerMUL2
-
- self.roundX1 = self.alloc.x + self.borderW - 1
- self.roundX2 = self.alloc.x + self.alloc.width - self.corner - self.radius - 1
- self.roundY1 = self.alloc.y + self.borderW - 1
- self.roundY2 = self.alloc.y + self.alloc.height - self.corner - self.radius - 1
- self.roundD = self.radius*2 + 1
- self.rightAngle = 90*64
-
- def size_allocate( self, widget, allocation ):
- self.alloc = allocation
- self.update_constants()
- return False
-
- def set_border_width( self, width ):
- gtk.Fixed.set_border_width( self, width )
- self.update_constants()
-
- def set_radius( self, radius ):
- self.radius = radius
- self.update_constants()
-
- def set_fill_color( self, color ):
- colormap = self.get_colormap()
- self.fillcolor = colormap.alloc_color(color,True,True)
-
- def set_border_color( self, color ):
- colormap = self.get_colormap()
- self.bordercolor = colormap.alloc_color(color,True,True)
-
- def expose( self, widget, event ):
-
- if self.alloc == None: return
-
- #TP.ProfileBegin( "Round*Box::expose" )
-
- style = self.get_style()
- gc = style.fg_gc[gtk.STATE_NORMAL]
-
- startX = event.area.x - self.alloc.x
- startY = event.area.y - self.alloc.y
- stopX = startX + event.area.width
- stopY = startY + event.area.height
-
- saveForeground = gc.foreground
-
- # Note: could maybe do some optimization to fill only areas that are within the dirty rect, but drawing
- # seems to be quite fast compared to python code, so just leave it at clipping by each geometry feature
-
- gc.foreground = self.bordercolor
- if self.borderW:
- if stopY > self.corner and startY < self.heightMINcorner:
- if startX < self.borderW: # draw left border
- self.window.draw_rectangle( gc, True, self.alloc.x, self.yPLUcorner, self.borderW, self.heightMINcornerMUL2 )
- if stopX > self.widthMINborderW: # draw right border
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINborderW, self.yPLUcorner, self.borderW, self.heightMINcornerMUL2 )
-
- if stopX > self.corner and startX < self.widthMINcorner:
- if startY < self.borderW: # draw top border
- self.window.draw_rectangle( gc, True, self.xPLUcorner, self.alloc.y, self.widthMINcornerMUL2, self.borderW )
- if stopY > self.heightMINborderW: # draw bottom border
- self.window.draw_rectangle( gc, True, self.xPLUcorner, self.yPLUheightMINborderW, self.widthMINcornerMUL2, self.borderW )
-
- if startX < self.corner:
- if startY < self.corner: # draw top left corner
- self.window.draw_rectangle( gc, True, self.alloc.x, self.alloc.y, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX1, self.roundY1, self.roundD, self.roundD, self.rightAngle, self.rightAngle )
- gc.foreground = self.bordercolor
- if stopY > self.heightMINcorner: # draw bottom left corner
- self.window.draw_rectangle( gc, True, self.alloc.x, self.yPLUheightMINcorner, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX1, self.roundY2, self.roundD, self.roundD, -self.rightAngle, -self.rightAngle )
- gc.foreground = self.bordercolor
- if stopX > self.widthMINcorner:
- if startY < self.corner: # draw top right corner
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINcorner, self.alloc.y, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX2, self.roundY1, self.roundD, self.roundD, 0, self.rightAngle )
- gc.foreground = self.bordercolor
- if stopY > self.heightMINcorner: # draw bottom right corner
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINcorner, self.yPLUheightMINcorner, self.corner, self.corner )
- gc.foreground = self.fillcolor
- self.window.draw_arc( gc, True, self.roundX2, self.roundY2, self.roundD, self.roundD, 0, -self.rightAngle )
- gc.foreground = self.bordercolor
-
- gc.foreground = self.fillcolor
- if startX < self.widthMINcorner and stopX > self.corner:
- if startY < self.heightMINborderW and stopY > self.borderW: # draw centre fill
- self.window.draw_rectangle( gc, True, self.xPLUcorner, self.yPLUborderW, self.widthMINcornerMUL2, self.heightMINborderWMUL2 )
- if startX < self.corner and stopX > self.borderW:
- if startY < self.heightMINcorner and stopY > self.corner: # draw left fill
- self.window.draw_rectangle( gc, True, self.xPLUborderW, self.yPLUcorner, self.cornerMINborderW, self.heightMINcornerMUL2 )
- if startX < self.widthMINborderW and stopX > self.widthMINcorner:
- if startY < self.heightMINcorner and stopY > self.corner: # draw right fill
- self.window.draw_rectangle( gc, True, self.xPLUwidthMINcorner, self.yPLUcorner, self.cornerMINborderW, self.heightMINcornerMUL2 )
-
- gc.foreground = saveForeground
-
- #TP.ProfileEnd( "Round*Box::expose" )
-
- return False
-
-class ImageButton(gtk.Button):
- def __init__( self, mainImg_path, clickImg_path = None, enterImg_path = None, backgroundFill = None ):
- gtk.Button.__init__(self)
- self.alloc = None
- win = gtk.gdk.get_default_root_window()
- self.gc = gtk.gdk.GC( win )
- self.image = {}
- self.itype = {}
- self.iwidth = {}
- self.iwidthDIV2 = {}
- self.iheight = {}
- self.iheightDIV2 = {}
-
- self.backgroundFill = backgroundFill
-
- def prepareImage( name, path ):
- pix = gtk.gdk.pixbuf_new_from_file(path)
- if pix.get_has_alpha():
- if backgroundFill == None:
- self.image[name] = pix
- self.itype[name] = ITYPE.PIXBUF
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- colormap = self.get_colormap()
- self.gc.foreground = colormap.alloc_color( backgroundFill, True, True )
- self.image[name].draw_rectangle( self.gc, True, 0, 0, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- self.iwidth[name] = pix.get_width()
- self.iwidthDIV2[name] = self.iwidth[name]//2
- self.iheight[name] = pix.get_height()
- self.iheightDIV2[name] = self.iheight[name]//2
-
- prepareImage( "main", mainImg_path )
-
- if enterImg_path != None:
- prepareImage( "enter", enterImg_path )
- self.connect('enter-notify-event',self.on_btn_enter)
- self.connect('leave-notify-event',self.on_btn_leave)
- if clickImg_path != None:
- prepareImage( "click", clickImg_path )
- self.connect('pressed',self.on_btn_press, None)
- self.connect('released',self.on_btn_release, None)
- if enterImg_path == None:
- self.image["enter"] = self.image["main"]
- self.itype["enter"] = self.itype["main"]
- self.iwidth["enter"] = self.iwidth["main"]
- self.iwidthDIV2["enter"] = self.iwidthDIV2["main"]
- self.iheight["enter"] = self.iheight["main"]
- self.iheightDIV2["enter"] = self.iheightDIV2["main"]
- self.connect('enter-notify-event',self.on_btn_enter)
- self.connect('leave-notify-event',self.on_btn_leave)
-
- self.curImage = self.upImage = "main"
- self.down = False
-
- self.connect('expose-event', self.expose)
- self.connect('size-allocate', self.size_allocate)
-
- self.set_size_request(self.iwidth["main"],self.iheight["main"])
-
- def size_allocate(self, widget, allocation):
- self.alloc = allocation
- self.drawX = allocation.x + allocation.width//2
- self.drawY = allocation.y + allocation.height//2
-
- def expose(self, widget, event):
- if self.itype[self.curImage] == ITYPE.PIXBUF:
- self.window.draw_pixbuf( self.gc, self.image[self.curImage], 0, 0, self.drawX - self.iwidthDIV2[self.curImage], self.drawY - self.iheightDIV2[self.curImage], self.iwidth[self.curImage], self.iheight[self.curImage], gtk.gdk.RGB_DITHER_NONE)
- else:
- self.window.draw_drawable( self.gc, self.image[self.curImage], 0, 0, self.drawX - self.iwidthDIV2[self.curImage], self.drawY - self.iheightDIV2[self.curImage], self.iwidth[self.curImage], self.iheight[self.curImage] )
- return True
-
- def setImage(self, name, pix):
- if name == "main" and self.image["main"] == self.image["enter"]:
- updateEnter = True
- else:
- updateEnter = False
-
- if pix.get_has_alpha():
- if self.backgroundFill == None:
- self.image[name] = pix
- self.itype[name] = ITYPE.PIXBUF
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- colormap = self.get_colormap()
- self.gc.foreground = colormap.alloc_color( self.backgroundFill, True, True )
- self.image[name].draw_rectangle( self.gc, True, 0, 0, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- self.iwidth[name] = pix.get_width()
- self.iwidthDIV2[name] = self.iwidth[name]//2
- self.iheight[name] = pix.get_height()
- self.iheightDIV2[name] = self.iheight[name]//2
-
- if updateEnter:
- self.image["enter"] = self.image["main"]
- self.itype["enter"] = self.itype["main"]
- self.iwidth["enter"] = self.iwidth["main"]
- self.iwidthDIV2["enter"] = self.iwidthDIV2["main"]
- self.iheight["enter"] = self.iheight["main"]
- self.iheightDIV2["enter"] = self.iheightDIV2["main"]
- self.connect('enter-notify-event',self.on_btn_enter)
- self.connect('leave-notify-event',self.on_btn_leave)
-
- self.queue_draw()
-
- def on_btn_press(self, widget, event):
- self.curImage = "click"
- self.down = True
- self.queue_draw()
-
- def on_btn_enter(self, widget, event):
- if event.mode == gtk.gdk.CROSSING_NORMAL:
- self.upImage = "enter"
- if self.down: self.curImage = "click"
- else: self.curImage = "enter"
- self.queue_draw()
-
- def on_btn_leave(self, widget, event):
- if event.mode == gtk.gdk.CROSSING_NORMAL:
- self.curImage = self.upImage = "main"
- self.queue_draw()
-
- def on_btn_release(self, widget, event):
- self.curImage = self.upImage
- self.down = False
- self.queue_draw()
-
- def set_palette(self, palette):
- self._palette = palette
- self._palette.props.invoker = WidgetInvoker(self)
- self._palette.props.invoker._position_hint = WidgetInvoker.AT_CURSOR
-
-class ImageToggleButton(gtk.ToggleButton):
-
- def __init__(self , mainImg_path, altImg_path, enterImg_path = None, backgroundFill = None ):
- gtk.ToggleButton.__init__(self)
- self.alloc = None
- self.within = False
- self.clicked = False
-
- win = gtk.gdk.get_default_root_window()
- self.gc = gtk.gdk.GC( win )
- self.image = {}
- self.itype = {}
- self.iwidth = {}
- self.iwidthDIV2 = {}
- self.iheight = {}
- self.iheightDIV2 = {}
-
- self.backgroundFill = backgroundFill
-
- def prepareImage( name, path ):
- pix = gtk.gdk.pixbuf_new_from_file(path)
- if pix.get_has_alpha():
- if backgroundFill == None:
- self.image[name] = pix
- self.itype[name] = ITYPE.PIXBUF
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- colormap = self.get_colormap()
- self.gc.foreground = colormap.alloc_color( backgroundFill, True, True )
- self.image[name].draw_rectangle( self.gc, True, 0, 0, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- self.iwidth[name] = pix.get_width()
- self.iwidthDIV2[name] = self.iwidth[name]//2
- self.iheight[name] = pix.get_height()
- self.iheightDIV2[name] = self.iheight[name]//2
-
- prepareImage( "main", mainImg_path )
- prepareImage( "alt", altImg_path )
-
- if enterImg_path != None:
- prepareImage( "enter", enterImg_path )
- else:
- self.image["enter"] = self.image["main"]
- self.itype["enter"] = self.itype["main"]
- self.iwidth["enter"] = self.iwidth["main"]
- self.iwidthDIV2["enter"] = self.iwidthDIV2["main"]
- self.iheight["enter"] = self.iheight["main"]
- self.iheightDIV2["enter"] = self.iheightDIV2["main"]
-
- self.connect('enter-notify-event',self.on_btn_enter)
- self.connect('leave-notify-event',self.on_btn_leave)
-
- self.connect('toggled',self.toggleImage)
- self.connect('pressed',self.pressed )
- self.connect('released',self.released )
- self.connect('expose-event', self.expose)
- self.connect('size-allocate', self.size_allocate)
-
- self.set_size_request(self.iwidth["main"],self.iheight["main"])
-
- self.toggleImage( self )
-
- def size_allocate(self, widget, allocation):
- self.alloc = allocation
- self.drawX = allocation.x + allocation.width//2
- self.drawY = allocation.y + allocation.height//2
-
- def expose(self, widget, event):
- if self.itype[self.curImage] == ITYPE.PIXBUF:
- self.window.draw_pixbuf( self.gc, self.image[self.curImage], 0, 0, self.drawX - self.iwidthDIV2[self.curImage], self.drawY - self.iheightDIV2[self.curImage], self.iwidth[self.curImage], self.iheight[self.curImage], gtk.gdk.RGB_DITHER_NONE)
- else:
- self.window.draw_drawable( self.gc, self.image[self.curImage], 0, 0, self.drawX - self.iwidthDIV2[self.curImage], self.drawY - self.iheightDIV2[self.curImage], self.iwidth[self.curImage], self.iheight[self.curImage] )
- return True
-
- def setImage(self, name, pix):
- if name == "main" and self.image["main"] == self.image["enter"]:
- updateEnter = True
- else:
- updateEnter = False
-
- if pix.get_has_alpha():
- if self.backgroundFill == None:
- self.image[name] = pix
- self.itype[name] = ITYPE.PIXBUF
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- colormap = self.get_colormap()
- self.gc.foreground = colormap.alloc_color( self.backgroundFill, True, True )
- self.image[name].draw_rectangle( self.gc, True, 0, 0, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- self.iwidth[name] = pix.get_width()
- self.iwidthDIV2[name] = self.iwidth[name]//2
- self.iheight[name] = pix.get_height()
- self.iheightDIV2[name] = self.iheight[name]//2
-
- if updateEnter:
- self.image["enter"] = self.image["main"]
- self.itype["enter"] = self.itype["main"]
- self.iwidth["enter"] = self.iwidth["main"]
- self.iwidthDIV2["enter"] = self.iwidthDIV2["main"]
- self.iheight["enter"] = self.iheight["main"]
- self.iheightDIV2["enter"] = self.iheightDIV2["main"]
- self.connect('enter-notify-event',self.on_btn_enter)
- self.connect('leave-notify-event',self.on_btn_leave)
-
- self.queue_draw()
-
- def toggleImage(self, widget):
- if not self.get_active():
- if self.within and self.image.has_key("enter"):
- self.curImage = "enter"
- else:
- self.curImage = "main"
- else:
- self.curImage = "alt"
- self.queue_draw()
-
- def pressed( self, widget ):
- self.clicked = True
- self.curImage = "alt"
- self.queue_draw()
-
- def released( self, widget ):
- self.clicked = False
- self.toggleImage( self )
-
- def on_btn_enter(self, widget, event ):
- if event.mode == gtk.gdk.CROSSING_NORMAL:
- self.within = True
- if not self.get_active() and not self.clicked:
- self.curImage = "enter"
- else:
- self.curImage = "alt"
- self.queue_draw()
-
- def on_btn_leave(self, widget, event ):
- if event.mode == gtk.gdk.CROSSING_NORMAL:
- self.within = False
- if not self.get_active():
- self.curImage = "main"
- else:
- self.curImage = "alt"
- self.queue_draw()
-
- def set_palette(self, palette):
- self._palette = palette
- self._palette.props.invoker = WidgetInvoker(self)
- self._palette.props.invoker._position_hint = WidgetInvoker.AT_CURSOR
-
-class ImageRadioButton(gtk.RadioButton):
-
- def __init__( self, group, mainImg_path, altImg_path, enterImg_path = None, backgroundFill = None ):
- gtk.RadioButton.__init__(self, group)
- self.alloc = None
- self.within = False
- self.clicked = False
-
- win = gtk.gdk.get_default_root_window()
- self.gc = gtk.gdk.GC( win )
- self.image = {}
- self.itype = {}
- self.iwidth = {}
- self.iwidthDIV2 = {}
- self.iheight = {}
- self.iheightDIV2 = {}
-
- self.backgroundFill = backgroundFill
-
- def prepareImage( name, path ):
- pix = gtk.gdk.pixbuf_new_from_file(path)
- if pix.get_has_alpha():
- if backgroundFill == None:
- self.image[name] = pix
- self.itype[name] = ITYPE.PIXBUF
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- colormap = self.get_colormap()
- self.gc.foreground = colormap.alloc_color( backgroundFill, True, True )
- self.image[name].draw_rectangle( self.gc, True, 0, 0, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- self.iwidth[name] = pix.get_width()
- self.iwidthDIV2[name] = self.iwidth[name]//2
- self.iheight[name] = pix.get_height()
- self.iheightDIV2[name] = self.iheight[name]//2
-
- prepareImage( "main", mainImg_path )
- prepareImage( "alt", altImg_path )
-
- if enterImg_path != None:
- prepareImage( "enter", enterImg_path )
- else:
- self.image["enter"] = self.image["main"]
- self.itype["enter"] = self.itype["main"]
- self.iwidth["enter"] = self.iwidth["main"]
- self.iwidthDIV2["enter"] = self.iwidthDIV2["main"]
- self.iheight["enter"] = self.iheight["main"]
- self.iheightDIV2["enter"] = self.iheightDIV2["main"]
-
- self.connect('enter-notify-event',self.on_btn_enter)
- self.connect('leave-notify-event',self.on_btn_leave)
-
- self.connect("toggled", self.toggleImage )
- self.connect('pressed',self.pressed )
- self.connect('released',self.released )
- self.connect('expose-event', self.expose)
- self.connect('size-allocate', self.size_allocate)
-
- self.set_size_request(self.iwidth["main"],self.iheight["main"])
-
- self.toggleImage( self )
-
- def size_allocate(self, widget, allocation):
- self.alloc = allocation
- self.drawX = allocation.x + allocation.width//2
- self.drawY = allocation.y + allocation.height//2
-
- def expose(self, widget, event):
- if self.itype[self.curImage] == ITYPE.PIXBUF:
- self.window.draw_pixbuf( self.gc, self.image[self.curImage], 0, 0, self.drawX - self.iwidthDIV2[self.curImage], self.drawY - self.iheightDIV2[self.curImage], self.iwidth[self.curImage], self.iheight[self.curImage], gtk.gdk.RGB_DITHER_NONE)
- else:
- self.window.draw_drawable( self.gc, self.image[self.curImage], 0, 0, self.drawX - self.iwidthDIV2[self.curImage], self.drawY - self.iheightDIV2[self.curImage], self.iwidth[self.curImage], self.iheight[self.curImage] )
- return True
-
- def setImage(self, name, pix):
- if name == "main" and self.image["main"] == self.image["enter"]:
- updateEnter = True
- else:
- updateEnter = False
-
- if pix.get_has_alpha():
- if self.backgroundFill == None:
- self.image[name] = pix
- self.itype[name] = ITYPE.PIXBUF
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- colormap = self.get_colormap()
- self.gc.foreground = colormap.alloc_color( self.backgroundFill, True, True )
- self.image[name].draw_rectangle( self.gc, True, 0, 0, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- else:
- self.image[name] = gtk.gdk.Pixmap( win, pix.get_width(), pix.get_height() )
- self.image[name].draw_pixbuf( self.gc, pix, 0, 0, 0, 0, pix.get_width(), pix.get_height(), gtk.gdk.RGB_DITHER_NONE )
- self.itype[name] = ITYPE.PIXMAP
- self.iwidth[name] = pix.get_width()
- self.iwidthDIV2[name] = self.iwidth[name]//2
- self.iheight[name] = pix.get_height()
- self.iheightDIV2[name] = self.iheight[name]//2
-
- if updateEnter:
- self.image["enter"] = self.image["main"]
- self.itype["enter"] = self.itype["main"]
- self.iwidth["enter"] = self.iwidth["main"]
- self.iwidthDIV2["enter"] = self.iwidthDIV2["main"]
- self.iheight["enter"] = self.iheight["main"]
- self.iheightDIV2["enter"] = self.iheightDIV2["main"]
- self.connect('enter-notify-event',self.on_btn_enter)
- self.connect('leave-notify-event',self.on_btn_leave)
-
- self.queue_draw()
-
- def toggleImage( self, widget ):
- if not self.get_active():
- if self.within and self.image.has_key("enter"):
- self.curImage = "enter"
- else:
- self.curImage = "main"
- else:
- self.curImage = "alt"
- self.queue_draw()
-
- def pressed( self, widget ):
- self.clicked = True
- self.curImage = "alt"
- self.queue_draw()
-
- def released( self, widget ):
- self.clicked = False
- self.toggleImage( self )
-
- def on_btn_enter(self, widget, event):
- if event.mode == gtk.gdk.CROSSING_NORMAL:
- self.within = True
- if not self.get_active() and not self.clicked:
- self.curImage = "enter"
- else:
- self.curImage = "alt"
- self.queue_draw()
-
- def on_btn_leave(self, widget, event):
- if event.mode == gtk.gdk.CROSSING_NORMAL:
- self.within = False
- if not self.get_active():
- self.curImage = "main"
- else:
- self.curImage = "alt"
- self.queue_draw()
-
- def set_palette(self, palette):
- self._palette = palette
- self._palette.props.invoker = WidgetInvoker(self)
- self._palette.props.invoker._position_hint = WidgetInvoker.AT_CURSOR
-
-class keyButton(gtk.Button):
- import cairo
- def __init__(self, width, height, fillcolor, strokecolor):
- gtk.Button.__init__(self)
- self.alloc = None
- win = gtk.gdk.get_default_root_window()
- self.gc = gtk.gdk.GC(win)
-
- self.connect('expose-event', self.expose)
- self.connect('size-allocate', self.size_allocate)
-
- self.width = width
- self.height = height
- self.fillcolor = fillcolor
- self.strokecolor = strokecolor
-
- self.set_size_request(self.width,self.height)
-
- def size_allocate(self, widget, allocation):
- self.alloc = allocation
- self.drawX = allocation.x + allocation.width//2
- self.drawY = allocation.y + allocation.height//2
-
- def expose(self, widget, event):
- self.draw()
- return True
-
- def draw(self):
- self.cr = self.window.cairo_create()
- self.cr.set_source_rgb(self.fillcolor[0],self.fillcolor[1],self.fillcolor[2])
- self.draw_round_rect(self.cr,self.drawX - self.width//2, self.drawY - self.height //2, self.width,self.height,10)
- self.cr.fill()
- self.cr.set_line_width(3)
- self.cr.set_source_rgb(self.strokecolor[0],self.strokecolor[1],self.strokecolor[2])
- self.draw_round_rect(self.cr,self.drawX - self.width//2, self.drawY - self.height //2, self.width,self.height,10)
- self.cr.stroke()
-
- def draw_round_rect(self,context,x,y,w,h,r):
- context.move_to(x+r,y) # Move to A
- context.line_to(x+w-r,y) # Straight line to B
- context.curve_to(x+w,y,x+w,y,x+w,y+r) # Curve to C, Control points are both at Q
- context.line_to(x+w,y+h-r) # Move to D
- context.curve_to(x+w,y+h,x+w,y+h,x+w-r,y+h) # Curve to E
- context.line_to(x+r,y+h) # Line to F
- context.curve_to(x,y+h,x,y+h,x,y+h-r) # Curve to G
- context.line_to(x,y+r) # Line to H
- context.curve_to(x,y,x,y,x+r,y) # Curve to A
- return
-
- def set_fillcolor(self,r,g,b):
- self.fillcolor = [r,g,b]
- self.queue_draw()
-
- def set_strokecolor(self,r,g,b):
- self.strokecolor = [r,g,b]
- self.queue_draw()
-
-class BigComboBox(ComboBox):
- def __init__(self):
- ComboBox.__init__(self)
-
- def append_item(self, action_id, text, icon_name=None, size = None,
- pixbuf = None):
-
- if not self._icon_renderer and (icon_name or pixbuf):
- self._icon_renderer = gtk.CellRendererPixbuf()
-
- settings = self.get_settings()
- w, h = gtk.icon_size_lookup_for_settings(settings, gtk.ICON_SIZE_MENU)
- self._icon_renderer.props.stock_size = w
-
- self.pack_start(self._icon_renderer, False)
- self.add_attribute(self._icon_renderer, 'pixbuf', 2)
-
- if not self._text_renderer and text:
- self._text_renderer = gtk.CellRendererText()
- self.pack_end(self._text_renderer, True)
- self.add_attribute(self._text_renderer, 'text', 1)
-
- if not pixbuf:
- if icon_name:
- if not size:
- size = gtk.ICON_SIZE_LARGE_TOOLBAR
- width, height = gtk.icon_size_lookup(size)
- else:
- width, height = size
- if icon_name[0:6] == "theme:":
- icon_name = self._get_real_name_from_theme(icon_name[6:], size)
- pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(icon_name, width, height)
- else:
- pixbuf = None
-
- self._model.append([action_id, text, pixbuf, False])
diff --git a/TamTamSynthLab.activity/common/Util/Trackpad.py b/TamTamSynthLab.activity/common/Util/Trackpad.py
deleted file mode 100644
index 64f9a81..0000000
--- a/TamTamSynthLab.activity/common/Util/Trackpad.py
+++ /dev/null
@@ -1,95 +0,0 @@
-import pygtk
-pygtk.require( '2.0' )
-import gtk
-import gobject
-
-from common.Util.CSoundClient import new_csound_client
-import common.Config as Config
-
-KEY_MAP_PIANO = Config.KEY_MAP_PIANO
-
-class Trackpad:
- def __init__(self, win):
- if not Config.FEATURES_GRAB_MOUSE:
- return
-
- self.win = win
- self.csnd = new_csound_client()
- win.add_events(gtk.gdk.POINTER_MOTION_MASK)
- win.add_events(gtk.gdk.BUTTON_PRESS_MASK)
- win.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
- win.connect('motion-notify-event',self.handle_motion)
- win.connect('key-press-event',self.handle_keyPress)
- win.connect('key-release-event',self.handle_keyRelease)
-
- self.first_x = None
- self.current_x = None
- self.final_x = None
- self.first_y = None
- self.current_y = None
- self.final_y = None
-
- self.buttonPressed = False
-
- self.create_invisible_cursor()
-
- self.display = self.win.get_display()
- self.screen = gtk.gdk.Display.get_default_screen(self.display)
- self.context = None
-
- def setContext(self, context):
- self.context = context
-
- def create_invisible_cursor(self):
- pix_data = """/* XPM */
- static char * invisible_xpm[] = {
- "1 1 1 1",
- " c None",
- " "};"""
- color = gtk.gdk.Color()
- pix = gtk.gdk.pixmap_create_from_data(None, pix_data, 1, 1, 1, color, color)
- self.invisible_cursor = gtk.gdk.Cursor(pix,pix,color,color,0,0)
-
- def handle_motion(self,widget,event):
- if self.context != 'edit':
- if event.x < 0:
- X = 0
- elif event.x > self.screen.get_width():
- X = self.screen.get_width()
- else:
- X = event.x
-
- if event.y < 0:
- Y = 0
- elif event.y > self.screen.get_height():
- Y = self.screen.get_height()
- else:
- Y = event.y
-
- self.current_x = X
- self.current_y = Y
- if self.buttonPressed:
- self.final_x = X - self.first_x
- self.final_y = Y - self.first_y
- self.csnd.setTrackpadX(self.final_x)
- self.csnd.setTrackpadY(self.final_y)
-
- def handle_keyPress(self,widget,event):
- if KEY_MAP_PIANO.has_key(event.hardware_keycode) and self.buttonPressed == False:
- gtk.gdk.Display.warp_pointer(self.display, self.screen, self.screen.get_width() / 2, self.screen.get_height() / 2)
- gtk.gdk.pointer_grab(self.win.window, event_mask = gtk.gdk.POINTER_MOTION_MASK)#, cursor = self.invisible_cursor)
- self.buttonPressed = True
- self.first_x = self.screen.get_width() / 2
- self.first_y = self.screen.get_height() / 2
-
- def handle_keyRelease(self,widget,event):
- if KEY_MAP_PIANO.has_key(event.hardware_keycode):
- gtk.gdk.pointer_ungrab(time = 0L)
- self.buttonPressed = False
- self.restoreDelay = gobject.timeout_add(120, self.restore)
-
- def restore( self ):
- self.csnd.setTrackpadX(0)
- self.csnd.setTrackpadY(0)
- gobject.source_remove( self.restoreDelay )
-
diff --git a/TamTamSynthLab.activity/common/Util/__init__.py b/TamTamSynthLab.activity/common/Util/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TamTamSynthLab.activity/common/Util/__init__.py
+++ /dev/null