Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Config.py2
-rw-r--r--Edit/EditToolbars.py385
-rw-r--r--Edit/MainWindow.py17
-rw-r--r--NEWS6
-rwxr-xr-xTamTam.py2
-rw-r--r--Util/Clooper/aclient.cpp27
-rwxr-xr-xUtil/Clooper/aclient.sobin49464 -> 49464 bytes
-rw-r--r--Util/Clooper/audio.cpp9
-rw-r--r--activity/activity.info2
-rwxr-xr-xicons/accept.svg18
-rwxr-xr-xicons/cancel.svg11
-rw-r--r--icons/pause.svg14
-rwxr-xr-xicons/test.svg9
-rw-r--r--po/TamTam.pot684
-rw-r--r--po/de.po741
15 files changed, 1424 insertions, 503 deletions
diff --git a/Config.py b/Config.py
index fddab6a..b60f56f 100644
--- a/Config.py
+++ b/Config.py
@@ -378,7 +378,7 @@ IMAGE_ROOT = TAM_TAM_ROOT + '/Resources/Images/'
MAIN_WINDOW_PADDING = 5
-BG_COLOR = '#999999'
+BG_COLOR = '#515151'
NOTE_HEIGHT = 9 # pixels
NOTE_IMAGE_PADDING = 6
diff --git a/Edit/EditToolbars.py b/Edit/EditToolbars.py
index 18625a2..22d470f 100644
--- a/Edit/EditToolbars.py
+++ b/Edit/EditToolbars.py
@@ -46,7 +46,7 @@ class mainToolbar(gtk.Toolbar):
self.playButton.show()
#Pause button
- self.pauseButton = ToolButton('pstop')
+ self.pauseButton = ToolButton('pause')
self.pauseButton.connect('clicked', self.handlePause)
self.pauseButton.set_sensitive(False)
self.insert(self.pauseButton, -1)
@@ -66,7 +66,7 @@ class mainToolbar(gtk.Toolbar):
self.insert(self.recordButton, -1)
self.recordButton.show()
- _insertSeparator(2)
+ _insertSeparator(13)
#Pencil button
self._pencilPalette = pencilPalette(_('Draw Tool'), self.edit, self)
@@ -76,7 +76,21 @@ class mainToolbar(gtk.Toolbar):
self.insert(self.pencilButton, -1)
self.pencilButton.show()
- _insertSeparator(4)
+ #Duplicate button
+ self.duplicateButton = ToggleToolButton('duplicate')
+ self.duplicateButton.connect('toggled', self.handleDuplicate)
+ self.insert(self.duplicateButton, -1)
+ self.duplicateButton.show()
+
+ _insertSeparator(18)
+
+ #Volume / Tempo button
+ self._volumeTempoPalette = volumeTempoPalette(_('Volume / Tempo'), self.edit)
+ self.volumeTempoButton = ToggleToolButton('voltemp')
+ self.volumeTempoButton.set_palette(self._volumeTempoPalette)
+ #self.volumeTempoButton.connect(None)
+ self.insert(self.volumeTempoButton, -1)
+ self.volumeTempoButton.show()
#Generation button
self._generationPalette = generationPalette(_('Generation'), self.edit)
@@ -90,24 +104,9 @@ class mainToolbar(gtk.Toolbar):
self._propertiesPalette = propertiesPalette(_('Properties'), self.edit)
self.propsButton = ToggleToolButton('props')
self.propsButton.set_palette(self._propertiesPalette)
- #self.propsButton.connect(None)
self.insert(self.propsButton, -1)
self.propsButton.show()
- #Duplicate button
- self.duplicateButton = ToggleToolButton('duplicate')
- self.duplicateButton.connect('toggled', self.handleDuplicate)
- self.insert(self.duplicateButton, -1)
- self.duplicateButton.show()
-
- #Volume / Tempo button
- self._volumeTempoPalette = volumeTempoPalette(_('Volume / Tempo'), self.edit)
- self.volumeTempoButton = ToggleToolButton('voltemp')
- self.volumeTempoButton.set_palette(self._volumeTempoPalette)
- #self.volumeTempoButton.connect(None)
- self.insert(self.volumeTempoButton, -1)
- self.volumeTempoButton.show()
-
def handlePlayStop(self, widget, data = None):
if widget.get_active():
self.edit.handlePlay(widget)
@@ -140,7 +139,6 @@ class mainToolbar(gtk.Toolbar):
elif self.edit.getContext() == 2: #Note
self.edit.noteDuplicateWidget(widget)
widget.set_active(False)
-
class playPalette(Palette):
def __init__(self, label, edit):
@@ -313,10 +311,10 @@ class generationPalette(Palette):
self.scaleModeBox.pack_start(self.scaleBoxHBox, False, False, padding = 5)
self.scaleModeBox.pack_start(self.modeBoxHBox, False, False, padding = 5)
- self.acceptButton = gtk.Button(label = _('Accept'))
+ self.acceptButton = ImageButton(Config.TAM_TAM_ROOT + '/icons/accept.svg')
# self.acceptButton = IconButton('stock-accept')
self.acceptButton.connect('clicked',self.generate)
- self.cancelButton = gtk.Button(label = _('Cancel'))
+ self.cancelButton = ImageButton(Config.TAM_TAM_ROOT + '/icons/cancel.svg')
self.cancelButton.connect('clicked',self.cancel)
# self.cancelButton = IconButton('activity-stop')
self.decisionBox.pack_start(self.cancelButton, False, False, padding = 5)
@@ -385,15 +383,31 @@ class generationPalette(Palette):
class propertiesPalette(Palette):
def __init__(self, label, edit):
Palette.__init__(self, label)
+ self.connect('popup', self.handlePopup)
+ self.connect('popdown', self.handlePopdown)
self.edit = edit
+ self.filterTypes = [_('None'), _('Lowpass'), _('Bandpass'), _('Highpass')]
+ self.geneTypes = [_('Line'),_('Drunk'),_('Drone and Jump'),_('Repeater'),_('Loop Segments')]
+ self.colors = [_('Purple'), _('Green'), _('Blue'), _('Yellow')]
+ self.currentFilterType = self.filterTypes[0]
+ self.currentGeneType = self.geneTypes[0]
+
+ self.setup = False
+ self.geneCheckButtonDic = {}
+
+ self.pageIds = []
+ self.context = "page"
+
self.mainBox = gtk.VBox()
self.gridDivisionBox = gtk.HBox()
self.gridDivisionLabel = gtk.Label(_('Grid division: '))
- self.gridDivisionSliderAdj = gtk.Adjustment(value=0, lower=0, upper=16, step_incr=1, page_incr=0, page_size=0)
+ self.gridDivisionSliderAdj = gtk.Adjustment(4, 2, 12, 1, 1, 0)
self.gridDivisionSlider = gtk.HScale(adjustment = self.gridDivisionSliderAdj)
+ self.gridDivisionSlider.set_digits(0)
+ self.gridDivisionSlider.connect('button-release-event', self.handleBeat)
self.gridDivisionSlider.set_size_request(200,-1)
self.gridDivisionSlider.set_value_pos(gtk.POS_RIGHT)
self.gridDivisionBox.pack_start(self.gridDivisionLabel, False, False, padding = 5)
@@ -401,13 +415,23 @@ class propertiesPalette(Palette):
self.pageColorBox = gtk.HBox()
self.pageColorLabel = gtk.Label(_('Page color: '))
+ self.pageColorComboBox = BigComboBox()
+ for color in self.colors:
+ self.pageColorComboBox.append_item(self.colors.index(color), color)
+ self.pageColorComboBox.set_active(0)
+ self.pageColorComboBox.connect('changed', self.handleColor)
self.pageColorBox.pack_start(self.pageColorLabel, False, False, padding = 5)
+ self.pageColorBox.pack_end(self.pageColorComboBox, False, False, padding = 55)
self.transposeBox = gtk.HBox()
self.transposeLabel = gtk.Label(_('Transposition: '))
self.transposeDownButton = ImageButton(Config.TAM_TAM_ROOT + '/icons/arrow-down.svg')
+ self.transposeDownButton.connect('clicked', self.stepPitch, -1)
self.transposeUpButton = ImageButton(Config.TAM_TAM_ROOT + '/icons/arrow-up.svg')
+ self.transposeUpButton.connect('clicked', self.stepPitch, 1)
self.transposeCheckButton = gtk.CheckButton()
+ self.transposeCheckButton.connect('toggled', self.handleGeneCheckButton)
+ self.geneCheckButtonDic['transpose'] = self.transposeCheckButton
self.transposeBox.pack_start(self.transposeLabel, False, False, padding = 5)
self.transposeBox.pack_end(self.transposeCheckButton, False, False, padding = 5)
self.transposeBox.pack_end(self.transposeUpButton, False, False, padding = 50)
@@ -416,8 +440,12 @@ class propertiesPalette(Palette):
self.volumeBox = gtk.HBox()
self.volumeLabel = gtk.Label(_('Volume: '))
self.volumeDownButton = ImageButton(Config.TAM_TAM_ROOT + '/icons/arrow-down.svg')
+ self.volumeDownButton.connect('clicked', self.stepVolume, -0.1)
self.volumeUpButton = ImageButton(Config.TAM_TAM_ROOT + '/icons/arrow-up.svg')
+ self.volumeUpButton.connect('clicked', self.stepVolume, 0.1)
self.volumeCheckButton = gtk.CheckButton()
+ self.volumeCheckButton.connect('toggled', self.handleGeneCheckButton)
+ self.geneCheckButtonDic['volume'] = self.volumeCheckButton
self.volumeBox.pack_start(self.volumeLabel, False, False, padding = 5)
self.volumeBox.pack_end(self.volumeCheckButton, False, False, padding = 5)
self.volumeBox.pack_end(self.volumeUpButton, False, False, padding = 50)
@@ -425,82 +453,99 @@ class propertiesPalette(Palette):
self.panBox = gtk.HBox()
self.panLabel = gtk.Label(_('Pan: '))
- self.panSliderAdj = gtk.Adjustment(value=50, lower=0, upper=100, step_incr=1, page_incr=0, page_size=0)
+ self.panSliderAdj = gtk.Adjustment(0.5, 0, 1, .1, .1, 0)
+ self.panSliderAdj.connect('value-changed', self.handlePan)
self.panSlider = gtk.HScale(adjustment = self.panSliderAdj)
self.panSlider.set_size_request(200,-1)
self.panSlider.set_value_pos(gtk.POS_RIGHT)
self.panCheckButton = gtk.CheckButton()
+ self.panCheckButton.connect('toggled', self.handleGeneCheckButton)
+ self.geneCheckButtonDic['pan'] = self.panCheckButton
self.panBox.pack_start(self.panLabel, False, False, padding = 5)
self.panBox.pack_end(self.panCheckButton, False, False, padding = 5)
self.panBox.pack_end(self.panSlider, False, False, padding = 5)
self.reverbBox = gtk.HBox()
self.reverbLabel = gtk.Label(_('Reverb: '))
- self.reverbSliderAdj = gtk.Adjustment(value=0, lower=0, upper=16, step_incr=1, page_incr=0, page_size=0)
+ self.reverbSliderAdj = gtk.Adjustment(0.1, 0, 1, 0.1, 0.1, 0)
+ self.reverbSliderAdj.connect("value-changed", self.handleReverb)
self.reverbSlider = gtk.HScale(adjustment = self.reverbSliderAdj)
self.reverbSlider.set_size_request(200,-1)
self.reverbSlider.set_value_pos(gtk.POS_RIGHT)
self.reverbCheckButton = gtk.CheckButton()
+ self.reverbCheckButton.connect('toggled', self.handleGeneCheckButton)
+ self.geneCheckButtonDic['reverb'] = self.reverbCheckButton
self.reverbBox.pack_start(self.reverbLabel, False, False, padding = 5)
self.reverbBox.pack_end(self.reverbCheckButton, False, False, padding = 5)
self.reverbBox.pack_end(self.reverbSlider, False, False, padding = 5)
self.attackDurBox = gtk.HBox()
self.attackDurLabel = gtk.Label(_('Attack duration: '))
- self.attackDurSliderAdj = gtk.Adjustment(value=0, lower=0, upper=16, step_incr=1, page_incr=0, page_size=0)
+ self.attackDurSliderAdj = gtk.Adjustment(0.04, 0.03, 1, .01, .01, 0)
+ self.attackDurSliderAdj.connect('value-changed', self.handleAttack)
self.attackDurSlider = gtk.HScale(adjustment = self.attackDurSliderAdj)
self.attackDurSlider.set_size_request(200,-1)
self.attackDurSlider.set_value_pos(gtk.POS_RIGHT)
self.attackDurCheckButton = gtk.CheckButton()
+ self.attackDurCheckButton.connect('toggled', self.handleGeneCheckButton)
+ self.geneCheckButtonDic['attack'] = self.attackDurCheckButton
self.attackDurBox.pack_start(self.attackDurLabel, False, False, padding = 5)
self.attackDurBox.pack_end(self.attackDurCheckButton, False, False, padding = 5)
self.attackDurBox.pack_end(self.attackDurSlider, False, False, padding = 5)
self.decayDurBox = gtk.HBox()
self.decayDurLabel = gtk.Label(_('Decay duration: '))
- self.decayDurSliderAdj = gtk.Adjustment(value=0, lower=0, upper=16, step_incr=1, page_incr=0, page_size=0)
+ self.decayDurSliderAdj = gtk.Adjustment(0.31, 0.03, 1, .01, .01, 0)
+ self.decayDurSliderAdj.connect('value-changed', self.handleDecay)
self.decayDurSlider = gtk.HScale(adjustment = self.decayDurSliderAdj)
self.decayDurSlider.set_size_request(200,-1)
self.decayDurSlider.set_value_pos(gtk.POS_RIGHT)
self.decayDurCheckButton = gtk.CheckButton()
+ self.decayDurCheckButton.connect('toggled', self.handleGeneCheckButton)
+ self.geneCheckButtonDic['decay'] = self.decayDurCheckButton
self.decayDurBox.pack_start(self.decayDurLabel, False, False, padding = 5)
self.decayDurBox.pack_end(self.decayDurCheckButton, False, False, padding = 5)
self.decayDurBox.pack_end(self.decayDurSlider, False, False, padding = 5)
+ self.filterTypeBox = gtk.HBox()
+ self.filterTypeLabel = gtk.Label(_('Filter Type: '))
+ self.filterTypeComboBox = BigComboBox()
+ for filtertype in self.filterTypes:
+ self.filterTypeComboBox.append_item(self.filterTypes.index(filtertype), filtertype, Config.TAM_TAM_ROOT + '/icons/test.svg', (30,30))
+ self.filterTypeComboBox.connect('changed', self.handleFilterTypes)
+ self.filterTypeBox.pack_start(self.filterTypeLabel, False, False, padding = 5)
+ self.filterTypeBox.pack_end(self.filterTypeComboBox, False, False, padding = 55)
+
self.filterCutoffBox = gtk.HBox()
self.filterCutoffLabel = gtk.Label(_('Filter cutoff: '))
- self.filterCutoffSliderAdj = gtk.Adjustment(value=0, lower=0, upper=16, step_incr=1, page_incr=0, page_size=0)
+ self.filterCutoffSliderAdj = gtk.Adjustment(1000, 100, 7000, 100, 100, 0)
+ self.filterCutoffSliderAdj.connect('value-changed', self.handleFilter)
self.filterCutoffSlider = gtk.HScale(adjustment = self.filterCutoffSliderAdj)
self.filterCutoffSlider.set_size_request(200,-1)
self.filterCutoffSlider.set_value_pos(gtk.POS_RIGHT)
self.filterCutoffCheckButton = gtk.CheckButton()
+ self.filterCutoffCheckButton.connect('toggled', self.handleGeneCheckButton)
+ self.geneCheckButtonDic['filter'] = self.filterCutoffCheckButton
self.filterCutoffBox.pack_start(self.filterCutoffLabel, False, False, padding = 5)
self.filterCutoffBox.pack_end(self.filterCutoffCheckButton, False, False, padding = 5)
self.filterCutoffBox.pack_end(self.filterCutoffSlider, False, False, padding = 5)
- self.filterTypeBox = gtk.HBox()
- self.filterTypeLabel = gtk.Label(_('Filter Type: '))
- self.filterTypeComboBox = BigComboBox()
- for type in [_('Lowpass'),_('Bandpass'),_('Highpass')]:
- self.filterTypeComboBox.append_item(0, type)
- self.filterTypeComboBox.set_active(0)
- self.filterTypeBox.pack_start(self.filterTypeLabel, False, False, padding = 5)
- self.filterTypeBox.pack_end(self.filterTypeComboBox, False, False, padding = 55)
-
+ self.generationMainBox = gtk.VBox()
self.generationLabel = gtk.Label(_('Generation'))
self.generationTypeBox = gtk.HBox()
self.generationTypeLabel = gtk.Label(_('Type: '))
self.generationTypeComboBox = BigComboBox()
- for type in [_('Line'),_('Drunk'),_('Drone and Jump'),_('Repeater'),_('Loop Segments')]:
- self.generationTypeComboBox.append_item(0, type)
+ for genetype in self.geneTypes:
+ self.generationTypeComboBox.append_item(self.geneTypes.index(genetype), genetype, Config.TAM_TAM_ROOT + '/icons/test.svg', (30,30))
+ self.generationTypeComboBox.connect('changed', self.handleGeneTypes)
self.generationTypeComboBox.set_active(0)
self.generationTypeBox.pack_start(self.generationTypeLabel, False, False, padding = 5)
self.generationTypeBox.pack_end(self.generationTypeComboBox, False, False, padding = 55)
self.minimumBox = gtk.HBox()
self.minimumLabel = gtk.Label(_('Minimum: '))
- self.minimumSliderAdj = gtk.Adjustment(value=0, lower=0, upper=16, step_incr=1, page_incr=0, page_size=0)
+ self.minimumSliderAdj = gtk.Adjustment(0, 0, 100, 1, 1, 0)
self.minimumSlider = gtk.HScale(adjustment = self.minimumSliderAdj)
self.minimumSlider.set_size_request(200,-1)
self.minimumSlider.set_value_pos(gtk.POS_RIGHT)
@@ -509,7 +554,7 @@ class propertiesPalette(Palette):
self.maximumBox = gtk.HBox()
self.maximumLabel = gtk.Label(_('Maximum: '))
- self.maximumSliderAdj = gtk.Adjustment(value=0, lower=0, upper=16, step_incr=1, page_incr=0, page_size=0)
+ self.maximumSliderAdj = gtk.Adjustment(100, 0, 100, 1, 1, 0)
self.maximumSlider = gtk.HScale(adjustment = self.maximumSliderAdj)
self.maximumSlider.set_size_request(200,-1)
self.maximumSlider.set_value_pos(gtk.POS_RIGHT)
@@ -518,7 +563,7 @@ class propertiesPalette(Palette):
self.randomBox = gtk.HBox()
self.randomLabel = gtk.Label(_('Random: '))
- self.randomSliderAdj = gtk.Adjustment(value=0, lower=0, upper=16, step_incr=1, page_incr=0, page_size=0)
+ self.randomSliderAdj = gtk.Adjustment(20, 0, 100, 1, 1, 0)
self.randomSlider = gtk.HScale(adjustment = self.randomSliderAdj)
self.randomSlider.set_size_request(200,-1)
self.randomSlider.set_value_pos(gtk.POS_RIGHT)
@@ -526,8 +571,8 @@ class propertiesPalette(Palette):
self.randomBox.pack_end(self.randomSlider, False, False, padding = 52)
self.decisionBox = gtk.HBox()
- self.acceptButton = Icon('stock-accept')
- self.cancelButton = Icon('activity-stop')
+ self.acceptButton = ImageButton(Config.TAM_TAM_ROOT + '/icons/accept.svg')
+ self.cancelButton = ImageButton(Config.TAM_TAM_ROOT + '/icons/cancel.svg')
self.decisionBox.pack_start(self.cancelButton, False, False, padding = 5)
self.decisionBox.pack_start(self.acceptButton, False, False, padding = 5)
@@ -539,15 +584,255 @@ class propertiesPalette(Palette):
self.mainBox.pack_start(self.reverbBox, padding = 5)
self.mainBox.pack_start(self.attackDurBox, padding = 5)
self.mainBox.pack_start(self.decayDurBox, padding = 5)
- self.mainBox.pack_start(self.filterCutoffBox, padding = 5)
self.mainBox.pack_start(self.filterTypeBox, padding = 5)
- self.mainBox.pack_start(self.generationLabel, padding = 15)
- self.mainBox.pack_start(self.generationTypeBox, padding = 5)
- self.mainBox.pack_start(self.minimumBox, padding = 5)
- self.mainBox.pack_start(self.maximumBox, padding = 5)
- self.mainBox.pack_start(self.randomBox, padding = 5)
- self.mainBox.pack_start(self.decisionBox, padding = 5)
+ self.mainBox.pack_start(self.filterCutoffBox, padding = 5)
+ self.generationMainBox.pack_start(self.generationLabel, padding = 15)
+ self.generationMainBox.pack_start(self.generationTypeBox, padding = 5)
+ self.generationMainBox.pack_start(self.minimumBox, padding = 5)
+ self.generationMainBox.pack_start(self.maximumBox, padding = 5)
+ self.generationMainBox.pack_start(self.randomBox, padding = 5)
+ self.generationMainBox.pack_start(self.decisionBox, padding = 5)
+ self.mainBox.pack_start(self.generationMainBox, padding = 5)
self.mainBox.show_all()
+ self.generationMainBox.hide()
+
self.set_content(self.mainBox)
+
+ def handlePopup(self, widget, data = None):
+ if self.edit.getContext() == 0: #Page
+ self.setContext('page', self.edit._mainToolbar._generationPalette.scale, self.edit.tuneInterface.getSelectedIds())
+ elif self.edit.getContext() == 1: #Track
+ self.setContext('track', self.edit._mainToolbar._generationPalette.scale, self.edit.tuneInterface.getSelectedIds(), [ i for i in range(Config.NUMBER_OF_TRACKS) if self.edit.trackSelected[i] ])
+ elif self.edit.getContext() == 2: #Note
+ ids = self.edit.trackInterface.getSelectedNotes()
+ notes = { self.edit.displayedPage: {} }
+ for t in range(Config.NUMBER_OF_TRACKS):
+ if len(ids[t]):
+ notes[self.edit.displayedPage][t] = [ self.edit.noteDB.getNote( self.edit.displayedPage, t, id ) for id in ids[t] ]
+ self.setContext('note', self.edit._mainToolbar._generationPalette.scale, notes = notes)
+
+ def handlePopdown(self, widget, data = None):
+ self.resetGeneCheckButton()
+
+ def setContext( self, context, scale, pageIds = None, trackIds = None, notes = {} ):
+ self.context = context
+ self.scale = GenerationConstants.SCALES[scale]
+ self.notes = {}
+ self.pageIds = pageIds
+ self.trackIds = trackIds
+
+ if context == "page":
+ self.trackIds = [0,1,2,3,4]
+ for p in pageIds:
+ self.notes[p] = {}
+ for t in range(Config.NUMBER_OF_TRACKS):
+ self.notes[p][t] = self.edit.noteDB.getNotesByTrack( p, t )
+ page = self.edit.noteDB.getPage(pageIds[0])
+ self.gridDivisionSliderAdj.set_value(page.beats)
+ elif context == "track":
+ for p in pageIds:
+ self.notes[p] = {}
+ for t in trackIds:
+ self.notes[p][t] = self.edit.noteDB.getNotesByTrack( p, t )
+ else:
+ self.notes = notes
+ self.pageIds = self.notes.keys()
+ self.trackIds = self.notes[self.pageIds[0]].keys()
+
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ # initialize values from first note
+ self.setup = True
+ n = self.notes[p][t][0]
+ self.panSliderAdj.set_value( n.cs.pan )
+ self.reverbSliderAdj.set_value( n.cs.reverbSend )
+ self.attackDurSliderAdj.set_value( n.cs.attack )
+ self.decayDurSliderAdj.set_value( n.cs.decay )
+ self.filterTypeComboBox.set_active(n.cs.filterType)
+ self.currentFilterType = n.cs.filterType
+ self.filterCutoffSliderAdj.set_value( n.cs.filterCutoff )
+ self.setup = False
+
+ def resetGeneCheckButton(self):
+ for key in self.geneCheckButtonDic:
+ self.geneCheckButtonDic[key].set_active(False)
+
+ def handleGeneCheckButton(self, widget, data = None):
+ hidden = True
+ if widget.get_active():
+ self.generationMainBox.show()
+ else:
+ for key in self.geneCheckButtonDic:
+ if self.geneCheckButtonDic[key].get_active():
+ hidden = False
+ if hidden:
+ self.generationMainBox.hide()
+
+
+ def handleBeat(self, widget, signal_id):
+ beats = int(widget.get_adjustment().value)
+ stream = []
+ for page in self.pageIds:
+ stream += [ page, beats ]
+ if len(stream):
+ self.edit.noteDB.updatePages( [ PARAMETER.PAGE_BEATS, len(stream)//2 ] + stream )
+
+ def handleColor(self, widget):
+ index = widget.props.value
+ stream = []
+ for page in self.pageIds:
+ stream += [ page, index ]
+ if len(stream):
+ self.edit.noteDB.updatePages( [ PARAMETER.PAGE_COLOR, len(stream)//2 ] + stream )
+
+ def stepPitch(self, widget, step):
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ substream = []
+ if step > 0:
+ if t != Config.NUMBER_OF_TRACKS-1: # regular note
+ for n in self.notes[p][t]:
+ if n.cs.pitch != Config.MAXIMUM_PITCH:
+ substream += [ n.id, min( Config.MAXIMUM_PITCH, n.cs.pitch + step ) ]
+ else: # drum note
+ for n in self.notes[p][t]:
+ if n.cs.pitch != Config.MAXIMUM_PITCH_DRUM:
+ substream += [ n.id, min( Config.MAXIMUM_PITCH_DRUM, n.cs.pitch + step*Config.PITCH_STEP_DRUM ) ]
+ else:
+ if t != Config.NUMBER_OF_TRACKS-1: # regular note
+ for n in self.notes[p][t]:
+ if n.cs.pitch != Config.MINIMUM_PITCH:
+ substream += [ n.id, max( Config.MINIMUM_PITCH, n.cs.pitch + step ) ]
+ else: # drum note
+ for n in self.notes[p][t]:
+ if n.cs.pitch != Config.MINIMUM_PITCH_DRUM:
+ substream += [ n.id, max( Config.MINIMUM_PITCH_DRUM, n.cs.pitch + step*Config.PITCH_STEP_DRUM ) ]
+ if len(substream):
+ stream += [ p, t, PARAMETER.PITCH, len(substream)//2 ] + substream
+ if len(stream):
+ self.edit.noteDB.updateNotes( stream + [-1] )
+
+ def stepVolume(self, widget, step):
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ substream = []
+ if step > 0:
+ for n in self.notes[p][t]:
+ if n.cs.amplitude != Config.MAXIMUM_AMPLITUDE:
+ substream += [ n.id, min( Config.MAXIMUM_AMPLITUDE, n.cs.amplitude + step ) ]
+ else:
+ for n in self.notes[p][t]:
+ if n.cs.amplitude != Config.MINIMUM_AMPLITUDE:
+ substream += [ n.id, max( Config.MINIMUM_AMPLITUDE, n.cs.amplitude + step ) ]
+ if len(substream):
+ stream += [ p, t, PARAMETER.AMPLITUDE, len(substream)//2 ] + substream
+ if len(stream):
+ self.edit.noteDB.updateNotes( stream + [-1] )
+
+ def handlePan(self, adjust):
+ if not self.setup:
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ stream += [ p, t, PARAMETER.PAN, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ stream += [ n.id, adjust.value ]
+ if len(stream):
+ self.edit.noteDB.updateNotes( stream + [-1] )
+
+ def handleReverb(self, adjust):
+ if not self.setup:
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ stream += [ p, t, PARAMETER.REVERB, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ stream += [ n.id, adjust.value ]
+ if len(stream):
+ self.edit.noteDB.updateNotes( stream + [-1] )
+
+ def handleAttack(self, adjust):
+ if not self.setup:
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ stream += [ p, t, PARAMETER.ATTACK, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ stream += [ n.id, adjust.value ]
+ if len(stream):
+ self.edit.noteDB.updateNotes( stream + [-1] )
+
+ def handleDecay(self, adjust):
+ if not self.setup:
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ stream += [ p, t, PARAMETER.DECAY, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ stream += [ n.id, adjust.value ]
+ if len(stream):
+ self.edit.noteDB.updateNotes( stream + [-1] )
+
+
+ def handleFilterTypes(self, widget):
+ self.currentFilterType = widget.props.value
+
+ if not self.currentFilterType:
+ self.filterCutoffSlider.set_sensitive(False)
+ else:
+ self.filterCutoffSlider.set_sensitive(True)
+
+ if not self.setup:
+ if self.currentFilterType:
+ typestream = []
+ cutoffstream = []
+ cutoff = self.filterCutoffSliderAdj.value
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ substream = []
+ typestream += [ p, t, PARAMETER.FILTERTYPE, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ typestream += [ n.id, self.currentFilterType ]
+ if n.cs.filterCutoff != cutoff:
+ substream += [ n.id, cutoff ]
+ if len(substream):
+ cutoffstream += [ p, t, PARAMETER.FILTERCUTOFF, len(substream)//2 ] + substream
+ if len(typestream):
+ self.edit.noteDB.updateNotes( typestream + [-1] )
+ if len(cutoffstream):
+ self.edit.noteDB.updateNotes( cutoffstream + [-1] )
+ else:
+ self.currentFilterType = 0
+ typestream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ typestream += [ p, t, PARAMETER.FILTERTYPE, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ typestream += [ n.id, 0 ]
+ if len(typestream):
+ self.edit.noteDB.updateNotes( typestream + [-1] )
+
+ def handleGeneTypes(self, widget):
+ self.currentGeneType = widget.props.value
+
+ def handleFilter(self, adjust):
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ stream += [ p, t, PARAMETER.FILTERCUTOFF, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ stream += [ n.id, adjust.value ]
+ if len(stream):
+ self.edit.noteDB.updateNotes( stream + [-1] )
diff --git a/Edit/MainWindow.py b/Edit/MainWindow.py
index 15d0468..b25cf62 100644
--- a/Edit/MainWindow.py
+++ b/Edit/MainWindow.py
@@ -135,7 +135,8 @@ class MainWindow( SubActivity ):
self.GUI["2instrument1volBox"] = gtk.VBox()
self.GUI["2instrument1volumeAdjustment"] = gtk.Adjustment( self._data["track_volume"][1], 0, 100, 1, 1, 0 )
#self.GUI["2instrument1volumeAdjustment"].connect( "value_changed", self.onTrackVolumeChanged, 0 )
- self.GUI["2instrument1volumeSlider"] = ImageVScale( Config.IMAGE_ROOT+"sliderInst1.png", self.GUI["2instrument1volumeAdjustment"], 6 )
+ self.GUI["2instrument1volumeSlider"] = gtk.VScale(self.GUI["2instrument1volumeAdjustment"])
+ self.GUI["2instrument1volumeSlider"].set_draw_value(False)
self.GUI["2instrument1volumeSlider"].set_inverted(True)
self.GUI["2instrument1volumeSlider"].set_size_request( 30, -1 )
self.GUI["2instrument1volumeAdjustment"].connect( "value-changed", self.handleTrackVolume, 0 )
@@ -156,7 +157,8 @@ class MainWindow( SubActivity ):
self.GUI["2instrument2volBox"] = gtk.VBox()
self.GUI["2instrument2volumeAdjustment"] = gtk.Adjustment( self._data["track_volume"][1], 0, 100, 1, 1, 0 )
#self.GUI["2instrument2volumeAdjustment"].connect( "value_changed", self.onTrackVolumeChanged, 1 )
- self.GUI["2instrument2volumeSlider"] = ImageVScale( Config.IMAGE_ROOT+"sliderInst2.png", self.GUI["2instrument2volumeAdjustment"], 6 )
+ self.GUI["2instrument2volumeSlider"] = gtk.VScale(self.GUI["2instrument2volumeAdjustment"])
+ self.GUI["2instrument2volumeSlider"].set_draw_value(False)
self.GUI["2instrument2volumeSlider"].set_inverted(True)
self.GUI["2instrument2volumeSlider"].set_size_request( 30, -1 )
self.GUI["2instrument2volumeAdjustment"].connect( "value-changed", self.handleTrackVolume, 1 )
@@ -177,7 +179,8 @@ class MainWindow( SubActivity ):
self.GUI["2instrument3volBox"] = gtk.VBox()
self.GUI["2instrument3volumeAdjustment"] = gtk.Adjustment( self._data["track_volume"][2], 0, 100, 1, 1, 0 )
#self.GUI["2instrument3volumeAdjustment"].connect( "value_changed", self.onTrackVolumeChanged, 2 )
- self.GUI["2instrument3volumeSlider"] = ImageVScale( Config.IMAGE_ROOT+"sliderInst3.png", self.GUI["2instrument3volumeAdjustment"], 6 )
+ self.GUI["2instrument3volumeSlider"] = gtk.VScale(self.GUI["2instrument3volumeAdjustment"])
+ self.GUI["2instrument3volumeSlider"].set_draw_value(False)
self.GUI["2instrument3volumeSlider"].set_inverted(True)
self.GUI["2instrument3volumeSlider"].set_size_request( 30, -1 )
self.GUI["2instrument3volumeAdjustment"].connect( "value-changed", self.handleTrackVolume, 2 )
@@ -198,7 +201,8 @@ class MainWindow( SubActivity ):
self.GUI["2instrument4volBox"] = gtk.VBox()
self.GUI["2instrument4volumeAdjustment"] = gtk.Adjustment( self._data["track_volume"][3], 0, 100, 1, 1, 0 )
#self.GUI["2instrument4volumeAdjustment"].connect( "value_changed", self.onTrackVolumeChanged, 3 )
- self.GUI["2instrument4volumeSlider"] = ImageVScale( Config.IMAGE_ROOT+"sliderInst4.png", self.GUI["2instrument4volumeAdjustment"], 6 )
+ self.GUI["2instrument4volumeSlider"] = gtk.VScale(self.GUI["2instrument4volumeAdjustment"])
+ self.GUI["2instrument4volumeSlider"].set_draw_value(False)
self.GUI["2instrument4volumeSlider"].set_inverted(True)
self.GUI["2instrument4volumeSlider"].set_size_request( 30, -1 )
self.GUI["2instrument4volumeAdjustment"].connect( "value-changed", self.handleTrackVolume, 3 )
@@ -219,7 +223,8 @@ class MainWindow( SubActivity ):
self.GUI["2drumVolBox"] = gtk.VBox()
self.GUI["2drumvolumeAdjustment"] = gtk.Adjustment( self._data["track_volume"][4], 0, 100, 1, 1, 0 )
#self.GUI["2drumvolumeAdjustment"].connect( "value_changed", self.onTrackVolumeChanged, 4 )
- self.GUI["2drumvolumeSlider"] = ImageVScale( Config.IMAGE_ROOT+"sliderDrum.png", self.GUI["2drumvolumeAdjustment"], 6 )
+ self.GUI["2drumvolumeSlider"] = gtk.VScale(self.GUI["2drumvolumeAdjustment"])
+ self.GUI["2drumvolumeSlider"].set_draw_value(False)
self.GUI["2drumvolumeSlider"].set_inverted(True)
self.GUI["2drumvolumeSlider"].set_size_request( 30, -1 )
self.GUI["2drumvolumeAdjustment"].connect( "value-changed", self.handleTrackVolume, 4 )
@@ -1552,7 +1557,7 @@ class MainWindow( SubActivity ):
self.GUI["9propertiesPopup"].move( balloc.x + winLoc[0] - 100, balloc.y - walloc.height + winLoc[1] )
else:
self.GUI["9propertiesPopup"].hide()
-
+
def pageDelete( self, pageIds = -1, instruments = False ):
if pageIds == -1:
diff --git a/NEWS b/NEWS
index eba7f6f..bee0dab 100644
--- a/NEWS
+++ b/NEWS
@@ -1,12 +1,16 @@
34
+34
+
* Synthlab sugar integration (olipet, Flipo)
+* Toolbars in edit draft, hit alt-t to show the toolbar, alt-y to hide (Flipo)
+* Bug that prevented sound from working fixed (LeJames)
33
* Added Sugar Toolbar to miniTamTam and Synthlab (Flipo)
* Network now working in miniTamTam, use the share button on the activity toolbar (lync)
-* Added help subsystem (ethrop, lejames)
+* Added help subsystem (ethrop, LeJames)
32
diff --git a/TamTam.py b/TamTam.py
index beacce6..c0a02e5 100755
--- a/TamTam.py
+++ b/TamTam.py
@@ -209,6 +209,8 @@ class TamTam(Activity):
elif key == gtk.keysyms.t:
self.toolbox.show()
return
+ elif key == gtk.keysyms.y:
+ self.toolbox.hide()
if self.mode:
self.modeList[ self.mode ].onKeyPress(widget, event)
diff --git a/Util/Clooper/aclient.cpp b/Util/Clooper/aclient.cpp
index baa7419..1755438 100644
--- a/Util/Clooper/aclient.cpp
+++ b/Util/Clooper/aclient.cpp
@@ -30,6 +30,7 @@ static double pytime(const struct timeval * tv)
#define ERROR_HERE if (_debug && (VERBOSE > 0)) fprintf(_debug, "ERROR: %s:%i\n", __FILE__, __LINE__)
#define IF_DEBUG(N) if (_debug && (VERBOSE > N))
+#define FLOAT_TO_SHORT(in,out) __asm__ __volatile__ ("fistps %0" : "=m" (out) : "t" (in) : "st") ;
int VERBOSE = 3;
FILE * _debug = NULL;
@@ -472,11 +473,11 @@ struct TamTamSound
return 1;
}
- assert(up_ratio = sys_stuff->rate / csound_frame_rate);
+ assert(up_ratio == (signed)(sys_stuff->rate / csound_frame_rate));
bool do_upsample = (signed)sys_stuff->period_size != csound_nframes;
- float *upbuf = do_upsample ? new float[ sys_stuff->period_size * nchannels ]: NULL; //2 channels
- int cbuf_pos = 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;
@@ -487,6 +488,7 @@ struct TamTamSound
{
up_pos = 0;
int messed = 0;
+ short cursample[2]={0,0};
while(!messed)
{
if (cbuf_pos == csound_nframes)
@@ -495,13 +497,17 @@ struct TamTamSound
if (csoundPerformBuffer(csound)) { messed = 1;break;}
cbuf = csoundGetOutputBuffer(csound);
}
- upbuf[2*up_pos+0] = cbuf[cbuf_pos*2+0];
- upbuf[2*up_pos+1] = cbuf[cbuf_pos*2+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;
+ cbuf[cbuf_pos*2+0] *= (float) ((1<<15)-100.0f);
+ cbuf[cbuf_pos*2+1] *= (float) ((1<<15)-100.0f);
+ 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;
@@ -512,9 +518,14 @@ struct TamTamSound
}
else //fill one period of audio directly from csound
{
- //if (0 > sys_stuff->readbuf((char*)csoundGetInputBuffer(csound))) break;
if (csoundPerformBuffer(csound)) break;
- if (0 > sys_stuff->writebuf(csound_nframes,csoundGetOutputBuffer(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 (thread_playloop)
@@ -533,7 +544,7 @@ struct TamTamSound
}
sys_stuff->close(1);
- if (do_upsample) delete [] upbuf;
+ delete [] upbuf;
ll->printf(2, "INFO: performance thread returning 0\n");
return 0;
}
diff --git a/Util/Clooper/aclient.so b/Util/Clooper/aclient.so
index b089412..97c9cbb 100755
--- a/Util/Clooper/aclient.so
+++ b/Util/Clooper/aclient.so
Binary files differ
diff --git a/Util/Clooper/audio.cpp b/Util/Clooper/audio.cpp
index 0d901e6..e93ea54 100644
--- a/Util/Clooper/audio.cpp
+++ b/Util/Clooper/audio.cpp
@@ -45,7 +45,8 @@ struct SystemStuff
snd_pcm_t *phandle;
snd_pcm_uframes_t period_size;
unsigned int rate;
- SystemStuff(log_t * ll) : ll(ll), phandle(NULL), period_size(0), rate(0)
+ 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()
@@ -95,8 +96,8 @@ struct SystemStuff
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, SND_PCM_FORMAT_FLOAT)) { ERROR_HERE; goto open_error;}
- if ( 0 > snd_pcm_hw_params_set_format(phandle, hw, SND_PCM_FORMAT_FLOAT)) { 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_test_rate(phandle, hw, rate, 0))
@@ -181,7 +182,7 @@ open_error:
}
if (0 > snd_pcm_prepare(phandle)) { ERROR_HERE; }
}
- int writebuf(snd_pcm_uframes_t frame_count, float * frame_data)
+ int writebuf(snd_pcm_uframes_t frame_count, short int * frame_data)
{
if (!phandle)
{
diff --git a/activity/activity.info b/activity/activity.info
index 8ea67bb..ff1bcd3 100644
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -3,4 +3,4 @@ name = TamTam
service_name = org.laptop.TamTam
icon = activity-tamtam
class = TamTam.TamTam
-activity_version = 33
+activity_version = 34
diff --git a/icons/accept.svg b/icons/accept.svg
new file mode 100755
index 0000000..a2f9e28
--- /dev/null
+++ b/icons/accept.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="45px" height="45px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<g>
+
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" d="
+ M5.78,28.079c0-12.43,10.071-22.499,22.499-22.499c12.431,0,22.501,10.069,22.501,22.499c0,12.431-10.07,22.501-22.501,22.501
+ C15.851,50.58,5.78,40.51,5.78,28.079z"/>
+</g>
+<g>
+
+ <line fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" x1="16.788" y1="26.691" x2="25.781" y2="38.706"/>
+
+ <line fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" x1="25.781" y1="38.706" x2="39.773" y2="18.704"/>
+</g>
+</svg>
diff --git a/icons/cancel.svg b/icons/cancel.svg
new file mode 100755
index 0000000..59512eb
--- /dev/null
+++ b/icons/cancel.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="45px" height="45px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" d="
+ M5.78,28.08c0-12.431,10.071-22.5,22.5-22.5c12.432,0,22.5,10.069,22.5,22.5c0,12.432-10.068,22.5-22.5,22.5
+ C15.851,50.58,5.78,40.512,5.78,28.08z"/>
+<line fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" x1="20.155" y1="19.956" x2="37.029" y2="36.83"/>
+<line fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" x1="37.029" y1="19.956" x2="20.155" y2="36.83"/>
+</svg>
diff --git a/icons/pause.svg b/icons/pause.svg
new file mode 100644
index 0000000..e8ee5eb
--- /dev/null
+++ b/icons/pause.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<g>
+ <circle fill="#808284" cx="27" cy="27" r="22.5"/>
+ <circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="27.001" cy="27" r="18.677"/>
+</g>
+<g>
+ <line fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" x1="31.896" y1="20.973" x2="31.896" y2="33.141"/>
+ <line fill="none" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" x1="22.104" y1="20.859" x2="22.104" y2="33.027"/>
+</g>
+</svg>
diff --git a/icons/test.svg b/icons/test.svg
new file mode 100755
index 0000000..8a0912a
--- /dev/null
+++ b/icons/test.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
+<rect x="6.554" y="13.275" fill-rule="evenodd" clip-rule="evenodd" fill="#CCCCCC" stroke="#FFFFFF" width="18.491" height="11.565"/>
+<rect x="12.095" y="16.512" fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" stroke="#808080" width="6.943" height="4.624"/>
+<polygon fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFC" points="28.3,14.192 3.3,14.192 15.8,4.48 "/>
+</svg>
diff --git a/po/TamTam.pot b/po/TamTam.pot
index 27b7b55..903212f 100644
--- a/po/TamTam.pot
+++ b/po/TamTam.pot
@@ -3,12 +3,41 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
+#: SynthLab/SynthLabConstants.py:114 SynthLab/SynthLabConstants.py:117
+#: SynthLab/SynthLabConstants.py:171 SynthLab/SynthLabConstants.py:172
+#: SynthLab/SynthLabConstants.py:173 SynthLab/SynthLabConstants.py:174
+#: SynthLab/SynthLabConstants.py:183 SynthLab/SynthLabConstants.py:184
+#: SynthLab/SynthLabConstants.py:185 SynthLab/SynthLabConstants.py:186
+#: SynthLab/SynthLabConstants.py:194 SynthLab/SynthLabConstants.py:195
+#: SynthLab/SynthLabConstants.py:196 SynthLab/SynthLabConstants.py:197
+#: SynthLab/SynthLabConstants.py:206 SynthLab/SynthLabConstants.py:207
+#: SynthLab/SynthLabConstants.py:208 SynthLab/SynthLabConstants.py:209
+#: SynthLab/SynthLabConstants.py:218 SynthLab/SynthLabConstants.py:219
+#: SynthLab/SynthLabConstants.py:220 SynthLab/SynthLabConstants.py:221
+#: SynthLab/SynthLabConstants.py:230 SynthLab/SynthLabConstants.py:231
+#: SynthLab/SynthLabConstants.py:232 SynthLab/SynthLabConstants.py:233
+#: SynthLab/SynthLabConstants.py:241 SynthLab/SynthLabConstants.py:242
+#: SynthLab/SynthLabConstants.py:243 SynthLab/SynthLabConstants.py:244
+#: SynthLab/SynthLabConstants.py:252 SynthLab/SynthLabConstants.py:253
+#: SynthLab/SynthLabConstants.py:254 SynthLab/SynthLabConstants.py:255
+#: SynthLab/SynthLabConstants.py:264 SynthLab/SynthLabConstants.py:265
+#: SynthLab/SynthLabConstants.py:266 SynthLab/SynthLabConstants.py:267
+#: SynthLab/SynthLabConstants.py:275 SynthLab/SynthLabConstants.py:276
+#: SynthLab/SynthLabConstants.py:277 SynthLab/SynthLabConstants.py:278
+#: SynthLab/SynthLabConstants.py:287 SynthLab/SynthLabConstants.py:288
+#: SynthLab/SynthLabConstants.py:289 SynthLab/SynthLabConstants.py:290
+#: SynthLab/SynthLabConstants.py:299 SynthLab/SynthLabConstants.py:300
+#: SynthLab/SynthLabConstants.py:301 SynthLab/SynthLabConstants.py:302
+#: SynthLab/SynthLabConstants.py:311 SynthLab/SynthLabConstants.py:312
+#: SynthLab/SynthLabConstants.py:313 SynthLab/SynthLabConstants.py:321
+#: SynthLab/SynthLabConstants.py:322 SynthLab/SynthLabConstants.py:323
+#: SynthLab/SynthLabConstants.py:324
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-07-31 11:45-0400\n"
+"POT-Creation-Date: 2007-08-14 17:15-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,115 +45,216 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: Edit/EditToolbars.py:30 Resources/tooltips_en.py:114
+#: Edit/EditToolbars.py:41 Resources/tooltips_en.py:114
#: miniTamTam/miniToolbars.py:31
msgid "Play / Stop"
msgstr ""
-#: Edit/EditToolbars.py:44
-msgid "Generation"
+#: Edit/EditToolbars.py:62 miniTamTam/miniTamTamMain.py:150
+msgid "Record"
msgstr ""
-#: Edit/EditToolbars.py:54
+#: Edit/EditToolbars.py:72
msgid "Draw Tool"
msgstr ""
-#: Edit/EditToolbars.py:64
+#: Edit/EditToolbars.py:88
msgid "Volume / Tempo"
msgstr ""
-#: Edit/EditToolbars.py:72
+#: Edit/EditToolbars.py:96 Edit/EditToolbars.py:534
+msgid "Generation"
+msgstr ""
+
+#: Edit/EditToolbars.py:104
msgid "Properties"
msgstr ""
-#: Edit/EditToolbars.py:93
-msgid "Non-continuous"
+#: Edit/EditToolbars.py:169
+msgid "Continuous"
msgstr ""
-#: Edit/EditToolbars.py:99
+#: Edit/EditToolbars.py:176
msgid "1/2"
msgstr ""
-#: Edit/EditToolbars.py:100
+#: Edit/EditToolbars.py:176
msgid "1/4"
msgstr ""
-#: Edit/EditToolbars.py:101
+#: Edit/EditToolbars.py:176
msgid "1/8"
msgstr ""
-#: Edit/EditToolbars.py:102
+#: Edit/EditToolbars.py:176
msgid "1/16"
msgstr ""
-#: Edit/EditToolbars.py:103
+#: Edit/EditToolbars.py:176
msgid "1/32"
msgstr ""
-#: Edit/EditToolbars.py:124 Resources/tooltips_en.py:111
+#: Edit/EditToolbars.py:209 Resources/tooltips_en.py:111
msgid "Volume"
msgstr ""
-#: Edit/EditToolbars.py:134 Resources/tooltips_en.py:49
+#: Edit/EditToolbars.py:220 Resources/tooltips_en.py:49
#: Resources/tooltips_en.py:120
msgid "Tempo"
msgstr ""
-#: Edit/EditToolbars.py:191
+#: Edit/EditToolbars.py:290
msgid "Scale: "
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:65
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:65
msgid "Major scale"
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:66
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:66
msgid "Harmonic minor scale"
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:67
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:67
msgid "Natural minor scale"
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:68
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:68
msgid "Phrygian scale"
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:69
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:69
msgid "Dorian scale"
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:70
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:70
msgid "Lydian scale"
msgstr ""
-#: Edit/EditToolbars.py:193
+#: Edit/EditToolbars.py:292
msgid "Myxolidian scale"
msgstr ""
-#: Edit/EditToolbars.py:197
+#: Edit/EditToolbars.py:299
msgid "Mode: "
msgstr ""
-#: Edit/EditToolbars.py:199 Resources/tooltips_en.py:61
-#: Resources/tooltips_en.py:98
+#: Edit/EditToolbars.py:301 Edit/EditToolbars.py:392
+#: Resources/tooltips_en.py:61 Resources/tooltips_en.py:98
msgid "Drunk"
msgstr ""
-#: Edit/EditToolbars.py:199 Resources/tooltips_en.py:62
+#: Edit/EditToolbars.py:301 Edit/EditToolbars.py:392
+#: Resources/tooltips_en.py:62
msgid "Drone and Jump"
msgstr ""
-#: Edit/EditToolbars.py:199 Resources/tooltips_en.py:63
-#: Resources/tooltips_en.py:100
+#: Edit/EditToolbars.py:301 Edit/EditToolbars.py:392
+#: Resources/tooltips_en.py:63 Resources/tooltips_en.py:100
msgid "Repeater"
msgstr ""
-#: Edit/EditToolbars.py:199 Resources/tooltips_en.py:64
+#: Edit/EditToolbars.py:301 Resources/tooltips_en.py:64
#: Resources/tooltips_en.py:101
msgid "Loop segments"
msgstr ""
+#: Edit/EditToolbars.py:391
+msgid "None"
+msgstr ""
+
+#: Edit/EditToolbars.py:391 SynthLab/SynthLabConstants.py:285
+msgid "Lowpass"
+msgstr ""
+
+#: Edit/EditToolbars.py:391 SynthLab/SynthLabConstants.py:285
+msgid "Bandpass"
+msgstr ""
+
+#: Edit/EditToolbars.py:391 SynthLab/SynthLabConstants.py:285
+msgid "Highpass"
+msgstr ""
+
+#: Edit/EditToolbars.py:392 Resources/tooltips_en.py:97
+msgid "Line"
+msgstr ""
+
+#: Edit/EditToolbars.py:392
+msgid "Loop Segments"
+msgstr ""
+
+#: Edit/EditToolbars.py:393
+msgid "Purple"
+msgstr ""
+
+#: Edit/EditToolbars.py:393
+msgid "Green"
+msgstr ""
+
+#: Edit/EditToolbars.py:393
+msgid "Blue"
+msgstr ""
+
+#: Edit/EditToolbars.py:393
+msgid "Yellow"
+msgstr ""
+
+#: Edit/EditToolbars.py:406
+msgid "Grid division: "
+msgstr ""
+
+#: Edit/EditToolbars.py:417
+msgid "Page color: "
+msgstr ""
+
+#: Edit/EditToolbars.py:427
+msgid "Transposition: "
+msgstr ""
+
+#: Edit/EditToolbars.py:441
+msgid "Volume: "
+msgstr ""
+
+#: Edit/EditToolbars.py:455
+msgid "Pan: "
+msgstr ""
+
+#: Edit/EditToolbars.py:469
+msgid "Reverb: "
+msgstr ""
+
+#: Edit/EditToolbars.py:483
+msgid "Attack duration: "
+msgstr ""
+
+#: Edit/EditToolbars.py:497
+msgid "Decay duration: "
+msgstr ""
+
+#: Edit/EditToolbars.py:511
+msgid "Filter Type: "
+msgstr ""
+
+#: Edit/EditToolbars.py:520
+msgid "Filter cutoff: "
+msgstr ""
+
+#: Edit/EditToolbars.py:537
+msgid "Type: "
+msgstr ""
+
+#: Edit/EditToolbars.py:547
+msgid "Minimum: "
+msgstr ""
+
+#: Edit/EditToolbars.py:556
+msgid "Maximum: "
+msgstr ""
+
+#: Edit/EditToolbars.py:565
+msgid "Random: "
+msgstr ""
+
#: Edit/MainWindow.py:59
msgid "Compose"
msgstr ""
@@ -253,7 +383,7 @@ msgstr ""
msgid "Rewind"
msgstr ""
-#: Resources/tooltips_en.py:46 Resources/tooltips_en.py:141
+#: Resources/tooltips_en.py:46
msgid "Save to journal and quit"
msgstr ""
@@ -320,7 +450,7 @@ msgid "Panoramisation"
msgstr ""
#: Resources/tooltips_en.py:83 Resources/tooltips_en.py:113
-#: Resources/tooltips_en.py:264 miniTamTam/miniToolbars.py:83
+#: SynthLab/SynthLabConstants.py:305 miniTamTam/miniToolbars.py:83
msgid "Reverb"
msgstr ""
@@ -355,10 +485,6 @@ msgstr ""
msgid "Open algorithmic generator"
msgstr ""
-#: Resources/tooltips_en.py:97
-msgid "Line"
-msgstr ""
-
#: Resources/tooltips_en.py:99
msgid "Drone and jump"
msgstr ""
@@ -443,455 +569,569 @@ msgstr ""
msgid "Record mic into slot 4"
msgstr ""
-#: Resources/tooltips_en.py:132
+#: SynthLab/SynthLabConstants.py:90
msgid "Source"
msgstr ""
-#: Resources/tooltips_en.py:133
+#: SynthLab/SynthLabConstants.py:91
msgid "Effect"
msgstr ""
-#: Resources/tooltips_en.py:134
+#: SynthLab/SynthLabConstants.py:92
msgid "Control"
msgstr ""
-#: Resources/tooltips_en.py:135
+#: SynthLab/SynthLabConstants.py:93
msgid "Sound Output"
msgstr ""
-#: Resources/tooltips_en.py:136
-msgid "Sound Duration"
+#: SynthLab/SynthLabConstants.py:96
+msgid "LFO"
msgstr ""
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 1"
+#: SynthLab/SynthLabConstants.py:97
+msgid "Amplitude"
msgstr ""
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 2"
+#: SynthLab/SynthLabConstants.py:98
+msgid "Frequency"
msgstr ""
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 3"
+#: SynthLab/SynthLabConstants.py:99 SynthLab/SynthLabConstants.py:250
+msgid "Waveform"
msgstr ""
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 4"
+#: SynthLab/SynthLabConstants.py:100
+msgid "Sine"
msgstr ""
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 5"
+#: SynthLab/SynthLabConstants.py:100 SynthLab/SynthLabConstants.py:180
+msgid "Triangle"
msgstr ""
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 6"
+#: SynthLab/SynthLabConstants.py:100
+msgid "Bi-Square"
msgstr ""
-#: Resources/tooltips_en.py:138
-msgid "Save"
+#: SynthLab/SynthLabConstants.py:100
+msgid "Uni-Square"
msgstr ""
-#: Resources/tooltips_en.py:139
-msgid "Load"
+#: SynthLab/SynthLabConstants.py:100 SynthLab/SynthLabConstants.py:180
+msgid "Sawtooth"
msgstr ""
-#: Resources/tooltips_en.py:140
-msgid "Save to miniTamTam"
+#: SynthLab/SynthLabConstants.py:100
+msgid "Sawtooth-down"
msgstr ""
-#: Resources/tooltips_en.py:142
-msgid "Reset"
+#: SynthLab/SynthLabConstants.py:101
+msgid "Offset"
msgstr ""
-#: Resources/tooltips_en.py:145
-msgid "LFO"
+#: SynthLab/SynthLabConstants.py:102
+msgid ""
+"A low frequency oscillation (LFO) is a signal usually below 20 Hz which "
+"creates a pulsating rythm rather than a audible tone. This signal is "
+"commonly used to control sound parameters."
msgstr ""
-#: Resources/tooltips_en.py:146
-msgid "Amplitude"
+#: SynthLab/SynthLabConstants.py:103
+msgid ""
+"The amplitude (volume) of the LFO signal. More amplitude means the effect "
+"will be more noticeable."
msgstr ""
-#: Resources/tooltips_en.py:147
-msgid "Frequency"
+#: SynthLab/SynthLabConstants.py:104
+msgid "The speed of the signal beteen 0 Hz and 20 hz."
msgstr ""
-#: Resources/tooltips_en.py:148 Resources/tooltips_en.py:234
-msgid "Waveform"
+#: SynthLab/SynthLabConstants.py:105
+msgid "The type of waveform that will be used for the LFO."
msgstr ""
-#: Resources/tooltips_en.py:149
-msgid "Sine"
+#: SynthLab/SynthLabConstants.py:106
+msgid "Offset: "
msgstr ""
-#: Resources/tooltips_en.py:149 Resources/tooltips_en.py:194
-msgid "Triangle"
+#: SynthLab/SynthLabConstants.py:108
+msgid "Random"
msgstr ""
-#: Resources/tooltips_en.py:149
-msgid "Bi-Square"
+#: SynthLab/SynthLabConstants.py:109
+msgid "Minimum"
msgstr ""
-#: Resources/tooltips_en.py:149
-msgid "Uni-Square"
+#: SynthLab/SynthLabConstants.py:110
+msgid "Maximum"
msgstr ""
-#: Resources/tooltips_en.py:149 Resources/tooltips_en.py:194
-msgid "Sawtooth"
+#: SynthLab/SynthLabConstants.py:112
+msgid "Seed"
msgstr ""
-#: Resources/tooltips_en.py:149
-msgid "Sawtooth-down"
+#: SynthLab/SynthLabConstants.py:113
+msgid ""
+"A random number generator is a computational device designed to generate a "
+"sequence of numbers that lack any pattern."
msgstr ""
-#: Resources/tooltips_en.py:150
-msgid "Offset"
+#: SynthLab/SynthLabConstants.py:115
+msgid "The minimum value that can be generated."
msgstr ""
-#: Resources/tooltips_en.py:152
-msgid "Random"
+#: SynthLab/SynthLabConstants.py:116
+msgid "The maximum value that can be generated."
msgstr ""
-#: Resources/tooltips_en.py:153
-msgid "Minimum"
+#: SynthLab/SynthLabConstants.py:119
+msgid "Envelope"
msgstr ""
-#: Resources/tooltips_en.py:154
-msgid "Maximum"
+#: SynthLab/SynthLabConstants.py:120
+msgid "Attack"
msgstr ""
-#: Resources/tooltips_en.py:156
-msgid "Seed"
+#: SynthLab/SynthLabConstants.py:121
+msgid "Decay"
msgstr ""
-#: Resources/tooltips_en.py:158
-msgid "Envelope"
+#: SynthLab/SynthLabConstants.py:122
+msgid "Sustain"
msgstr ""
-#: Resources/tooltips_en.py:159
-msgid "Attack"
+#: SynthLab/SynthLabConstants.py:123
+msgid "Release"
msgstr ""
-#: Resources/tooltips_en.py:160
-msgid "Decay"
+#: SynthLab/SynthLabConstants.py:124
+msgid ""
+"An ADSR envelope is a component of many sythesizers, samplers, and other "
+"electronic musical instruments. Its function is to modulate some aspect of "
+"the instrument's sound - often its volume - over time."
msgstr ""
-#: Resources/tooltips_en.py:161
-msgid "Sustain"
+#: SynthLab/SynthLabConstants.py:125
+msgid "How quickly the sound reaches full volume after the sound is activated."
msgstr ""
-#: Resources/tooltips_en.py:162
-msgid "Release"
+#: SynthLab/SynthLabConstants.py:126
+msgid ""
+"How quickly the sound drops to the sustain level after the initial peak."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:127
+msgid ""
+"The \"constant\" volume that the sound takes after decay until the note is "
+"released."
msgstr ""
-#: Resources/tooltips_en.py:164
+#: SynthLab/SynthLabConstants.py:128
+msgid "How quickly the sound fades when a note ends."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:130
msgid "Trackpad X"
msgstr ""
-#: Resources/tooltips_en.py:167
+#: SynthLab/SynthLabConstants.py:133
msgid "Scaling"
msgstr ""
-#: Resources/tooltips_en.py:168
+#: SynthLab/SynthLabConstants.py:134
msgid "Lin"
msgstr ""
-#: Resources/tooltips_en.py:168
+#: SynthLab/SynthLabConstants.py:134
msgid "Log"
msgstr ""
-#: Resources/tooltips_en.py:169
+#: SynthLab/SynthLabConstants.py:135
msgid "Poll time"
msgstr ""
-#: Resources/tooltips_en.py:171
+#: SynthLab/SynthLabConstants.py:136
+msgid ""
+"The XO trackpad can be used to control sound parameters. This is the x axis, "
+"from left to right."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:137 SynthLab/SynthLabConstants.py:149
+msgid "The minimum value the trackpad will send."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:138 SynthLab/SynthLabConstants.py:150
+msgid "The maximum value de trackpad will send."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:139 SynthLab/SynthLabConstants.py:151
+msgid "The type of scaling, logarithmic or linear."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:140 SynthLab/SynthLabConstants.py:152
+msgid "The time interval between each event coming from the trackpad."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:142
msgid "Trackpad Y"
msgstr ""
-#: Resources/tooltips_en.py:179
+#: SynthLab/SynthLabConstants.py:148
+msgid ""
+"The XO trackpad can be used to control sound parameters. This is the y axis, "
+"from top to bottom."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:155
msgid "FM"
msgstr ""
-#: Resources/tooltips_en.py:180
+#: SynthLab/SynthLabConstants.py:156
msgid "Carrier Frequency"
msgstr ""
-#: Resources/tooltips_en.py:181
+#: SynthLab/SynthLabConstants.py:157
msgid "Modulator Frequency"
msgstr ""
-#: Resources/tooltips_en.py:182 Resources/tooltips_en.py:228
+#: SynthLab/SynthLabConstants.py:158 SynthLab/SynthLabConstants.py:239
msgid "Index"
msgstr ""
-#: Resources/tooltips_en.py:183
+#: SynthLab/SynthLabConstants.py:159
msgid "Gain"
msgstr ""
-#: Resources/tooltips_en.py:185
+#: SynthLab/SynthLabConstants.py:160
+msgid ""
+"Frequency modulation synthesis is a form of audio synthesis where the timbre "
+"of a simple waveform is changed by frequency modulating it with a modulating "
+"frequency that is also in the audio range, resulting in a more complex "
+"waveform and a different-sounding tone."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:161
+msgid "The main waveform frequency."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:162
+msgid "The frequency of the waveform that will modulate the Carrier waveform."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:163
+msgid "The variation in frequency of the Carrier waveform."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:164 SynthLab/SynthLabConstants.py:175
+#: SynthLab/SynthLabConstants.py:187 SynthLab/SynthLabConstants.py:198
+#: SynthLab/SynthLabConstants.py:210 SynthLab/SynthLabConstants.py:222
+#: SynthLab/SynthLabConstants.py:234 SynthLab/SynthLabConstants.py:245
+#: SynthLab/SynthLabConstants.py:256 SynthLab/SynthLabConstants.py:268
+#: SynthLab/SynthLabConstants.py:279 SynthLab/SynthLabConstants.py:291
+#: SynthLab/SynthLabConstants.py:303 SynthLab/SynthLabConstants.py:314
+#: SynthLab/SynthLabConstants.py:325 SynthLab/SynthLabConstants.py:347
+msgid "The overall gain (volume) of the sound source."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:166
msgid "Buzz"
msgstr ""
-#: Resources/tooltips_en.py:187
+#: SynthLab/SynthLabConstants.py:168
msgid "Number of harmonics"
msgstr ""
-#: Resources/tooltips_en.py:188
+#: SynthLab/SynthLabConstants.py:169
msgid "Filter Slope"
msgstr ""
-#: Resources/tooltips_en.py:191
+#: SynthLab/SynthLabConstants.py:177
msgid "VCO"
msgstr ""
-#: Resources/tooltips_en.py:194
+#: SynthLab/SynthLabConstants.py:180
msgid "Square"
msgstr ""
-#: Resources/tooltips_en.py:198
+#: SynthLab/SynthLabConstants.py:189
msgid "Pluck"
msgstr ""
-#: Resources/tooltips_en.py:200 Resources/tooltips_en.py:266
+#: SynthLab/SynthLabConstants.py:191 SynthLab/SynthLabConstants.py:307
msgid "Lowpass Filter"
msgstr ""
-#: Resources/tooltips_en.py:201
+#: SynthLab/SynthLabConstants.py:192
msgid "Vibrato"
msgstr ""
-#: Resources/tooltips_en.py:204
+#: SynthLab/SynthLabConstants.py:200
msgid "Noise"
msgstr ""
-#: Resources/tooltips_en.py:205 Resources/tooltips_en.py:253
+#: SynthLab/SynthLabConstants.py:201 SynthLab/SynthLabConstants.py:284
msgid "Type"
msgstr ""
-#: Resources/tooltips_en.py:206
+#: SynthLab/SynthLabConstants.py:202
msgid "White"
msgstr ""
-#: Resources/tooltips_en.py:206
+#: SynthLab/SynthLabConstants.py:202
msgid "Pink"
msgstr ""
-#: Resources/tooltips_en.py:206
+#: SynthLab/SynthLabConstants.py:202
msgid "Gauss"
msgstr ""
-#: Resources/tooltips_en.py:208
+#: SynthLab/SynthLabConstants.py:204
msgid "Bandwith"
msgstr ""
-#: Resources/tooltips_en.py:211
+#: SynthLab/SynthLabConstants.py:212
msgid "Sound Sample"
msgstr ""
-#: Resources/tooltips_en.py:213
+#: SynthLab/SynthLabConstants.py:214
msgid "Sample Number"
msgstr ""
-#: Resources/tooltips_en.py:214
+#: SynthLab/SynthLabConstants.py:215
msgid "Sample name"
msgstr ""
-#: Resources/tooltips_en.py:218
+#: SynthLab/SynthLabConstants.py:224
msgid "Voice"
msgstr ""
-#: Resources/tooltips_en.py:220
+#: SynthLab/SynthLabConstants.py:226
msgid "Vowel"
msgstr ""
-#: Resources/tooltips_en.py:225
+#: SynthLab/SynthLabConstants.py:236
msgid "Grain"
msgstr ""
-#: Resources/tooltips_en.py:231
+#: SynthLab/SynthLabConstants.py:247
msgid "Additive Synthesis"
msgstr ""
-#: Resources/tooltips_en.py:233
+#: SynthLab/SynthLabConstants.py:249
msgid "Spread"
msgstr ""
-#: Resources/tooltips_en.py:238 Resources/tooltips_en.py:285
+#: SynthLab/SynthLabConstants.py:259 SynthLab/SynthLabConstants.py:341
msgid "Delay"
msgstr ""
-#: Resources/tooltips_en.py:241
+#: SynthLab/SynthLabConstants.py:262
msgid "Feedback"
msgstr ""
-#: Resources/tooltips_en.py:244
+#: SynthLab/SynthLabConstants.py:270
msgid "Distortion"
msgstr ""
-#: Resources/tooltips_en.py:246
+#: SynthLab/SynthLabConstants.py:272
msgid "Resonance"
msgstr ""
-#: Resources/tooltips_en.py:247
+#: SynthLab/SynthLabConstants.py:273
msgid "Distotion Level"
msgstr ""
-#: Resources/tooltips_en.py:250
+#: SynthLab/SynthLabConstants.py:281
msgid "Filter"
msgstr ""
-#: Resources/tooltips_en.py:254
-msgid "Lowpass"
-msgstr ""
-
-#: Resources/tooltips_en.py:254
-msgid "Highpass"
-msgstr ""
-
-#: Resources/tooltips_en.py:254
-msgid "Bandpass"
-msgstr ""
-
-#: Resources/tooltips_en.py:257
+#: SynthLab/SynthLabConstants.py:293
msgid "Ring Modulator"
msgstr ""
-#: Resources/tooltips_en.py:259
+#: SynthLab/SynthLabConstants.py:295
msgid "Mix"
msgstr ""
-#: Resources/tooltips_en.py:265
+#: SynthLab/SynthLabConstants.py:306
msgid "Length"
msgstr ""
-#: Resources/tooltips_en.py:267
+#: SynthLab/SynthLabConstants.py:308
msgid "Reverb Level"
msgstr ""
-#: Resources/tooltips_en.py:270
+#: SynthLab/SynthLabConstants.py:310
+msgid ""
+"Reverberation is the persistence od sound in a particular space after the "
+"original sound is removed."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:316
msgid "Harmonizer"
msgstr ""
-#: Resources/tooltips_en.py:272
+#: SynthLab/SynthLabConstants.py:318
msgid "Dry delay"
msgstr ""
-#: Resources/tooltips_en.py:276
+#: SynthLab/SynthLabConstants.py:327
msgid "Equalizer 4 bands"
msgstr ""
-#: Resources/tooltips_en.py:277
+#: SynthLab/SynthLabConstants.py:328
msgid "Band one gain"
msgstr ""
-#: Resources/tooltips_en.py:278
+#: SynthLab/SynthLabConstants.py:329
msgid "Band two gain"
msgstr ""
-#: Resources/tooltips_en.py:279
+#: SynthLab/SynthLabConstants.py:330
msgid "Band three gain"
msgstr ""
-#: Resources/tooltips_en.py:280
+#: SynthLab/SynthLabConstants.py:331
msgid "Band four gain"
msgstr ""
-#: Resources/tooltips_en.py:282
+#: SynthLab/SynthLabConstants.py:332
+msgid ""
+"A 4 band equalizer is an effect that splits the spectrum into 4 bands and "
+"allows the bands to be set at different levels."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:333
+msgid "The gain (volume) of band 1."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:334
+msgid "The gain (volume) of band 2."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:335
+msgid "The gain (volume) of band 3."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:336
+msgid "The gain (volume) of band 4."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:338
msgid "Chorus"
msgstr ""
-#: Resources/tooltips_en.py:283
+#: SynthLab/SynthLabConstants.py:339
msgid "LFO Depth"
msgstr ""
-#: Resources/tooltips_en.py:284
+#: SynthLab/SynthLabConstants.py:340
msgid "LFO Frequency"
msgstr ""
-#: Resources/tooltips_en.py:289
+#: SynthLab/SynthLabConstants.py:343
+msgid ""
+"A chorus effect is a condition in the way people perceive similar sounds "
+"coming from multiple sources."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:344
+msgid "LFO Depth: The amplitude of the LFO signal."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:345
+msgid "LFO Frequency: the frequency of the LFO signal."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:346
+msgid "Delay: The amount of delay between the two signals."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:353
msgid "lfo"
msgstr ""
-#: Resources/tooltips_en.py:290
+#: SynthLab/SynthLabConstants.py:354
msgid "rand"
msgstr ""
-#: Resources/tooltips_en.py:291
+#: SynthLab/SynthLabConstants.py:355
msgid "adsr"
msgstr ""
-#: Resources/tooltips_en.py:292
+#: SynthLab/SynthLabConstants.py:356
msgid "trackpadX"
msgstr ""
-#: Resources/tooltips_en.py:293
+#: SynthLab/SynthLabConstants.py:357
msgid "trackpadY"
msgstr ""
-#: Resources/tooltips_en.py:294
+#: SynthLab/SynthLabConstants.py:358
msgid "fm"
msgstr ""
-#: Resources/tooltips_en.py:295
+#: SynthLab/SynthLabConstants.py:359
msgid "buzz"
msgstr ""
-#: Resources/tooltips_en.py:296
+#: SynthLab/SynthLabConstants.py:360
msgid "vco"
msgstr ""
-#: Resources/tooltips_en.py:297
+#: SynthLab/SynthLabConstants.py:361
msgid "pluck"
msgstr ""
-#: Resources/tooltips_en.py:298
+#: SynthLab/SynthLabConstants.py:362
msgid "noise"
msgstr ""
-#: Resources/tooltips_en.py:299
+#: SynthLab/SynthLabConstants.py:363
msgid "sample"
msgstr ""
-#: Resources/tooltips_en.py:300
+#: SynthLab/SynthLabConstants.py:364
msgid "voice"
msgstr ""
-#: Resources/tooltips_en.py:301
+#: SynthLab/SynthLabConstants.py:365
msgid "grain"
msgstr ""
-#: Resources/tooltips_en.py:302
+#: SynthLab/SynthLabConstants.py:366
msgid "addSynth"
msgstr ""
-#: Resources/tooltips_en.py:303
+#: SynthLab/SynthLabConstants.py:367
msgid "wguide"
msgstr ""
-#: Resources/tooltips_en.py:304
+#: SynthLab/SynthLabConstants.py:368
msgid "distort"
msgstr ""
-#: Resources/tooltips_en.py:305
+#: SynthLab/SynthLabConstants.py:369
msgid "filter"
msgstr ""
-#: Resources/tooltips_en.py:306
+#: SynthLab/SynthLabConstants.py:370
msgid "ring"
msgstr ""
-#: Resources/tooltips_en.py:307
+#: SynthLab/SynthLabConstants.py:371
msgid "reverb"
msgstr ""
-#: Resources/tooltips_en.py:308
+#: SynthLab/SynthLabConstants.py:372
msgid "harmon"
msgstr ""
-#: Resources/tooltips_en.py:309
+#: SynthLab/SynthLabConstants.py:373
msgid "eq4band"
msgstr ""
-#: Resources/tooltips_en.py:310
+#: SynthLab/SynthLabConstants.py:374
msgid "chorus"
msgstr ""
@@ -899,92 +1139,108 @@ msgstr ""
msgid "Duration: "
msgstr ""
-#: SynthLab/SynthLabToolbars.py:43
+#: SynthLab/SynthLabToolbars.py:30
+msgid " s."
+msgstr ""
+
+#: SynthLab/SynthLabToolbars.py:50
msgid "Duration"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:51
+#: SynthLab/SynthLabToolbars.py:58
msgid "Record Synth sound into slot 1"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:57
+#: SynthLab/SynthLabToolbars.py:64
msgid "Record Synth sound into slot 2"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:63
+#: SynthLab/SynthLabToolbars.py:70
msgid "Record Synth sound into slot 3"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:69
+#: SynthLab/SynthLabToolbars.py:76
msgid "Record Synth sound into slot 4"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:75
+#: SynthLab/SynthLabToolbars.py:82
msgid "Record Synth sound into slot 5"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:81
+#: SynthLab/SynthLabToolbars.py:88
msgid "Record Synth sound into slot 6"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:89
+#: SynthLab/SynthLabToolbars.py:96
msgid "Reset the worktable"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:109
+#: SynthLab/SynthLabToolbars.py:116
msgid "Preset 1"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:115
+#: SynthLab/SynthLabToolbars.py:122
msgid "Preset 2"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:121
+#: SynthLab/SynthLabToolbars.py:128
msgid "Preset 3"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:127
+#: SynthLab/SynthLabToolbars.py:134
msgid "Preset 4"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:133
+#: SynthLab/SynthLabToolbars.py:140
msgid "Preset 5"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:139
+#: SynthLab/SynthLabToolbars.py:146
msgid "Preset 6"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:145
+#: SynthLab/SynthLabToolbars.py:152
msgid "Preset 7"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:151
+#: SynthLab/SynthLabToolbars.py:158
msgid "Preset 8"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:157
+#: SynthLab/SynthLabToolbars.py:164
msgid "Preset 9"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:163
+#: SynthLab/SynthLabToolbars.py:170
msgid "Preset 10"
msgstr ""
-#: SynthLab/SynthLabWindow.py:66
+#: SynthLab/SynthLabWindow.py:65
msgid "Main"
msgstr ""
-#: SynthLab/SynthLabWindow.py:67
+#: SynthLab/SynthLabWindow.py:66
msgid "Presets"
msgstr ""
-#: Welcome.py:32
-msgid "Help"
+#: SynthLab/SynthLabWindow.py:738
+msgid ": controller output"
msgstr ""
-#: miniTamTam/miniTamTamMain.py:150
-msgid "Record"
+#: SynthLab/SynthLabWindow.py:750
+msgid ": sound output"
+msgstr ""
+
+#: SynthLab/SynthLabWindow.py:753
+msgid ": sound input"
+msgstr ""
+
+#: SynthLab/SynthLabWindow.py:755
+msgid "Send sound to the speakers"
+msgstr ""
+
+#: Welcome.py:32
+msgid "Help"
msgstr ""
#: miniTamTam/miniToolbars.py:104
diff --git a/po/de.po b/po/de.po
index 4117c22..3fffb85 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,11 +1,40 @@
# This file is distributed under the same license as the PACKAGE package.
# Fabian Affolter <fab@fedoraproject.org>, 2007.
#
+#: SynthLab/SynthLabConstants.py:114 SynthLab/SynthLabConstants.py:117
+#: SynthLab/SynthLabConstants.py:171 SynthLab/SynthLabConstants.py:172
+#: SynthLab/SynthLabConstants.py:173 SynthLab/SynthLabConstants.py:174
+#: SynthLab/SynthLabConstants.py:183 SynthLab/SynthLabConstants.py:184
+#: SynthLab/SynthLabConstants.py:185 SynthLab/SynthLabConstants.py:186
+#: SynthLab/SynthLabConstants.py:194 SynthLab/SynthLabConstants.py:195
+#: SynthLab/SynthLabConstants.py:196 SynthLab/SynthLabConstants.py:197
+#: SynthLab/SynthLabConstants.py:206 SynthLab/SynthLabConstants.py:207
+#: SynthLab/SynthLabConstants.py:208 SynthLab/SynthLabConstants.py:209
+#: SynthLab/SynthLabConstants.py:218 SynthLab/SynthLabConstants.py:219
+#: SynthLab/SynthLabConstants.py:220 SynthLab/SynthLabConstants.py:221
+#: SynthLab/SynthLabConstants.py:230 SynthLab/SynthLabConstants.py:231
+#: SynthLab/SynthLabConstants.py:232 SynthLab/SynthLabConstants.py:233
+#: SynthLab/SynthLabConstants.py:241 SynthLab/SynthLabConstants.py:242
+#: SynthLab/SynthLabConstants.py:243 SynthLab/SynthLabConstants.py:244
+#: SynthLab/SynthLabConstants.py:252 SynthLab/SynthLabConstants.py:253
+#: SynthLab/SynthLabConstants.py:254 SynthLab/SynthLabConstants.py:255
+#: SynthLab/SynthLabConstants.py:264 SynthLab/SynthLabConstants.py:265
+#: SynthLab/SynthLabConstants.py:266 SynthLab/SynthLabConstants.py:267
+#: SynthLab/SynthLabConstants.py:275 SynthLab/SynthLabConstants.py:276
+#: SynthLab/SynthLabConstants.py:277 SynthLab/SynthLabConstants.py:278
+#: SynthLab/SynthLabConstants.py:287 SynthLab/SynthLabConstants.py:288
+#: SynthLab/SynthLabConstants.py:289 SynthLab/SynthLabConstants.py:290
+#: SynthLab/SynthLabConstants.py:299 SynthLab/SynthLabConstants.py:300
+#: SynthLab/SynthLabConstants.py:301 SynthLab/SynthLabConstants.py:302
+#: SynthLab/SynthLabConstants.py:311 SynthLab/SynthLabConstants.py:312
+#: SynthLab/SynthLabConstants.py:313 SynthLab/SynthLabConstants.py:321
+#: SynthLab/SynthLabConstants.py:322 SynthLab/SynthLabConstants.py:323
+#: SynthLab/SynthLabConstants.py:324
msgid ""
msgstr ""
"Project-Id-Version: tamtam\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-07-31 11:45-0400\n"
+"POT-Creation-Date: 2007-08-14 17:15-0400\n"
"PO-Revision-Date: 2007-07-30 11:32+0100\n"
"Last-Translator: Fabian Affolter <fab@fedoraproject.org>\n"
"Language-Team: German <fedora-trans-de@redhat.com>\n"
@@ -14,117 +43,232 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: German\n"
-#: Edit/EditToolbars.py:30 Resources/tooltips_en.py:114
+#: Edit/EditToolbars.py:41 Resources/tooltips_en.py:114
#: miniTamTam/miniToolbars.py:31
msgid "Play / Stop"
msgstr "Abspielen / Stoppen"
-#: Edit/EditToolbars.py:44
-#, fuzzy
-msgid "Generation"
-msgstr "Generieren"
+#: Edit/EditToolbars.py:62 miniTamTam/miniTamTamMain.py:150
+msgid "Record"
+msgstr "Aufnehmen"
-#: Edit/EditToolbars.py:54
+#: Edit/EditToolbars.py:72
msgid "Draw Tool"
msgstr "Zeichnungs-Werkzeuge"
-#: Edit/EditToolbars.py:64
+#: Edit/EditToolbars.py:88
msgid "Volume / Tempo"
msgstr "Lautstärke / Tempo"
-#: Edit/EditToolbars.py:72
+#: Edit/EditToolbars.py:96 Edit/EditToolbars.py:534
+#, fuzzy
+msgid "Generation"
+msgstr "Generieren"
+
+#: Edit/EditToolbars.py:104
msgid "Properties"
msgstr "Eigenschaften"
-#: Edit/EditToolbars.py:93
+#: Edit/EditToolbars.py:169
#, fuzzy
-msgid "Non-continuous"
+msgid "Continuous"
msgstr "Nicht fortlaufend"
-#: Edit/EditToolbars.py:99
+#: Edit/EditToolbars.py:176
msgid "1/2"
msgstr "1/2"
-#: Edit/EditToolbars.py:100
+#: Edit/EditToolbars.py:176
msgid "1/4"
msgstr "1/4"
-#: Edit/EditToolbars.py:101
+#: Edit/EditToolbars.py:176
msgid "1/8"
msgstr "1/8"
-#: Edit/EditToolbars.py:102
+#: Edit/EditToolbars.py:176
msgid "1/16"
msgstr "1/16"
-#: Edit/EditToolbars.py:103
+#: Edit/EditToolbars.py:176
msgid "1/32"
msgstr "1/32"
-#: Edit/EditToolbars.py:124 Resources/tooltips_en.py:111
+#: Edit/EditToolbars.py:209 Resources/tooltips_en.py:111
msgid "Volume"
msgstr "Volume"
-#: Edit/EditToolbars.py:134 Resources/tooltips_en.py:49
+#: Edit/EditToolbars.py:220 Resources/tooltips_en.py:49
#: Resources/tooltips_en.py:120
msgid "Tempo"
msgstr "Tempo"
-#: Edit/EditToolbars.py:191
+#: Edit/EditToolbars.py:290
msgid "Scale: "
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:65
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:65
msgid "Major scale"
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:66
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:66
msgid "Harmonic minor scale"
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:67
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:67
msgid "Natural minor scale"
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:68
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:68
msgid "Phrygian scale"
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:69
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:69
msgid "Dorian scale"
msgstr ""
-#: Edit/EditToolbars.py:193 Resources/tooltips_en.py:70
+#: Edit/EditToolbars.py:292 Resources/tooltips_en.py:70
msgid "Lydian scale"
msgstr ""
-#: Edit/EditToolbars.py:193
+#: Edit/EditToolbars.py:292
msgid "Myxolidian scale"
msgstr ""
-#: Edit/EditToolbars.py:197
+#: Edit/EditToolbars.py:299
msgid "Mode: "
msgstr ""
-#: Edit/EditToolbars.py:199 Resources/tooltips_en.py:61
-#: Resources/tooltips_en.py:98
+#: Edit/EditToolbars.py:301 Edit/EditToolbars.py:392
+#: Resources/tooltips_en.py:61 Resources/tooltips_en.py:98
msgid "Drunk"
msgstr ""
-#: Edit/EditToolbars.py:199 Resources/tooltips_en.py:62
+#: Edit/EditToolbars.py:301 Edit/EditToolbars.py:392
+#: Resources/tooltips_en.py:62
msgid "Drone and Jump"
msgstr ""
-#: Edit/EditToolbars.py:199 Resources/tooltips_en.py:63
-#: Resources/tooltips_en.py:100
+#: Edit/EditToolbars.py:301 Edit/EditToolbars.py:392
+#: Resources/tooltips_en.py:63 Resources/tooltips_en.py:100
msgid "Repeater"
msgstr ""
-#: Edit/EditToolbars.py:199 Resources/tooltips_en.py:64
+#: Edit/EditToolbars.py:301 Resources/tooltips_en.py:64
#: Resources/tooltips_en.py:101
msgid "Loop segments"
msgstr "Schlaufen-Segmente"
+#: Edit/EditToolbars.py:391
+#, fuzzy
+msgid "None"
+msgstr "Geräusch"
+
+#: Edit/EditToolbars.py:391 SynthLab/SynthLabConstants.py:285
+msgid "Lowpass"
+msgstr ""
+
+#: Edit/EditToolbars.py:391 SynthLab/SynthLabConstants.py:285
+msgid "Bandpass"
+msgstr ""
+
+#: Edit/EditToolbars.py:391 SynthLab/SynthLabConstants.py:285
+msgid "Highpass"
+msgstr ""
+
+#: Edit/EditToolbars.py:392 Resources/tooltips_en.py:97
+msgid "Line"
+msgstr "Linie"
+
+#: Edit/EditToolbars.py:392
+#, fuzzy
+msgid "Loop Segments"
+msgstr "Schlaufen-Segmente"
+
+#: Edit/EditToolbars.py:393
+msgid "Purple"
+msgstr ""
+
+#: Edit/EditToolbars.py:393
+#, fuzzy
+msgid "Green"
+msgstr "Hauptfenster"
+
+#: Edit/EditToolbars.py:393
+#, fuzzy
+msgid "Blue"
+msgstr "Volume"
+
+#: Edit/EditToolbars.py:393
+msgid "Yellow"
+msgstr ""
+
+#: Edit/EditToolbars.py:406
+msgid "Grid division: "
+msgstr ""
+
+#: Edit/EditToolbars.py:417
+msgid "Page color: "
+msgstr ""
+
+#: Edit/EditToolbars.py:427
+#, fuzzy
+msgid "Transposition: "
+msgstr "Transponiere hinunter"
+
+#: Edit/EditToolbars.py:441
+#, fuzzy
+msgid "Volume: "
+msgstr "Volume"
+
+#: Edit/EditToolbars.py:455
+msgid "Pan: "
+msgstr ""
+
+#: Edit/EditToolbars.py:469
+#, fuzzy
+msgid "Reverb: "
+msgstr "Hall"
+
+#: Edit/EditToolbars.py:483
+#, fuzzy
+msgid "Attack duration: "
+msgstr "Abkling-Dauer"
+
+#: Edit/EditToolbars.py:497
+#, fuzzy
+msgid "Decay duration: "
+msgstr "Abkling-Dauer"
+
+#: Edit/EditToolbars.py:511
+#, fuzzy
+msgid "Filter Type: "
+msgstr "Filter"
+
+#: Edit/EditToolbars.py:520
+msgid "Filter cutoff: "
+msgstr ""
+
+#: Edit/EditToolbars.py:537
+#, fuzzy
+msgid "Type: "
+msgstr "Typ"
+
+#: Edit/EditToolbars.py:547
+#, fuzzy
+msgid "Minimum: "
+msgstr "Minimum"
+
+#: Edit/EditToolbars.py:556
+#, fuzzy
+msgid "Maximum: "
+msgstr "Maximum"
+
+#: Edit/EditToolbars.py:565
+#, fuzzy
+msgid "Random: "
+msgstr "Zufällig"
+
#: Edit/MainWindow.py:59
msgid "Compose"
msgstr "Zusammenstellen"
@@ -253,7 +397,7 @@ msgstr "Speichere als .ogg"
msgid "Rewind"
msgstr "Zurückspulen"
-#: Resources/tooltips_en.py:46 Resources/tooltips_en.py:141
+#: Resources/tooltips_en.py:46
msgid "Save to journal and quit"
msgstr ""
@@ -320,7 +464,7 @@ msgid "Panoramisation"
msgstr ""
#: Resources/tooltips_en.py:83 Resources/tooltips_en.py:113
-#: Resources/tooltips_en.py:264 miniTamTam/miniToolbars.py:83
+#: SynthLab/SynthLabConstants.py:305 miniTamTam/miniToolbars.py:83
msgid "Reverb"
msgstr "Hall"
@@ -355,10 +499,6 @@ msgstr ""
msgid "Open algorithmic generator"
msgstr "Öffne algorhytmischen Generator"
-#: Resources/tooltips_en.py:97
-msgid "Line"
-msgstr "Linie"
-
#: Resources/tooltips_en.py:99
msgid "Drone and jump"
msgstr ""
@@ -443,456 +583,570 @@ msgstr ""
msgid "Record mic into slot 4"
msgstr ""
-#: Resources/tooltips_en.py:132
+#: SynthLab/SynthLabConstants.py:90
msgid "Source"
msgstr "Quelle"
-#: Resources/tooltips_en.py:133
+#: SynthLab/SynthLabConstants.py:91
msgid "Effect"
msgstr "Effekt"
-#: Resources/tooltips_en.py:134
+#: SynthLab/SynthLabConstants.py:92
msgid "Control"
msgstr "Kontrolle"
-#: Resources/tooltips_en.py:135
+#: SynthLab/SynthLabConstants.py:93
msgid "Sound Output"
msgstr "Sound-Ausgabe"
-#: Resources/tooltips_en.py:136
-msgid "Sound Duration"
-msgstr "Sound-Dauer"
-
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 1"
-msgstr "Aufnahmen in Slot 1"
-
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 2"
-msgstr "Aufnahmen in Slot 2"
-
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 3"
-msgstr "Aufnahmen in Slot 3"
-
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 4"
-msgstr "Aufnahmen in Slot 4"
-
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 5"
-msgstr "Aufnahmen in Slot 5"
-
-#: Resources/tooltips_en.py:137
-msgid "Record into slot 6"
-msgstr "Aufnahmen in Slot 6"
-
-#: Resources/tooltips_en.py:138
-msgid "Save"
-msgstr "Speichern"
-
-#: Resources/tooltips_en.py:139
-msgid "Load"
-msgstr "Lade"
-
-#: Resources/tooltips_en.py:140
-msgid "Save to miniTamTam"
-msgstr "Datei sichern nach miniTamTam"
-
-#: Resources/tooltips_en.py:142
-msgid "Reset"
-msgstr "Zurücksetzen"
-
-#: Resources/tooltips_en.py:145
+#: SynthLab/SynthLabConstants.py:96
msgid "LFO"
msgstr "LFO"
-#: Resources/tooltips_en.py:146
+#: SynthLab/SynthLabConstants.py:97
msgid "Amplitude"
msgstr "Amplitude"
-#: Resources/tooltips_en.py:147
+#: SynthLab/SynthLabConstants.py:98
msgid "Frequency"
msgstr "Frequenz"
-#: Resources/tooltips_en.py:148 Resources/tooltips_en.py:234
+#: SynthLab/SynthLabConstants.py:99 SynthLab/SynthLabConstants.py:250
msgid "Waveform"
msgstr ""
-#: Resources/tooltips_en.py:149
+#: SynthLab/SynthLabConstants.py:100
msgid "Sine"
msgstr ""
-#: Resources/tooltips_en.py:149 Resources/tooltips_en.py:194
+#: SynthLab/SynthLabConstants.py:100 SynthLab/SynthLabConstants.py:180
msgid "Triangle"
msgstr ""
-#: Resources/tooltips_en.py:149
+#: SynthLab/SynthLabConstants.py:100
msgid "Bi-Square"
msgstr "Bi-Quadrat"
-#: Resources/tooltips_en.py:149
+#: SynthLab/SynthLabConstants.py:100
msgid "Uni-Square"
msgstr "Uni-Quadrat"
-#: Resources/tooltips_en.py:149 Resources/tooltips_en.py:194
+#: SynthLab/SynthLabConstants.py:100 SynthLab/SynthLabConstants.py:180
msgid "Sawtooth"
msgstr ""
-#: Resources/tooltips_en.py:149
+#: SynthLab/SynthLabConstants.py:100
msgid "Sawtooth-down"
msgstr ""
-#: Resources/tooltips_en.py:150
+#: SynthLab/SynthLabConstants.py:101
msgid "Offset"
msgstr ""
-#: Resources/tooltips_en.py:152
+#: SynthLab/SynthLabConstants.py:102
+msgid ""
+"A low frequency oscillation (LFO) is a signal usually below 20 Hz which "
+"creates a pulsating rythm rather than a audible tone. This signal is "
+"commonly used to control sound parameters."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:103
+msgid ""
+"The amplitude (volume) of the LFO signal. More amplitude means the effect "
+"will be more noticeable."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:104
+msgid "The speed of the signal beteen 0 Hz and 20 hz."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:105
+msgid "The type of waveform that will be used for the LFO."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:106
+msgid "Offset: "
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:108
msgid "Random"
msgstr "Zufällig"
-#: Resources/tooltips_en.py:153
+#: SynthLab/SynthLabConstants.py:109
msgid "Minimum"
msgstr "Minimum"
-#: Resources/tooltips_en.py:154
+#: SynthLab/SynthLabConstants.py:110
msgid "Maximum"
msgstr "Maximum"
-#: Resources/tooltips_en.py:156
+#: SynthLab/SynthLabConstants.py:112
msgid "Seed"
msgstr ""
-#: Resources/tooltips_en.py:158
+#: SynthLab/SynthLabConstants.py:113
+msgid ""
+"A random number generator is a computational device designed to generate a "
+"sequence of numbers that lack any pattern."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:115
+msgid "The minimum value that can be generated."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:116
+msgid "The maximum value that can be generated."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:119
msgid "Envelope"
msgstr "Umhüllung"
-#: Resources/tooltips_en.py:159
+#: SynthLab/SynthLabConstants.py:120
msgid "Attack"
msgstr "Angriff"
-#: Resources/tooltips_en.py:160
+#: SynthLab/SynthLabConstants.py:121
msgid "Decay"
msgstr ""
-#: Resources/tooltips_en.py:161
+#: SynthLab/SynthLabConstants.py:122
msgid "Sustain"
msgstr ""
-#: Resources/tooltips_en.py:162
+#: SynthLab/SynthLabConstants.py:123
msgid "Release"
msgstr "Version"
-#: Resources/tooltips_en.py:164
+#: SynthLab/SynthLabConstants.py:124
+msgid ""
+"An ADSR envelope is a component of many sythesizers, samplers, and other "
+"electronic musical instruments. Its function is to modulate some aspect of "
+"the instrument's sound - often its volume - over time."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:125
+msgid "How quickly the sound reaches full volume after the sound is activated."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:126
+msgid ""
+"How quickly the sound drops to the sustain level after the initial peak."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:127
+msgid ""
+"The \"constant\" volume that the sound takes after decay until the note is "
+"released."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:128
+msgid "How quickly the sound fades when a note ends."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:130
msgid "Trackpad X"
msgstr ""
-#: Resources/tooltips_en.py:167
+#: SynthLab/SynthLabConstants.py:133
msgid "Scaling"
msgstr "Skalieren"
-#: Resources/tooltips_en.py:168
+#: SynthLab/SynthLabConstants.py:134
msgid "Lin"
msgstr ""
-#: Resources/tooltips_en.py:168
+#: SynthLab/SynthLabConstants.py:134
msgid "Log"
msgstr "Log"
-#: Resources/tooltips_en.py:169
+#: SynthLab/SynthLabConstants.py:135
msgid "Poll time"
msgstr "Sammelzeit"
-#: Resources/tooltips_en.py:171
+#: SynthLab/SynthLabConstants.py:136
+msgid ""
+"The XO trackpad can be used to control sound parameters. This is the x axis, "
+"from left to right."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:137 SynthLab/SynthLabConstants.py:149
+msgid "The minimum value the trackpad will send."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:138 SynthLab/SynthLabConstants.py:150
+msgid "The maximum value de trackpad will send."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:139 SynthLab/SynthLabConstants.py:151
+msgid "The type of scaling, logarithmic or linear."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:140 SynthLab/SynthLabConstants.py:152
+msgid "The time interval between each event coming from the trackpad."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:142
msgid "Trackpad Y"
msgstr ""
-#: Resources/tooltips_en.py:179
+#: SynthLab/SynthLabConstants.py:148
+msgid ""
+"The XO trackpad can be used to control sound parameters. This is the y axis, "
+"from top to bottom."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:155
msgid "FM"
msgstr ""
-#: Resources/tooltips_en.py:180
+#: SynthLab/SynthLabConstants.py:156
msgid "Carrier Frequency"
msgstr "Träger-Frequenz"
-#: Resources/tooltips_en.py:181
+#: SynthLab/SynthLabConstants.py:157
msgid "Modulator Frequency"
msgstr "Modulator-Frequenz"
-#: Resources/tooltips_en.py:182 Resources/tooltips_en.py:228
+#: SynthLab/SynthLabConstants.py:158 SynthLab/SynthLabConstants.py:239
msgid "Index"
msgstr "Index"
-#: Resources/tooltips_en.py:183
+#: SynthLab/SynthLabConstants.py:159
msgid "Gain"
msgstr ""
-#: Resources/tooltips_en.py:185
+#: SynthLab/SynthLabConstants.py:160
+msgid ""
+"Frequency modulation synthesis is a form of audio synthesis where the timbre "
+"of a simple waveform is changed by frequency modulating it with a modulating "
+"frequency that is also in the audio range, resulting in a more complex "
+"waveform and a different-sounding tone."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:161
+msgid "The main waveform frequency."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:162
+msgid "The frequency of the waveform that will modulate the Carrier waveform."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:163
+msgid "The variation in frequency of the Carrier waveform."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:164 SynthLab/SynthLabConstants.py:175
+#: SynthLab/SynthLabConstants.py:187 SynthLab/SynthLabConstants.py:198
+#: SynthLab/SynthLabConstants.py:210 SynthLab/SynthLabConstants.py:222
+#: SynthLab/SynthLabConstants.py:234 SynthLab/SynthLabConstants.py:245
+#: SynthLab/SynthLabConstants.py:256 SynthLab/SynthLabConstants.py:268
+#: SynthLab/SynthLabConstants.py:279 SynthLab/SynthLabConstants.py:291
+#: SynthLab/SynthLabConstants.py:303 SynthLab/SynthLabConstants.py:314
+#: SynthLab/SynthLabConstants.py:325 SynthLab/SynthLabConstants.py:347
+msgid "The overall gain (volume) of the sound source."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:166
msgid "Buzz"
msgstr ""
-#: Resources/tooltips_en.py:187
+#: SynthLab/SynthLabConstants.py:168
msgid "Number of harmonics"
msgstr "Anzahl der Harmonien"
-#: Resources/tooltips_en.py:188
+#: SynthLab/SynthLabConstants.py:169
msgid "Filter Slope"
msgstr ""
-#: Resources/tooltips_en.py:191
+#: SynthLab/SynthLabConstants.py:177
msgid "VCO"
msgstr ""
-#: Resources/tooltips_en.py:194
+#: SynthLab/SynthLabConstants.py:180
msgid "Square"
msgstr "Quadrat"
-#: Resources/tooltips_en.py:198
+#: SynthLab/SynthLabConstants.py:189
msgid "Pluck"
msgstr ""
-#: Resources/tooltips_en.py:200 Resources/tooltips_en.py:266
+#: SynthLab/SynthLabConstants.py:191 SynthLab/SynthLabConstants.py:307
msgid "Lowpass Filter"
msgstr ""
-#: Resources/tooltips_en.py:201
+#: SynthLab/SynthLabConstants.py:192
msgid "Vibrato"
msgstr ""
-#: Resources/tooltips_en.py:204
+#: SynthLab/SynthLabConstants.py:200
msgid "Noise"
msgstr "Geräusch"
-#: Resources/tooltips_en.py:205 Resources/tooltips_en.py:253
+#: SynthLab/SynthLabConstants.py:201 SynthLab/SynthLabConstants.py:284
msgid "Type"
msgstr "Typ"
-#: Resources/tooltips_en.py:206
+#: SynthLab/SynthLabConstants.py:202
msgid "White"
msgstr "Weiss"
-#: Resources/tooltips_en.py:206
+#: SynthLab/SynthLabConstants.py:202
msgid "Pink"
msgstr "Pink"
-#: Resources/tooltips_en.py:206
+#: SynthLab/SynthLabConstants.py:202
msgid "Gauss"
msgstr "Gauss"
-#: Resources/tooltips_en.py:208
+#: SynthLab/SynthLabConstants.py:204
msgid "Bandwith"
msgstr "Bandbreite"
-#: Resources/tooltips_en.py:211
+#: SynthLab/SynthLabConstants.py:212
msgid "Sound Sample"
msgstr "Abtastrate"
-#: Resources/tooltips_en.py:213
+#: SynthLab/SynthLabConstants.py:214
msgid "Sample Number"
msgstr ""
-#: Resources/tooltips_en.py:214
+#: SynthLab/SynthLabConstants.py:215
msgid "Sample name"
msgstr ""
-#: Resources/tooltips_en.py:218
+#: SynthLab/SynthLabConstants.py:224
msgid "Voice"
msgstr ""
-#: Resources/tooltips_en.py:220
+#: SynthLab/SynthLabConstants.py:226
msgid "Vowel"
msgstr ""
-#: Resources/tooltips_en.py:225
+#: SynthLab/SynthLabConstants.py:236
#, fuzzy
msgid "Grain"
msgstr "Hauptfenster"
-#: Resources/tooltips_en.py:231
+#: SynthLab/SynthLabConstants.py:247
msgid "Additive Synthesis"
msgstr ""
-#: Resources/tooltips_en.py:233
+#: SynthLab/SynthLabConstants.py:249
msgid "Spread"
msgstr ""
-#: Resources/tooltips_en.py:238 Resources/tooltips_en.py:285
+#: SynthLab/SynthLabConstants.py:259 SynthLab/SynthLabConstants.py:341
msgid "Delay"
msgstr "Verzögerung"
-#: Resources/tooltips_en.py:241
+#: SynthLab/SynthLabConstants.py:262
msgid "Feedback"
msgstr "Rückmeldung"
-#: Resources/tooltips_en.py:244
+#: SynthLab/SynthLabConstants.py:270
msgid "Distortion"
msgstr "Verzerrung"
-#: Resources/tooltips_en.py:246
+#: SynthLab/SynthLabConstants.py:272
msgid "Resonance"
msgstr ""
-#: Resources/tooltips_en.py:247
+#: SynthLab/SynthLabConstants.py:273
msgid "Distotion Level"
msgstr "Verzerrungs-Stufe"
-#: Resources/tooltips_en.py:250
+#: SynthLab/SynthLabConstants.py:281
msgid "Filter"
msgstr "Filter"
-#: Resources/tooltips_en.py:254
-msgid "Lowpass"
-msgstr ""
-
-#: Resources/tooltips_en.py:254
-msgid "Highpass"
-msgstr ""
-
-#: Resources/tooltips_en.py:254
-msgid "Bandpass"
-msgstr ""
-
-#: Resources/tooltips_en.py:257
+#: SynthLab/SynthLabConstants.py:293
msgid "Ring Modulator"
msgstr ""
-#: Resources/tooltips_en.py:259
+#: SynthLab/SynthLabConstants.py:295
msgid "Mix"
msgstr "Mix"
-#: Resources/tooltips_en.py:265
+#: SynthLab/SynthLabConstants.py:306
msgid "Length"
msgstr "Länge"
-#: Resources/tooltips_en.py:267
+#: SynthLab/SynthLabConstants.py:308
msgid "Reverb Level"
msgstr ""
-#: Resources/tooltips_en.py:270
+#: SynthLab/SynthLabConstants.py:310
+msgid ""
+"Reverberation is the persistence od sound in a particular space after the "
+"original sound is removed."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:316
msgid "Harmonizer"
msgstr "Harmonizer"
-#: Resources/tooltips_en.py:272
+#: SynthLab/SynthLabConstants.py:318
msgid "Dry delay"
msgstr ""
-#: Resources/tooltips_en.py:276
+#: SynthLab/SynthLabConstants.py:327
msgid "Equalizer 4 bands"
msgstr ""
-#: Resources/tooltips_en.py:277
+#: SynthLab/SynthLabConstants.py:328
msgid "Band one gain"
msgstr ""
-#: Resources/tooltips_en.py:278
+#: SynthLab/SynthLabConstants.py:329
msgid "Band two gain"
msgstr ""
-#: Resources/tooltips_en.py:279
+#: SynthLab/SynthLabConstants.py:330
msgid "Band three gain"
msgstr ""
-#: Resources/tooltips_en.py:280
+#: SynthLab/SynthLabConstants.py:331
msgid "Band four gain"
msgstr ""
-#: Resources/tooltips_en.py:282
+#: SynthLab/SynthLabConstants.py:332
+msgid ""
+"A 4 band equalizer is an effect that splits the spectrum into 4 bands and "
+"allows the bands to be set at different levels."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:333
+msgid "The gain (volume) of band 1."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:334
+msgid "The gain (volume) of band 2."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:335
+msgid "The gain (volume) of band 3."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:336
+msgid "The gain (volume) of band 4."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:338
msgid "Chorus"
msgstr "Chorus"
-#: Resources/tooltips_en.py:283
+#: SynthLab/SynthLabConstants.py:339
msgid "LFO Depth"
msgstr ""
-#: Resources/tooltips_en.py:284
+#: SynthLab/SynthLabConstants.py:340
msgid "LFO Frequency"
msgstr "LFO-Frequenz"
-#: Resources/tooltips_en.py:289
+#: SynthLab/SynthLabConstants.py:343
+msgid ""
+"A chorus effect is a condition in the way people perceive similar sounds "
+"coming from multiple sources."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:344
+msgid "LFO Depth: The amplitude of the LFO signal."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:345
+msgid "LFO Frequency: the frequency of the LFO signal."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:346
+msgid "Delay: The amount of delay between the two signals."
+msgstr ""
+
+#: SynthLab/SynthLabConstants.py:353
msgid "lfo"
msgstr ""
-#: Resources/tooltips_en.py:290
+#: SynthLab/SynthLabConstants.py:354
msgid "rand"
msgstr ""
-#: Resources/tooltips_en.py:291
+#: SynthLab/SynthLabConstants.py:355
msgid "adsr"
msgstr ""
-#: Resources/tooltips_en.py:292
+#: SynthLab/SynthLabConstants.py:356
msgid "trackpadX"
msgstr ""
-#: Resources/tooltips_en.py:293
+#: SynthLab/SynthLabConstants.py:357
msgid "trackpadY"
msgstr ""
-#: Resources/tooltips_en.py:294
+#: SynthLab/SynthLabConstants.py:358
msgid "fm"
msgstr "fm"
-#: Resources/tooltips_en.py:295
+#: SynthLab/SynthLabConstants.py:359
msgid "buzz"
msgstr ""
-#: Resources/tooltips_en.py:296
+#: SynthLab/SynthLabConstants.py:360
msgid "vco"
msgstr ""
-#: Resources/tooltips_en.py:297
+#: SynthLab/SynthLabConstants.py:361
msgid "pluck"
msgstr ""
-#: Resources/tooltips_en.py:298
+#: SynthLab/SynthLabConstants.py:362
msgid "noise"
msgstr "Geräusch"
-#: Resources/tooltips_en.py:299
+#: SynthLab/SynthLabConstants.py:363
msgid "sample"
msgstr "Abtastrate"
-#: Resources/tooltips_en.py:300
+#: SynthLab/SynthLabConstants.py:364
msgid "voice"
msgstr "Stimme"
-#: Resources/tooltips_en.py:301
+#: SynthLab/SynthLabConstants.py:365
msgid "grain"
msgstr ""
-#: Resources/tooltips_en.py:302
+#: SynthLab/SynthLabConstants.py:366
msgid "addSynth"
msgstr ""
-#: Resources/tooltips_en.py:303
+#: SynthLab/SynthLabConstants.py:367
msgid "wguide"
msgstr ""
-#: Resources/tooltips_en.py:304
+#: SynthLab/SynthLabConstants.py:368
msgid "distort"
msgstr "verzerren"
-#: Resources/tooltips_en.py:305
+#: SynthLab/SynthLabConstants.py:369
msgid "filter"
msgstr "filtern"
-#: Resources/tooltips_en.py:306
+#: SynthLab/SynthLabConstants.py:370
msgid "ring"
msgstr ""
-#: Resources/tooltips_en.py:307
+#: SynthLab/SynthLabConstants.py:371
msgid "reverb"
msgstr "Hall"
-#: Resources/tooltips_en.py:308
+#: SynthLab/SynthLabConstants.py:372
msgid "harmon"
msgstr ""
-#: Resources/tooltips_en.py:309
+#: SynthLab/SynthLabConstants.py:373
msgid "eq4band"
msgstr ""
-#: Resources/tooltips_en.py:310
+#: SynthLab/SynthLabConstants.py:374
msgid "chorus"
msgstr "chorus"
@@ -900,94 +1154,112 @@ msgstr "chorus"
msgid "Duration: "
msgstr "Dauer:"
-#: SynthLab/SynthLabToolbars.py:43
+#: SynthLab/SynthLabToolbars.py:30
+msgid " s."
+msgstr ""
+
+#: SynthLab/SynthLabToolbars.py:50
msgid "Duration"
msgstr "Dauer"
-#: SynthLab/SynthLabToolbars.py:51
+#: SynthLab/SynthLabToolbars.py:58
msgid "Record Synth sound into slot 1"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:57
+#: SynthLab/SynthLabToolbars.py:64
msgid "Record Synth sound into slot 2"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:63
+#: SynthLab/SynthLabToolbars.py:70
msgid "Record Synth sound into slot 3"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:69
+#: SynthLab/SynthLabToolbars.py:76
msgid "Record Synth sound into slot 4"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:75
+#: SynthLab/SynthLabToolbars.py:82
msgid "Record Synth sound into slot 5"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:81
+#: SynthLab/SynthLabToolbars.py:88
msgid "Record Synth sound into slot 6"
msgstr ""
-#: SynthLab/SynthLabToolbars.py:89
+#: SynthLab/SynthLabToolbars.py:96
msgid "Reset the worktable"
msgstr "Arbeitsbereich zurücksetzen"
-#: SynthLab/SynthLabToolbars.py:109
+#: SynthLab/SynthLabToolbars.py:116
msgid "Preset 1"
msgstr "Anwesend 1"
-#: SynthLab/SynthLabToolbars.py:115
+#: SynthLab/SynthLabToolbars.py:122
msgid "Preset 2"
msgstr "Anwesend 2"
-#: SynthLab/SynthLabToolbars.py:121
+#: SynthLab/SynthLabToolbars.py:128
msgid "Preset 3"
msgstr "Anwesend 3"
-#: SynthLab/SynthLabToolbars.py:127
+#: SynthLab/SynthLabToolbars.py:134
msgid "Preset 4"
msgstr "Anwesend 4"
-#: SynthLab/SynthLabToolbars.py:133
+#: SynthLab/SynthLabToolbars.py:140
msgid "Preset 5"
msgstr "Anwesend 5"
-#: SynthLab/SynthLabToolbars.py:139
+#: SynthLab/SynthLabToolbars.py:146
msgid "Preset 6"
msgstr "Anwesend 6"
-#: SynthLab/SynthLabToolbars.py:145
+#: SynthLab/SynthLabToolbars.py:152
msgid "Preset 7"
msgstr "Anwesend 7"
-#: SynthLab/SynthLabToolbars.py:151
+#: SynthLab/SynthLabToolbars.py:158
msgid "Preset 8"
msgstr "Anwesend 8"
-#: SynthLab/SynthLabToolbars.py:157
+#: SynthLab/SynthLabToolbars.py:164
msgid "Preset 9"
msgstr "Anwesend 9"
-#: SynthLab/SynthLabToolbars.py:163
+#: SynthLab/SynthLabToolbars.py:170
msgid "Preset 10"
msgstr "Anwesend 10"
-#: SynthLab/SynthLabWindow.py:66
+#: SynthLab/SynthLabWindow.py:65
msgid "Main"
msgstr "Hauptfenster"
-#: SynthLab/SynthLabWindow.py:67
+#: SynthLab/SynthLabWindow.py:66
msgid "Presets"
msgstr ""
+#: SynthLab/SynthLabWindow.py:738
+msgid ": controller output"
+msgstr ""
+
+#: SynthLab/SynthLabWindow.py:750
+#, fuzzy
+msgid ": sound output"
+msgstr "Sound-Ausgabe"
+
+#: SynthLab/SynthLabWindow.py:753
+#, fuzzy
+msgid ": sound input"
+msgstr "Sound-Ausgabe"
+
+#: SynthLab/SynthLabWindow.py:755
+msgid "Send sound to the speakers"
+msgstr ""
+
#: Welcome.py:32
msgid "Help"
msgstr "Hilfe"
-#: miniTamTam/miniTamTamMain.py:150
-msgid "Record"
-msgstr "Aufnehmen"
-
#: miniTamTam/miniToolbars.py:104
msgid "Record microphone into slot 1"
msgstr ""
@@ -1016,5 +1288,38 @@ msgstr ""
msgid "Add new sound"
msgstr "Hinzufügen neuer Sound"
+#~ msgid "Sound Duration"
+#~ msgstr "Sound-Dauer"
+
+#~ msgid "Record into slot 1"
+#~ msgstr "Aufnahmen in Slot 1"
+
+#~ msgid "Record into slot 2"
+#~ msgstr "Aufnahmen in Slot 2"
+
+#~ msgid "Record into slot 3"
+#~ msgstr "Aufnahmen in Slot 3"
+
+#~ msgid "Record into slot 4"
+#~ msgstr "Aufnahmen in Slot 4"
+
+#~ msgid "Record into slot 5"
+#~ msgstr "Aufnahmen in Slot 5"
+
+#~ msgid "Record into slot 6"
+#~ msgstr "Aufnahmen in Slot 6"
+
+#~ msgid "Save"
+#~ msgstr "Speichern"
+
+#~ msgid "Load"
+#~ msgstr "Lade"
+
+#~ msgid "Save to miniTamTam"
+#~ msgstr "Datei sichern nach miniTamTam"
+
+#~ msgid "Reset"
+#~ msgstr "Zurücksetzen"
+
#~ msgid "index"
#~ msgstr "index"