Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/SynthLab
diff options
context:
space:
mode:
authoramartin <olpc@xo-05-28-21.localdomain>2007-08-04 04:57:33 (GMT)
committer amartin <olpc@xo-05-28-21.localdomain>2007-08-04 04:57:33 (GMT)
commitb8905283f86d9f1f7fdbb36e37aec361a0a25639 (patch)
tree16e055ba6d6912c483bf13b32e357531debdcf52 /SynthLab
parent5f01f7c9f09683d20c10f4e2ded677ed3b1cb7ae (diff)
parent3ca1024e0b7269001dcec071939aeb114f75318b (diff)
synthlab speedup
Diffstat (limited to 'SynthLab')
-rwxr-xr-xSynthLab/SynthLabConstants.py66
-rw-r--r--SynthLab/SynthLabWindow.py62
2 files changed, 78 insertions, 50 deletions
diff --git a/SynthLab/SynthLabConstants.py b/SynthLab/SynthLabConstants.py
index ef09661..5598ffc 100755
--- a/SynthLab/SynthLabConstants.py
+++ b/SynthLab/SynthLabConstants.py
@@ -99,18 +99,21 @@ class SynthLabConstants:
WAVEFORM = _('Waveform')
LFO_WAVEFORMS = [_('Sine'), _('Triangle'), _('Bi-Square'), _('Uni-Square'), _('Sawtooth'), _('Sawtooth-down')]
OFFSET = _('Offset')
+ LFO_INFO = _('A low frequency oscillation (LFO) is a signal usually below 20 Hz which creates a pulsating rythm rather than a audible tone.')
RANDOM = _('Random')
MIN = _('Minimum')
MAX = _('Maximum')
FREQ = FREQ
SEED = _('Seed')
+ RANDOM_INFO = _('A random number generator is a computational device designed to generate a sequence of numbers that lack any pattern.')
ADSR = _('Envelope')
ATTACK = _('Attack')
DECAY = _('Decay')
SUSTAIN = _('Sustain')
RELEASE = _('Release')
+ ADSR_INFO = _('')
TRACKPADX = _('Trackpad X')
MIN = MIN
@@ -118,6 +121,7 @@ class SynthLabConstants:
SCALING = _('Scaling')
SCALING_TYPES = [_('Lin'), _('Log')]
POLL = _('Poll time')
+ TRACKPADX_INFO = _('')
TRACKPADY = _('Trackpad Y')
MIN = MIN
@@ -125,6 +129,7 @@ class SynthLabConstants:
SCALING = SCALING
SCALING_TYPES = SCALING_TYPES
POLL = POLL
+ TRACKPADY_INFO = _('')
#Source
FM = _('FM')
@@ -132,12 +137,14 @@ class SynthLabConstants:
MOD = _('Modulator Frequency')
INDEX = _('Index')
GAIN = _('Gain')
+ FM_INFO = _('')
BUZZ = _('Buzz')
FREQ = FREQ
NHARM = _('Number of harmonics')
FSLOPE = _('Filter Slope')
GAIN = GAIN
+ BUZZ_INFO = _('')
VCO = _('VCO')
FREQ = FREQ
@@ -145,12 +152,14 @@ class SynthLabConstants:
VCO_WAVEFORMS = [_('Sawtooth'), _('Square'), _('Triangle')]
FSLOPE = FSLOPE
GAIN = GAIN
+ VCO_INFO = _('')
PLUCK = _('Pluck')
FREQ = FREQ
LFILTER = _('Lowpass Filter')
VIBRATO = _('Vibrato')
GAIN = GAIN
+ PLUCK_INFO = _('')
NOISE = _('Noise')
NOISETYPE = _('Type')
@@ -158,6 +167,7 @@ class SynthLabConstants:
FREQ = FREQ
BANDWITH = _('Bandwith')
GAIN = GAIN
+ NOISE_INFO = _('')
SAMPLE = _('Sound Sample')
FREQ = FREQ
@@ -165,6 +175,7 @@ class SynthLabConstants:
SAMPLE_NAMES = _('Sample name')
LFILTER = LFILTER
GAIN = GAIN
+ SAMPLE_INFO = _('')
VOICE = _('Voice')
FREQ = FREQ
@@ -172,18 +183,21 @@ class SynthLabConstants:
VOWEL_TYPES = ['i', 'e', 'ee', 'a', 'u', 'o1', 'o2', 'oa', 'oe']
VIBRATO = VIBRATO
GAIN = GAIN
+ VOICE_INFO = _('')
GRAIN = _('Grain')
FREQ = FREQ
SAMPLEN = SAMPLEN
INDEX = _('Index')
GAIN = GAIN
+ GRAIN_INFO = _('')
ADDSYNTH = _('Additive Synthesis')
FREQ = FREQ
SPREAD = _('Spread')
WAVE = _('Waveform')
GAIN = GAIN
+ ADDSYNTH_INFO = _('')
#Effects
DELAY = _('Delay')
@@ -191,12 +205,14 @@ class SynthLabConstants:
LFILTER = LFILTER
FEEDBACK = _('Feedback')
GAIN = GAIN
+ DELAY_INFO = _('')
DIST = _('Distortion')
FREQ = FREQ
RESON = _('Resonance')
DISTL = _('Distotion Level')
GAIN = GAIN
+ DIST_INFO = _('')
FILTER = _('Filter')
FREQ = FREQ
@@ -204,6 +220,7 @@ class SynthLabConstants:
FTYPE = _('Type')
FILTER_TYPES = [_('Lowpass'), _('Highpass'), _('Bandpass')]
GAIN = GAIN
+ FILTER_INFO = _('')
RINGMOD = _('Ring Modulator')
FREQ = FREQ
@@ -211,54 +228,59 @@ class SynthLabConstants:
WAVEFORM = WAVEFORM
LFO_WAVEFORMS = LFO_WAVEFORMS
GAIN = GAIN
+ RINGMOD_INFO = _('')
REVERB = _('Reverb')
REVERBD = _('Length')
REVERBF = _('Lowpass Filter')
REVERBL = _('Reverb Level')
GAIN = GAIN
+ REVERB_INFO = _('')
HARMON = _('Harmonizer')
FREQ = FREQ
DRYDELAY = _('Dry delay')
MIX = MIX
GAIN = GAIN
+ HARMON_INFO = _('')
EQ4BAND = _('Equalizer 4 bands')
FREQ1 = _('Band one gain')
FREQ2 = _('Band two gain')
FREQ3 = _('Band three gain')
FREQ4 = _('Band four gain')
+ EQ4BAND_INFO = _('')
CHORUS = _('Chorus')
LFODEPTH = _('LFO Depth')
LFOFREQ = _('LFO Frequency')
DELAY = _('Delay')
FEEDBACK = FEEDBACK
+ CHORUS_INFO = _('A chorus effect is a condition in the way people perceive similar sounds coming from multiple sources.')
SYNTHTYPES = [[LFO, RANDOM, ADSR, TRACKPADX, TRACKPADY],
[FM, BUZZ, VCO, PLUCK, NOISE, SAMPLE, VOICE, GRAIN, ADDSYNTH],
[DELAY, DIST, FILTER, RINGMOD, REVERB, HARMON, EQ4BAND, CHORUS], [ADSR]]
- SYNTHPARA = { _('lfo'): [AMP, FREQ, WAVEFORM, OFFSET],
- _('rand'): [MIN, MAX, FREQ, SEED],
- _('adsr'): [ATTACK, DECAY, SUSTAIN, RELEASE],
- _('trackpadX'): [MIN, MAX, SCALING, POLL],
- _('trackpadY'): [MIN, MAX, SCALING, POLL],
- _('fm'): [CAR, MOD, INDEX, GAIN],
- _('buzz'): [FREQ, NHARM, FSLOPE, GAIN],
- _('vco'): [FREQ, WAVEFORM, FSLOPE, GAIN],
- _('pluck'): [FREQ, LFILTER, VIBRATO, GAIN],
- _('noise'): [NOISETYPE, FREQ, BANDWITH, GAIN],
- _('sample'): [FREQ, SAMPLEN, LFILTER, GAIN],
- _('voice'): [FREQ, VOWEL, VIBRATO, GAIN],
- _('grain'): [FREQ, SAMPLEN, INDEX, GAIN],
- _('addSynth'): [FREQ, SPREAD, WAVE, GAIN],
- _('wguide'): [FREQ, LFILTER, FEEDBACK, GAIN],
- _('distort'): [FREQ, RESON, DISTL, GAIN],
- _('filter'): [FREQ, FSLOPE, FTYPE, GAIN],
- _('ring'): [FREQ, MIX, WAVEFORM, GAIN],
- _('reverb'): [REVERBD, REVERBF, REVERBL, GAIN],
- _('harmon'): [FREQ, DRYDELAY, MIX, GAIN],
- _('eq4band'): [FREQ1, FREQ2, FREQ3, FREQ4],
- _('chorus'): [LFODEPTH, LFOFREQ, DELAY, FEEDBACK]}
+ SYNTHPARA = { _('lfo'): [AMP, FREQ, WAVEFORM, OFFSET, LFO_INFO],
+ _('rand'): [MIN, MAX, FREQ, SEED, RANDOM_INFO],
+ _('adsr'): [ATTACK, DECAY, SUSTAIN, RELEASE, ADSR_INFO],
+ _('trackpadX'): [MIN, MAX, SCALING, POLL, TRACKPADX_INFO],
+ _('trackpadY'): [MIN, MAX, SCALING, POLL, TRACKPADY_INFO],
+ _('fm'): [CAR, MOD, INDEX, GAIN, FM_INFO],
+ _('buzz'): [FREQ, NHARM, FSLOPE, GAIN, BUZZ_INFO],
+ _('vco'): [FREQ, WAVEFORM, FSLOPE, GAIN, VCO_INFO],
+ _('pluck'): [FREQ, LFILTER, VIBRATO, GAIN, PLUCK_INFO],
+ _('noise'): [NOISETYPE, FREQ, BANDWITH, GAIN, NOISE_INFO],
+ _('sample'): [FREQ, SAMPLEN, LFILTER, GAIN, SAMPLE_INFO],
+ _('voice'): [FREQ, VOWEL, VIBRATO, GAIN, VOICE_INFO],
+ _('grain'): [FREQ, SAMPLEN, INDEX, GAIN, GRAIN_INFO],
+ _('addSynth'): [FREQ, SPREAD, WAVE, GAIN, ADDSYNTH_INFO],
+ _('wguide'): [FREQ, LFILTER, FEEDBACK, GAIN, DELAY_INFO],
+ _('distort'): [FREQ, RESON, DISTL, GAIN, DIST_INFO],
+ _('filter'): [FREQ, FSLOPE, FTYPE, GAIN, FILTER_INFO],
+ _('ring'): [FREQ, MIX, WAVEFORM, GAIN, RINGMOD_INFO],
+ _('reverb'): [REVERBD, REVERBF, REVERBL, GAIN, REVERB_INFO],
+ _('harmon'): [FREQ, DRYDELAY, MIX, GAIN, HARMON_INFO],
+ _('eq4band'): [FREQ1, FREQ2, FREQ3, FREQ4, EQ4BAND_INFO],
+ _('chorus'): [LFODEPTH, LFOFREQ, DELAY, FEEDBACK, CHORUS_INFO]}
diff --git a/SynthLab/SynthLabWindow.py b/SynthLab/SynthLabWindow.py
index 3cc8c53..ef501f5 100644
--- a/SynthLab/SynthLabWindow.py
+++ b/SynthLab/SynthLabWindow.py
@@ -49,6 +49,7 @@ class SynthLabWindow(SubActivity):
self.instanceOpen = 0
self.recordWait = 0
self.recCount = 0
+ self.new = True
self.duration = 2
self.viewType = ''
self.viewParam = ''
@@ -122,7 +123,7 @@ class SynthLabWindow(SubActivity):
menuBox = gtk.HBox()
self.objComboBox = BigComboBox()
- self.objComboBox.append_item(0, 'adsr', Config.TAM_TAM_ROOT + '/icons/adsr-menu.svg')
+ self.objComboBox.append_item(0, 'Envelope', Config.TAM_TAM_ROOT + '/icons/adsr-menu.svg')
self.objComboBox.set_active(0)
self.objComboBox.connect('changed', self.changeObject)
comboMenu = ToolComboBox(self.objComboBox)
@@ -131,10 +132,9 @@ class SynthLabWindow(SubActivity):
slidersBox = gtk.HBox()
- #fake values
- self.instanceID = 12 # object number
- self.objectType = self.instanceID / 4 #(control, source, fx, output)
- self.choosenType = 0 # self.synthObjectsParameters.types[self.instanceID] module as an index
+ self.instanceID = 12 # object number
+ self.objectType = self.instanceID / 4 #(control, source, fx, output)
+ self.choosenType = 0 # self.synthObjectsParameters.types[self.instanceID] module as an index
selectedType = SynthLabConstants.CHOOSE_TYPE[self.objectType][self.choosenType] #module as a string
slider1Min = SynthLabConstants.TYPES[selectedType][4]
@@ -297,6 +297,7 @@ class SynthLabWindow(SubActivity):
def select(self, i):
if i == self.instanceID:
return
+ self.new = False
if self.instanceID > 0:
self.invalidate_rect( self.bounds[self.instanceID][0], self.bounds[self.instanceID][1]-2, SynthLabConstants.PIC_SIZE, SynthLabConstants.PIC_SIZE_HIGHLIGHT )
self.instanceID = i
@@ -305,8 +306,8 @@ class SynthLabWindow(SubActivity):
if self.instanceID / 4 != self.objectType:
self.objectType = self.instanceID / 4
self.objComboBox.remove_all()
- for obj in SynthLabConstants.CHOOSE_TYPE[self.objectType]:
- self.objComboBox.append_item(SynthLabConstants.CHOOSE_TYPE[self.objectType].index(obj), obj, Config.TAM_TAM_ROOT + '/icons/' + obj + '-menu.svg')
+ for i in range(len(SynthLabConstants.CHOOSE_TYPE[self.objectType])):
+ self.objComboBox.append_item(i, SynthLabConstants.SYNTHTYPES[self.objectType][i], Config.TAM_TAM_ROOT + '/icons/' + SynthLabConstants.CHOOSE_TYPE[self.objectType][i] + '-menu.svg')
oldChoosen = self.choosenType
if self.instanceID != 12:
@@ -315,10 +316,6 @@ class SynthLabWindow(SubActivity):
self.choosenType = 0
self.objComboBox.set_active(self.choosenType)
- #if self.choosenType != oldChoosen:
- self.changeObject(self.objComboBox)
- #else:
- self.updateViewer()
#Not sure about this
self.slider1.grab_focus()
self.sendTables(self.slider1, 1)
@@ -328,7 +325,8 @@ class SynthLabWindow(SubActivity):
self.resize()
if self.instanceID != 12:
self.synthObjectsParameters.setType(self.instanceID, self.choosenType)
- self.writeTables( self.synthObjectsParameters.types,
+ if self.new:
+ self.writeTables( self.synthObjectsParameters.types,
self.synthObjectsParameters.controlsParameters,
self.synthObjectsParameters.sourcesParameters,
self.synthObjectsParameters.fxsParameters )
@@ -336,8 +334,9 @@ class SynthLabWindow(SubActivity):
def updateViewer(self):
self.viewType = SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType]
selectedType = SynthLabConstants.CHOOSE_TYPE[self.objectType][self.choosenType]
+ info = SynthLabConstants.SYNTHPARA[selectedType][4]
self.viewParam = SynthLabConstants.SYNTHPARA[selectedType][self.curSlider-1] + ': ' + self.recallSliderValue(self.curSlider)
- self.infoText = self.viewType + '\n\n' + self.viewParam
+ self.infoText = self.viewType + ': ' + info + '\n\n' + self.viewParam
self.textBuf.set_text(self.infoText)
def recallSliderValue( self, num ):
@@ -372,12 +371,18 @@ class SynthLabWindow(SubActivity):
def resize( self ):
selectedType = SynthLabConstants.CHOOSE_TYPE[self.objectType][self.choosenType]
- parametersTable = self.synthObjectsParameters.choiceParamsSet[self.objectType]
- tablePos = (self.instanceID % 4)*4
- slider1Init = parametersTable[tablePos]
- slider2Init = parametersTable[tablePos+1]
- slider3Init = parametersTable[tablePos+2]
- slider4Init = parametersTable[tablePos+3]
+ if self.new:
+ slider1Init = SynthLabConstants.TYPES[selectedType][0]
+ slider2Init = SynthLabConstants.TYPES[selectedType][1]
+ slider3Init = SynthLabConstants.TYPES[selectedType][2]
+ slider4Init = SynthLabConstants.TYPES[selectedType][3]
+ else:
+ parametersTable = self.synthObjectsParameters.choiceParamsSet[self.objectType]
+ tablePos = (self.instanceID % 4)*4
+ slider1Init = parametersTable[tablePos]
+ slider2Init = parametersTable[tablePos+1]
+ slider3Init = parametersTable[tablePos+2]
+ slider4Init = parametersTable[tablePos+3]
slider1Min = SynthLabConstants.TYPES[selectedType][4]
slider1Max = SynthLabConstants.TYPES[selectedType][5]
@@ -404,6 +409,8 @@ class SynthLabWindow(SubActivity):
self.slider2.set_digits(slider2Snap)
self.slider3.set_digits(slider3Snap)
+ self.new = True
+
def sendTables( self, widget, data ):
self.curSlider = data
self.slider1Val = self.p1Adjust.value
@@ -707,7 +714,6 @@ class SynthLabWindow(SubActivity):
# pass in obj = None to clear
def highlightGate( self, obj, gate = None, reject = False ):
- print obj, gate
if obj == None:
self.parameterUpdate('')
if self.overGateObj != obj or self.overGate != gate or self.overGateReject != reject:
@@ -724,7 +730,7 @@ class SynthLabWindow(SubActivity):
self.invalidate_rect( self.overGateLoc[0], self.overGateLoc[1], self.overGateSize, self.overGateSize )
if True: #obj != 12:
if gate[0] == 0:
- _str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + ': output'
+ _str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + _(': controller output')
elif gate[0] == 1:
choosen = SynthLabConstants.CHOOSE_TYPE[obj/4][self.typesTable[obj]]
_str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + ': ' + SynthLabConstants.SYNTHPARA[choosen][gate[1]]
@@ -733,12 +739,12 @@ class SynthLabWindow(SubActivity):
exec 'self.slider%s.grab_focus()' % str(gateNum)
exec 'self.sendTables(self.slider%s, %d)' % (str(gateNum), gateNum)
elif gate[0] == 2:
- _str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + ': sound output'
+ _str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + _(': sound output')
elif gate[0] == 3:
if obj != 12:
- _str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + ': sound input'
+ _str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + _(': sound input')
else:
- _str = 'Send sound to the speakers'
+ _str = _('Send sound to the speakers')
self.parameterUpdate( _str )
def startDragObject( self, i ):
@@ -1057,13 +1063,13 @@ class SynthLabWindow(SubActivity):
def writeTables( self, typesTable, controlParametersTable, sourceParametersTable, fxParametersTable ):
mess = 'f5200 0 16 -2 ' + " ".join([str(n) for n in controlParametersTable])
self.csnd.inputMessage( mess )
- time.sleep(0.005)
+ time.sleep(0.001)
mess = "f5201 0 16 -2 " + " " .join([str(n) for n in sourceParametersTable])
self.csnd.inputMessage( mess )
- time.sleep(.005)
+ time.sleep(.001)
mess = "f5202 0 16 -2 " + " " .join([str(n) for n in fxParametersTable])
self.csnd.inputMessage( mess )
- time.sleep(.005)
+ time.sleep(.001)
self.typesTable = typesTable
lastTable = [0]*12
for i in range(12):
@@ -1071,7 +1077,7 @@ class SynthLabWindow(SubActivity):
lastTable[i] = (typesTable[i]+1)
mess = "f5203 0 16 -2 " + " " .join([str(n) for n in lastTable]) + " 0 0 0 0"
self.csnd.inputMessage( mess )
- time.sleep(.005)
+ time.sleep(.001)
if lastTable[4] == 8:
snd = Config.SOUNDS_DIR + '/' + self.sample_names[int(sourceParametersTable[1])]
mess = "f5501 0 32768 -1 " + "\"%s\" 0 0 0" % snd