diff options
author | amartin <olpc@xo-05-28-21.localdomain> | 2007-07-20 09:06:10 (GMT) |
---|---|---|
committer | amartin <olpc@xo-05-28-21.localdomain> | 2007-07-20 09:06:10 (GMT) |
commit | 1552274d1344d91f5744367e58eff9392aa5b7b9 (patch) | |
tree | 37ff86d7c97cffb703b0887f57f1fd744de19151 | |
parent | 8d3015f87bc7270572b419e184184abc139a497c (diff) | |
parent | 203bba3cf167efad03cb5b5327f7297ffdd345a6 (diff) |
Merge branch 'master' of git+ssh://amartin@dev.laptop.org/git/projects/tamtam
-rw-r--r-- | Config.py | 2 | ||||
-rwxr-xr-x | Resources/Images/helpShow0.jpg | bin | 0 -> 47067 bytes | |||
-rwxr-xr-x | Resources/Images/helpShow1.jpg | bin | 0 -> 131717 bytes | |||
-rwxr-xr-x | Resources/Images/helpShow2.jpg | bin | 0 -> 115432 bytes | |||
-rwxr-xr-x | Resources/Images/helpShow3.jpg | bin | 0 -> 103192 bytes | |||
-rwxr-xr-x | Resources/Images/helpShow4.jpg | bin | 0 -> 130566 bytes | |||
-rwxr-xr-x | Resources/Images/helpShow5.jpg | bin | 0 -> 147099 bytes | |||
-rwxr-xr-x | Resources/Images/helpShow6.jpg | bin | 0 -> 117896 bytes | |||
-rwxr-xr-x | Resources/Images/helpShow7.jpg | bin | 0 -> 132742 bytes | |||
-rwxr-xr-x | Resources/Images/helpShow8.jpg | bin | 0 -> 73756 bytes | |||
-rw-r--r-- | Resources/univorc.csd | 20 | ||||
-rw-r--r-- | SynthLab/SynthLabToolbars.py | 96 | ||||
-rw-r--r-- | SynthLab/SynthLabWindow.py | 21 | ||||
-rwxr-xr-x | TamTam.py | 12 | ||||
-rw-r--r-- | Util/LoopSettings.py | 50 | ||||
-rw-r--r-- | Welcome.py | 70 | ||||
-rw-r--r-- | icons/overrec.svg | 15 | ||||
-rw-r--r-- | icons/rec1.svg (copied from icons/micrec1.svg) | 2 | ||||
-rw-r--r-- | icons/rec2.svg (renamed from icons/micrec2.svg) | 6 | ||||
-rw-r--r-- | icons/rec3.svg (renamed from icons/micrec3.svg) | 8 | ||||
-rw-r--r-- | icons/rec4.svg (renamed from icons/micrec4.svg) | 5 | ||||
-rw-r--r-- | icons/rec5.svg (copied from icons/micrec1.svg) | 7 | ||||
-rw-r--r-- | icons/rec6.svg (renamed from icons/micrec1.svg) | 8 | ||||
-rw-r--r-- | miniTamTam/MiniSequencer.py | 4 | ||||
-rw-r--r-- | miniTamTam/miniTamTamMain.py | 21 | ||||
-rw-r--r-- | miniTamTam/miniToolbars.py | 44 |
26 files changed, 314 insertions, 77 deletions
@@ -330,7 +330,7 @@ CSOUND_MIC_RECORD = 'i5201 0 5 %d' CSOUND_UNLOAD_TABLES = 'i%d 0 0.1 %d' % (INST_FREE, len(INSTRUMENTS)) CSOUND_NOTE_OFF = 'i %s.%s .2 0.01 1. 0. 0. 0.5 %d 0 0 0 0' %('%d','%d',INSTRUMENT_TABLE_OFFSET) CSOUND_LOAD_LS_INSTRUMENT = 'f4999 0 0 -1 \"%s\" 0 0 0' -CSOUND_PLAY_LS_NOTE = 'i 5022 0 -1' +CSOUND_PLAY_LS_NOTE = 'i %i 0 -1' CSOUND_STOP_LS_NOTE = 'i 5022 0 0.5' #CSOUND COMMANDS - DEPRECATED diff --git a/Resources/Images/helpShow0.jpg b/Resources/Images/helpShow0.jpg Binary files differnew file mode 100755 index 0000000..635603a --- /dev/null +++ b/Resources/Images/helpShow0.jpg diff --git a/Resources/Images/helpShow1.jpg b/Resources/Images/helpShow1.jpg Binary files differnew file mode 100755 index 0000000..92e8473 --- /dev/null +++ b/Resources/Images/helpShow1.jpg diff --git a/Resources/Images/helpShow2.jpg b/Resources/Images/helpShow2.jpg Binary files differnew file mode 100755 index 0000000..c8fe527 --- /dev/null +++ b/Resources/Images/helpShow2.jpg diff --git a/Resources/Images/helpShow3.jpg b/Resources/Images/helpShow3.jpg Binary files differnew file mode 100755 index 0000000..2915037 --- /dev/null +++ b/Resources/Images/helpShow3.jpg diff --git a/Resources/Images/helpShow4.jpg b/Resources/Images/helpShow4.jpg Binary files differnew file mode 100755 index 0000000..1126984 --- /dev/null +++ b/Resources/Images/helpShow4.jpg diff --git a/Resources/Images/helpShow5.jpg b/Resources/Images/helpShow5.jpg Binary files differnew file mode 100755 index 0000000..5b9d5a7 --- /dev/null +++ b/Resources/Images/helpShow5.jpg diff --git a/Resources/Images/helpShow6.jpg b/Resources/Images/helpShow6.jpg Binary files differnew file mode 100755 index 0000000..61c4048 --- /dev/null +++ b/Resources/Images/helpShow6.jpg diff --git a/Resources/Images/helpShow7.jpg b/Resources/Images/helpShow7.jpg Binary files differnew file mode 100755 index 0000000..6cd6555 --- /dev/null +++ b/Resources/Images/helpShow7.jpg diff --git a/Resources/Images/helpShow8.jpg b/Resources/Images/helpShow8.jpg Binary files differnew file mode 100755 index 0000000..4201a1d --- /dev/null +++ b/Resources/Images/helpShow8.jpg diff --git a/Resources/univorc.csd b/Resources/univorc.csd index e802ebc..c5534da 100644 --- a/Resources/univorc.csd +++ b/Resources/univorc.csd @@ -779,6 +779,26 @@ gainrev = a1*0.1+gainrev tieskip: endin +/************************* +Loop points editor, simple player +*************************/ +instr 5023 + +p3 = nsamp(4999) * giScale + +a1 loscil 1, 1, 4999, 1 + +kenv adsr 0.005, 0.05, .8, 0.1 + +a1 = a1*kenv + +gaoutL = a1*0.5+gaoutL +gaoutR = a1*0.5+gaoutR + +gainrev = a1*0.1+gainrev + +endin + /**************************************************************** Soundfile player with miniTamTam's tied notes ****************************************************************/ diff --git a/SynthLab/SynthLabToolbars.py b/SynthLab/SynthLabToolbars.py new file mode 100644 index 0000000..48a565b --- /dev/null +++ b/SynthLab/SynthLabToolbars.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +import gtk +import Config + +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.toggletoolbutton import ToggleToolButton +from sugar.graphics.radiotoolbutton import RadioToolButton +from gettext import gettext as _ + +class mainToolbar(gtk.Toolbar): + def __init__(self,toolbox, synthLab): + gtk.Toolbar.__init__(self) + + def _insertSeparator(): + self.separator = gtk.SeparatorToolItem() + self.separator.set_draw(True) + self.insert(self.separator,-1) + self.separator.show() + + self.toolbox = toolbox + self.synthLab = synthLab + + self.tooltips = gtk.Tooltips() + + self.durationSliderAdj = gtk.Adjustment(2, .5, 10, .01, .01, 0) + self.durationSliderAdj.connect("value_changed" , self.synthLab.handleDuration) + self.durationSlider = gtk.HScale(adjustment = self.durationSliderAdj) + self.durationSlider.set_size_request(250,15) + self.durationSlider.set_inverted(False) + #self.durationSlider.set_draw_value(False) + self.durationSliderTool = gtk.ToolItem() + self.durationSliderTool.add(self.durationSlider) + self.insert(self.durationSliderTool, -1) + self.durationSlider.show() + self.durationSliderTool.show() + self.durationSliderTool.set_tooltip(self.tooltips, _('Duration')) + + _insertSeparator() + _insertSeparator() + + self.synthRec1Button = ToggleToolButton('rec1') + self.synthRec1Button.connect('clicked',self.synthLab.recordSound,1) + self.insert(self.synthRec1Button, -1) + self.synthRec1Button.show() + self.synthRec1Button.set_tooltip(_('Record Synth sound into slot 1')) + + self.synthRec2Button = ToggleToolButton('rec2') + self.synthRec2Button.connect('clicked',self.synthLab.recordSound,2) + self.insert(self.synthRec2Button, -1) + self.synthRec2Button.show() + self.synthRec2Button.set_tooltip(_('Record Synth sound into slot 2')) + + self.synthRec3Button = ToggleToolButton('rec3') + self.synthRec3Button.connect('clicked',self.synthLab.recordSound,3) + self.insert(self.synthRec3Button, -1) + self.synthRec3Button.show() + self.synthRec3Button.set_tooltip(_('Record Synth sound into slot 3')) + + self.synthRec4Button = ToggleToolButton('rec4') + self.synthRec4Button.connect('clicked',self.synthLab.recordSound,4) + self.insert(self.synthRec4Button, -1) + self.synthRec4Button.show() + self.synthRec4Button.set_tooltip(_('Record Synth sound into slot 4')) + + self.synthRec5Button = ToggleToolButton('rec5') + self.synthRec5Button.connect('clicked',self.synthLab.recordSound,5) + self.insert(self.synthRec5Button, -1) + self.synthRec5Button.show() + self.synthRec5Button.set_tooltip(_('Record Synth sound into slot 5')) + + self.synthRec6Button = ToggleToolButton('rec6') + self.synthRec6Button.connect('clicked',self.synthLab.recordSound,6) + self.insert(self.synthRec6Button, -1) + self.synthRec6Button.show() + self.synthRec6Button.set_tooltip(_('Record Synth sound into slot 6')) + +class presetToolbar(gtk.Toolbar): + def __init__(self,toolbox, synthLab): + gtk.Toolbar.__init__(self) + + def _insertSeparator(): + self.separator = gtk.SeparatorToolItem() + self.separator.set_draw(True) + self.insert(self.separator,-1) + self.separator.show() + + self.toolbox = toolbox + self.synthLab = synthLab + + self.preset1Button = ToggleToolButton('preset1') + self.preset1Button.connect('clicked',self.synthLab.recordSound,1) + self.insert(self.preset1Button, -1) + self.preset1Button.show() + self.preset1Button.set_tooltip(_('Record Synth sound into slot 1')) + diff --git a/SynthLab/SynthLabWindow.py b/SynthLab/SynthLabWindow.py index d0ec415..078be3f 100644 --- a/SynthLab/SynthLabWindow.py +++ b/SynthLab/SynthLabWindow.py @@ -7,6 +7,7 @@ from Util.Profiler import TP import gobject import time import shelve +from gettext import gettext as _ import os import Config @@ -16,6 +17,8 @@ from SynthLab.SynthLabParametersWindow import SynthLabParametersWindow from SynthLab.SynthObjectsParameters import SynthObjectsParameters from SynthLab.SynthLabConstants import SynthLabConstants from SynthLab.Parameter import Parameter +from SynthLab.SynthLabToolbars import mainToolbar +from SynthLab.SynthLabToolbars import presetToolbar from Util.Trackpad import Trackpad from SubActivity import SubActivity Tooltips = Config.Tooltips @@ -23,7 +26,7 @@ Tooltips = Config.Tooltips as_window = False class SynthLabWindow(SubActivity): - def __init__( self, set_mode, dummy_to_change_signature ): + def __init__( self, activity, set_mode, dummy_to_change_signature ): SubActivity.__init__(self, set_mode) if as_window: color = gtk.gdk.color_parse(Config.PANEL_BCK_COLOR) @@ -31,6 +34,7 @@ class SynthLabWindow(SubActivity): self.set_border_width(Config.MAIN_WINDOW_PADDING) self.set_keep_above(False) self.set_decorated(False) + self.activity = activity self.csnd = new_csound_client() self.trackpad = Trackpad( self ) self.synthObjectsParameters = SynthObjectsParameters() @@ -49,6 +53,14 @@ class SynthLabWindow(SubActivity): self.durString = '%.2f' % self.duration self.playingPitch = [] self.journalCalled = True + + #Toolbars + self._mainToolbar = mainToolbar(self.activity.toolbox, self) + self._presetToolbar = presetToolbar(self.activity.toolbox, self) + self.activity.toolbox.add_toolbar(_('Main'), self._mainToolbar) + self.activity.toolbox.add_toolbar(_('Presets'), self._presetToolbar) + self._mainToolbar.show() + self._presetToolbar.show() loopPointsTable = [] sample_names = [name for i in range( len( Config.INSTRUMENTS ) ) for name in Config.INSTRUMENTS.keys() if Config.INSTRUMENTS[ name ].instrumentId == i ] @@ -236,11 +248,10 @@ class SynthLabWindow(SubActivity): if midiPitch in self.playingPitch: self.playingPitch.remove( midiPitch ) - def handleDuration( self, data ): - self.duration = self.durAdjust.value + def handleDuration( self, adjustment ): + self.duration = adjustment.value self.durString = '%.2f' % self.duration img = int((self.duration - .5) * .5 + 1) - self.durLabel.set_from_file(Config.IMAGE_ROOT + 'dur' + str(img) + '.png') self.parameterUpdate(self.durString) self.tooltips.set_tip(self.durationSlider, Tooltips.SOUNDDUR + ': ' + self.durString) @@ -1099,7 +1110,7 @@ class SynthLabWindow(SubActivity): self.connections = state['connections'] #self.tempVerifyConnectionFormat() self.duration = state['duration'] - self.durAdjust.set_value(self.duration) + self._mainToolbar.durationSliderAdj.set_value(self.duration) self.initializeConnections() self.controlToSrcConnections() @@ -133,14 +133,15 @@ class TamTam(Activity): elif self.preloadTimeout: gobject.source_remove( self.preloadTimeout ) self.predrawTimeout = False - if mode == 'jam': if not (mode in self.modeList): self.modeList[mode] = Jam(self, self.set_mode) self.mode = mode + if mode == 'mini': if not (mode in self.modeList): + self.metadata['title'] = 'TamTam Mini' self.modeList[mode] = miniTamTamMain(self, self.set_mode) else: self.modeList[mode].regenerate() @@ -152,15 +153,17 @@ class TamTam(Activity): if mode == 'edit': self.toolbox.hide() if not (mode in self.modeList): + self.metadata['title'] = 'TamTam Edit' self.modeList[mode] = MainWindow(self.set_mode) if self.instrumentPanel in self.preloadList: self.instrumentPanel.load() # finish loading self.modeList[mode].setInstrumentPanel( self.instrumentPanel ) self.mode = mode + if mode == 'synth': - self.toolbox.hide() if not (mode in self.modeList): - self.modeList[mode] = SynthLabWindow(self.set_mode, None) + self.metadata['title'] = 'TamTam SynthLab' + self.modeList[mode] = SynthLabWindow(self, self.set_mode, None) self.mode = mode if self.mode == None: @@ -264,15 +267,12 @@ class TamTam(Activity): def write_file(self,file_path): if self.mode == 'edit': self.metadata['tamtam_subactivity'] = self.mode - self.metadata['title'] = 'TamTam Edit' self.modeList[self.mode].handleJournalSave(file_path) if self.mode == 'synth': self.metadata['tamtam_subactivity'] = self.mode - self.metadata['title'] = 'TamTam SynthLab' self.modeList[self.mode].handleJournalSave(file_path) if self.mode == 'mini': self.metadata['tamtam_subactivity'] = self.mode - self.metadata['title'] = 'TamTam Jam' f = open(file_path,'w') f.close() diff --git a/Util/LoopSettings.py b/Util/LoopSettings.py index a6ac667..ce92708 100644 --- a/Util/LoopSettings.py +++ b/Util/LoopSettings.py @@ -1,6 +1,7 @@ import pygtk pygtk.require('2.0') import gtk +import gobject import os from Util.ThemeWidgets import * import Config @@ -13,6 +14,10 @@ class LoopSettings( gtk.VBox ): self.popup = popup self.playFunction = playFunction self.setChannel = setChannelFunction + self.loopedSound = False + self.soundLength = 1.00 + self.start = 0 + self.end = 1.00 self.settingsBox = gtk.HBox() self.pack_start(self.settingsBox) @@ -36,6 +41,7 @@ class LoopSettings( gtk.VBox ): loopedLabel = gtk.Label("Looped sound: ") loopedBox.pack_start(loopedLabel) loopedToggle = ImageToggleButton(Config.IMAGE_ROOT+"checkOff.svg",Config.IMAGE_ROOT+"checkOn.svg") + loopedToggle.connect('button-press-event', self.handleLooped ) loopedBox.pack_start(loopedToggle) self.mainBox.pack_start(loopedBox, False, False, 5) @@ -68,39 +74,39 @@ class LoopSettings( gtk.VBox ): self.mainBox.pack_start(registerBox, False, False, 5) startBox = gtk.VBox() - self.startAdjust = gtk.Adjustment( 0.01, 0, 0.5, .01, .01, 0) + self.startAdjust = gtk.Adjustment( 0.01, 0, 1., .001, .001, 0) self.GUI['startSlider'] = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.startAdjust, 7 ) self.startAdjust.connect("value-changed", self.handleStart) self.GUI['startSlider'].set_inverted(True) self.GUI['startSlider'].set_size_request(50, 200) self.startEntry = gtk.Entry() - self.startEntry.set_width_chars(4) + self.startEntry.set_width_chars(5) self.handleStart( self.startAdjust ) startBox.pack_start(self.GUI['startSlider'], True, True, 5) startBox.pack_start(self.startEntry, True, True, 5) self.controlsBox.pack_start(startBox) endBox = gtk.VBox() - self.endAdjust = gtk.Adjustment( 0.9, 0, 1, .01, .01, 0) + self.endAdjust = gtk.Adjustment( 0.9, 0, 1, .001, .001, 0) self.GUI['endSlider'] = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.endAdjust, 7 ) self.endAdjust.connect("value-changed", self.handleEnd) self.GUI['endSlider'].set_inverted(True) self.GUI['endSlider'].set_size_request(50, 200) self.endEntry = gtk.Entry() - self.endEntry.set_width_chars(4) + self.endEntry.set_width_chars(5) self.handleEnd( self.endAdjust ) endBox.pack_start(self.GUI['endSlider'], True, True, 5) endBox.pack_start(self.endEntry, True, True, 5) self.controlsBox.pack_start(endBox) durBox = gtk.VBox() - self.durAdjust = gtk.Adjustment( 0.01, 0, 0.2, .01, .01, 0) + self.durAdjust = gtk.Adjustment( 0.01, 0, 0.2, .001, .001, 0) self.GUI['durSlider'] = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.durAdjust, 7 ) self.durAdjust.connect("value-changed", self.handleDur) self.GUI['durSlider'].set_inverted(True) self.GUI['durSlider'].set_size_request(50, 200) self.durEntry = gtk.Entry() - self.durEntry.set_width_chars(4) + self.durEntry.set_width_chars(5) self.handleDur( self.durAdjust ) durBox.pack_start(self.GUI['durSlider'], True, True, 5) durBox.pack_start(self.durEntry, True, True, 5) @@ -118,9 +124,18 @@ class LoopSettings( gtk.VBox ): self.show_all() - def set_name(self, name): + def set_values(self, name, soundLength): self.nameEntry.set_text(name) - + self.soundLength = soundLength + self.handleStart(self.GUI['startSlider']) + self.handleEnd(self.GUI['endSlider']) + + def handleLooped(self, widget, data=None): + if widget.get_active() == True: + self.loopedSound = False + else: + self.loopedSound = True + def categoryBtnPress(self, widget, event): if event.type == gtk.gdk.BUTTON_PRESS: widget.popup(None, None, None, event.button, event.time) @@ -142,12 +157,18 @@ class LoopSettings( gtk.VBox ): self.registerButton.set_label(self.registerList[self.register]) def handleStart(self, widget, data=None): - self.start = self.startAdjust.value + self.startSlider = self.startAdjust.value + self.start = self.startSlider * self.soundLength + if self.start > self.end: + self.start = self.end self.startEntry.set_text(str(self.start)) self.setChannel('lstart', self.start) def handleEnd(self, widget, data=None): - self.end = self.endAdjust.value + self.endSlider = self.endAdjust.value + self.end = self.endSlider * self.soundLength + if self.end < self.start: + self.end = self.start self.endEntry.set_text(str(self.end)) self.setChannel('lend', self.end) @@ -157,4 +178,11 @@ class LoopSettings( gtk.VBox ): self.setChannel('ldur', self.dur) def handlePlayButton(self, widget, data=None): - self.playFunction(widget.get_active())
\ No newline at end of file + self.playFunction(widget.get_active(), self.loopedSound) + if self.loopedSound == False and widget.get_active() == False: + self.timeoutStop = gobject.timeout_add(int(self.soundLength * 1000), self.playButtonState) + + def playButtonState(self): + # something's weird here + self.playStopButton.set_active(True) + gobject.source_remove(self.timeoutStop) @@ -3,7 +3,7 @@ import pygtk pygtk.require( '2.0' ) import gtk -import os, signal +import os, signal,math import Config from Util.ThemeWidgets import * @@ -26,7 +26,7 @@ class Welcome(SubActivity): actVBox = RoundVBox(fillcolor = Config.WS_BCK_COLOR, bordercolor = Config.WS_BCK_COLOR, radius = Config.PANEL_RADIUS) actHBox = gtk.HBox() - for activity in ['mini','edit','synth', 'help']: + for activity in ['mini','edit','synth']: actBtnBox = RoundVBox(fillcolor = Config.WS_PANEL_COLOR, bordercolor = Config.WS_BCK_COLOR, radius = Config.PANEL_RADIUS) actBtnBox.set_size_request(200,200) actBtnBox.set_border_width(Config.PANEL_SPACING) @@ -40,9 +40,7 @@ class Welcome(SubActivity): self.tooltips.set_tip(actBtn,'TamTam Edit') elif activity == 'synth': self.tooltips.set_tip(actBtn,'TamTam SynthLab') - elif activity == 'help': - self.tooltips.set_tip(actBtn,'TamTam Help') - + title = gtk.Image() title.set_from_file(Config.IMAGE_ROOT + 'TamTam.png') @@ -61,9 +59,16 @@ class Welcome(SubActivity): buttonBox.pack_start(self.playStopButton, False, False, 275) + helpBox = gtk.HBox() + helpButton = ImageButton(Config.IMAGE_ROOT + 'helpTam.png') + helpButton.connect("clicked", self.handleHelp, None) + helpBox.pack_start(helpButton, False, False, 575) + self.tooltips.set_tip(helpButton,'Help: Feature SlideShow') + actVBox.pack_start(actHBox,False,False, 200) - actVBox.pack_start(title,False,False, 0) + actVBox.pack_start(title,False,False) #actVBox.pack_start(buttonBox, False, False, 100) + actVBox.pack_start(helpBox, False, False) self.add(actVBox) self.show_all() @@ -137,21 +142,48 @@ class Welcome(SubActivity): else: self.csnd.loopSetTick( 0 ) self.csnd.loopStart() + + def handleHelp(self, widget, data ): + self.helpWindow = gtk.Window(gtk.WINDOW_POPUP) + self.helpWindow.move( 100, 75 ) + self.helpWindow.resize( 1000, 800 ) + self.helpWindow.set_modal(True) + self.helpWindow.add_events( gtk.gdk.BUTTON_PRESS_MASK ) + self.helpWindow.connect("button-release-event", lambda + w,e:self.helpWindow.hide() ) + + helpImg = gtk.Image() + + self.imglist = [ i for i in os.listdir(Config.IMAGE_ROOT) + if i[0:8] == 'helpShow'] + self.imglist.sort() + self.imgpos = 0 + def next(e,w,self): + imglist = self.imglist + imgpos = self.imgpos + self.imgpos = ( imgpos + 1 ) % len(imglist) + print 'loading file %s' % Config.IMAGE_ROOT + imglist[self.imgpos] + helpImg.set_from_file( Config.IMAGE_ROOT + imglist[self.imgpos]) + return True + def prev(e,w,self): + imglist = self.imglist + imgpos = self.imgpos + self.imgpos = ( imgpos - 1 + len(imglist)) % len(imglist) + helpImg.set_from_file( Config.IMAGE_ROOT + imglist[self.imgpos]) + return True + helpImg.set_from_file(Config.IMAGE_ROOT + self.imglist[self.imgpos]) + + hbox = gtk.HBox() + jj = gtk.EventBox() + jj.add(helpImg) + jj.connect("button-release-event", next, self) + hbox.pack_start( jj ) + self.helpWindow.add( hbox ) + self.helpWindow.show_all() def onActivityBtnClicked(self, widget, data): - if data == 'help': - self.helpWindow = gtk.Window(gtk.WINDOW_POPUP) - self.helpWindow.move( 400, 100 ) - self.helpWindow.resize( 800, 452 ) - self.helpWindow.set_modal(True) - self.helpWindow.add_events( gtk.gdk.BUTTON_PRESS_MASK ) - self.helpWindow.connect("button-release-event", lambda w,e:self.cancelInstrumentSelection() ) - - self.helpWindow.show() - - else: - widget.event( gtk.gdk.Event( gtk.gdk.LEAVE_NOTIFY ) ) # fake the leave event - self.set_mode(data) + widget.event( gtk.gdk.Event( gtk.gdk.LEAVE_NOTIFY ) ) # fake the leave event + self.set_mode(data) def onActivate(self, arg): self.show_all() diff --git a/icons/overrec.svg b/icons/overrec.svg new file mode 100644 index 0000000..d3b95f2 --- /dev/null +++ b/icons/overrec.svg @@ -0,0 +1,15 @@ +<?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="45.395px" height="45.395px" viewBox="0 0 45.395 45.395" enable-background="new 0 0 45.395 45.395" xml:space="preserve">
+<circle fill="#808284" cx="22.297" cy="23.037" r="22.5"/>
+<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="22.295" cy="23.129" r="21.572"/>
+<g>
+ <path fill="#FFFFFF" d="M13.319,16.993h2.719v5.365h0.055c0.27-0.468,0.558-0.899,0.828-1.333l2.755-4.032h3.367l-4.017,5.167
+ l4.23,6.968h-3.205l-2.971-5.239l-1.045,1.278v3.961h-2.718L13.319,16.993L13.319,16.993z"/>
+</g>
+<circle fill="none" cx="22.628" cy="22.89" r="17.085"/>
+<text transform="matrix(1 0 0 1 23.8645 23.8645)" fill="#FFFFFF" font-family="'MyriadPro-Bold'" font-size="16">+</text>
+<circle fill="none" stroke="#4C4D4F" cx="22.628" cy="22.89" r="17.085"/>
+</svg>
diff --git a/icons/micrec1.svg b/icons/rec1.svg index acadb5e..f4f59e6 100644 --- a/icons/micrec1.svg +++ b/icons/rec1.svg @@ -6,6 +6,6 @@ <circle fill="#808284" cx="22.698" cy="22.606" r="22.5"/>
<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="22.697" cy="22.698" r="21.572"/>
<g enable-background="new ">
- <path fill="#FFFFFF" d="M21.78,19.426h-0.036l-2.233,1.062l-0.45-2.052l3.097-1.44h2.269v11.704H21.78V19.426z"/>
+ <path fill="#FFFFFF" d="M21.78,19.426h-0.035l-2.233,1.062l-0.45-2.052l3.098-1.439h2.269V28.7H21.78V19.426z"/>
</g>
</svg>
diff --git a/icons/micrec2.svg b/icons/rec2.svg index 96fd98d..170548b 100644 --- a/icons/micrec2.svg +++ b/icons/rec2.svg @@ -6,8 +6,8 @@ <circle fill="#808284" cx="22.698" cy="22.606" r="22.5"/>
<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="22.697" cy="22.698" r="21.572"/>
<g enable-background="new ">
- <path fill="#FFFFFF" d="M18.287,28.698v-1.656l1.512-1.369c2.557-2.286,3.8-3.601,3.835-4.969c0-0.954-0.576-1.711-1.926-1.711
- c-1.008,0-1.891,0.504-2.503,0.973l-0.774-1.963c0.882-0.666,2.25-1.206,3.835-1.206c2.647,0,4.105,1.548,4.105,3.673
- c0,1.963-1.423,3.529-3.115,5.042l-1.08,0.899v0.036h4.411v2.251H18.287z"/>
+ <path fill="#FFFFFF" d="M18.287,28.698v-1.656l1.512-1.369c2.557-2.286,3.8-3.602,3.835-4.969c0-0.954-0.576-1.711-1.926-1.711
+ c-1.008,0-1.892,0.504-2.503,0.973l-0.774-1.963c0.882-0.666,2.25-1.206,3.835-1.206c2.647,0,4.105,1.548,4.105,3.673
+ c0,1.963-1.423,3.529-3.115,5.042l-1.08,0.899v0.035h4.411v2.252H18.287z"/>
</g>
</svg>
diff --git a/icons/micrec3.svg b/icons/rec3.svg index 4eb1f2d..c20650b 100644 --- a/icons/micrec3.svg +++ b/icons/rec3.svg @@ -6,10 +6,10 @@ <circle fill="#808284" cx="22.698" cy="22.606" r="22.5"/>
<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="22.697" cy="22.698" r="21.572"/>
<g enable-background="new ">
- <path fill="#FFFFFF" d="M18.773,26.016c0.486,0.252,1.603,0.72,2.719,0.72c1.423,0,2.143-0.684,2.143-1.566
- c0-1.152-1.152-1.674-2.358-1.674H20.16v-1.963h1.062c0.918-0.019,2.088-0.36,2.088-1.351c0-0.702-0.576-1.224-1.728-1.224
- c-0.955,0-1.962,0.414-2.449,0.702l-0.558-1.981c0.702-0.45,2.106-0.882,3.619-0.882c2.502,0,3.889,1.314,3.889,2.917
- c0,1.242-0.702,2.215-2.143,2.719v0.036c1.404,0.252,2.539,1.314,2.539,2.845c0,2.07-1.819,3.583-4.79,3.583
+ <path fill="#FFFFFF" d="M18.773,26.016c0.486,0.252,1.604,0.72,2.72,0.72c1.423,0,2.143-0.684,2.143-1.565
+ c0-1.152-1.152-1.674-2.358-1.674H20.16v-1.963h1.062c0.918-0.02,2.088-0.36,2.088-1.352c0-0.702-0.576-1.224-1.728-1.224
+ c-0.955,0-1.962,0.414-2.449,0.702l-0.558-1.981c0.701-0.45,2.105-0.882,3.618-0.882c2.502,0,3.89,1.313,3.89,2.917
+ c0,1.242-0.702,2.215-2.144,2.719v0.036c1.404,0.252,2.539,1.314,2.539,2.845c0,2.07-1.818,3.583-4.79,3.583
c-1.512,0-2.791-0.396-3.475-0.828L18.773,26.016z"/>
</g>
</svg>
diff --git a/icons/micrec4.svg b/icons/rec4.svg index 1c64e6e..75f42f0 100644 --- a/icons/micrec4.svg +++ b/icons/rec4.svg @@ -6,7 +6,8 @@ <circle fill="#808284" cx="22.698" cy="22.606" r="22.5"/>
<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="22.697" cy="22.698" r="21.572"/>
<g enable-background="new ">
- <path fill="#FFFFFF" d="M23.131,28.698v-2.791h-5.186v-1.782l4.429-7.13h3.349v6.86h1.404v2.053h-1.404v2.791H23.131z
- M23.131,23.855v-2.593c0-0.702,0.036-1.422,0.09-2.178h-0.072c-0.378,0.756-0.684,1.44-1.081,2.178l-1.566,2.557v0.036H23.131z"/>
+ <path fill="#FFFFFF" d="M23.131,28.698v-2.791h-5.187v-1.782l4.43-7.13h3.349v6.859h1.404v2.054h-1.404v2.791L23.131,28.698
+ L23.131,28.698z M23.131,23.855v-2.593c0-0.702,0.036-1.422,0.09-2.178h-0.072c-0.378,0.756-0.684,1.439-1.081,2.178l-1.565,2.557
+ v0.036H23.131z"/>
</g>
</svg>
diff --git a/icons/micrec1.svg b/icons/rec5.svg index acadb5e..6512474 100644 --- a/icons/micrec1.svg +++ b/icons/rec5.svg @@ -5,7 +5,10 @@ width="45.395px" height="45.395px" viewBox="0 0 45.395 45.395" enable-background="new 0 0 45.395 45.395" xml:space="preserve">
<circle fill="#808284" cx="22.698" cy="22.606" r="22.5"/>
<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="22.697" cy="22.698" r="21.572"/>
-<g enable-background="new ">
- <path fill="#FFFFFF" d="M21.78,19.426h-0.036l-2.233,1.062l-0.45-2.052l3.097-1.44h2.269v11.704H21.78V19.426z"/>
+<g>
+ <path fill="#FFFFFF" d="M26.72,19.03h-5.042l-0.279,2c0.279-0.04,0.52-0.04,0.84-0.04c1.24,0,2.501,0.28,3.421,0.94
+ c0.98,0.66,1.58,1.74,1.58,3.261c0,2.42-2.08,4.561-5.581,4.561c-1.58,0-2.9-0.359-3.621-0.74l0.54-2.281
+ c0.58,0.281,1.761,0.641,2.941,0.641c1.26,0,2.601-0.6,2.601-1.98c0-1.34-1.061-2.16-3.661-2.16c-0.72,0-1.221,0.04-1.761,0.12
+ l0.86-6.822h7.162V19.03z"/>
</g>
</svg>
diff --git a/icons/micrec1.svg b/icons/rec6.svg index acadb5e..1758bb9 100644 --- a/icons/micrec1.svg +++ b/icons/rec6.svg @@ -5,7 +5,11 @@ width="45.395px" height="45.395px" viewBox="0 0 45.395 45.395" enable-background="new 0 0 45.395 45.395" xml:space="preserve">
<circle fill="#808284" cx="22.698" cy="22.606" r="22.5"/>
<circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="22.697" cy="22.698" r="21.572"/>
-<g enable-background="new ">
- <path fill="#FFFFFF" d="M21.78,19.426h-0.036l-2.233,1.062l-0.45-2.052l3.097-1.44h2.269v11.704H21.78V19.426z"/>
+<g>
+ <path fill="#FFFFFF" d="M26.006,19.023c-0.34,0-0.7,0-1.18,0.04c-2.701,0.22-3.901,1.6-4.241,3.121h0.061
+ c0.64-0.66,1.54-1.04,2.76-1.04c2.181,0,4.021,1.54,4.021,4.241c0,2.58-1.98,4.7-4.801,4.7c-3.461,0-5.161-2.58-5.161-5.681
+ c0-2.441,0.899-4.481,2.3-5.781c1.301-1.181,2.98-1.821,5.021-1.92c0.56-0.04,0.92-0.04,1.22-0.02V19.023z M22.606,27.845
+ c1.061,0,1.74-0.979,1.74-2.3c0-1.201-0.64-2.241-1.94-2.241c-0.82,0-1.5,0.5-1.8,1.16c-0.08,0.16-0.12,0.4-0.12,0.761
+ c0.06,1.38,0.72,2.62,2.101,2.62H22.606z"/>
</g>
</svg>
diff --git a/miniTamTam/MiniSequencer.py b/miniTamTam/MiniSequencer.py index 887b4cf..4182af9 100644 --- a/miniTamTam/MiniSequencer.py +++ b/miniTamTam/MiniSequencer.py @@ -33,13 +33,13 @@ class MiniSequencer: gobject.source_remove( self.playBackTimeout ) self.playState = 0 - def handleRecordButton( self, widget, event ): + def handleRecordButton( self, widget, data ): if not self.startLooking: if 1: #widget.get_active() == True: self.beats = [i*4 for i in range(self.beat)] self.upBeats = [i+2 for i in self.beats] self.realTick = [i for i in range(self.beat*4)] - if event.button == 1: + if data: self.clearSequencer() self.startLooking = 1 self.startPlayback() diff --git a/miniTamTam/miniTamTamMain.py b/miniTamTam/miniTamTamMain.py index aba34c8..7640f32 100644 --- a/miniTamTam/miniTamTamMain.py +++ b/miniTamTam/miniTamTamMain.py @@ -351,11 +351,15 @@ class miniTamTamMain(SubActivity): def loopSettingsChannel(self, channel, value): self.csnd.setChannel(channel, value) - def loopSettingsPlayStop(self, state): + def loopSettingsPlayStop(self, state, loop): if not state: - self.csnd.inputMessage(Config.CSOUND_PLAY_LS_NOTE) + if loop: + self.csnd.inputMessage(Config.CSOUND_PLAY_LS_NOTE % 5022) + else: + self.csnd.inputMessage(Config.CSOUND_PLAY_LS_NOTE % 5023) else: - self.csnd.inputMessage(Config.CSOUND_STOP_LS_NOTE) + if loop: + self.csnd.inputMessage(Config.CSOUND_STOP_LS_NOTE) def doneLoopSettingsPopup(self): if self.loopSettingsBtn.get_active(): @@ -381,8 +385,12 @@ class miniTamTamMain(SubActivity): except IOError: print 'ERROR: failed to load Sound from file %s' % chooser.get_filename() chooser.destroy() - - self.loopSettings.set_name(soundName) + results = commands.getstatusoutput("csound -U sndinfo %s" % tempName) + if results[0] == 0: + list = results[1].split() + pos = list.index('seconds') + soundLength = float(list[pos-1]) + self.loopSettings.set_values(soundName, soundLength) self.loopSettingsPopup.show() self.loopSettingsPopup.move( 600, 200 ) self.timeoutLoad = gobject.timeout_add(1000, self.load_ls_instrument, soundName) @@ -415,6 +423,7 @@ class miniTamTamMain(SubActivity): (s4, o4) = commands.getstatusoutput("rm " + Config.PREF_DIR + "/tempMic.wav") self.micTimeout = gobject.timeout_add(200, self.loadMicInstrument, mic) self.instrumentPanel.set_activeInstrument(mic,True) + self.setInstrument(mic) def synthRec(self,lab): if self.synthLabWindow != None: @@ -570,7 +579,7 @@ class miniTamTamMain(SubActivity): self.reverb = adj.value self.drumFillin.setReverb( self.reverb ) img = int(self.scale(self.reverb,0,1,0,4)) - self.activity._playToolbar.reverbSliderImgRight.set_from_file(Config.IMAGE_ROOT + 'reverb' + str(img) + '.png') + self._playToolbar.reverbSliderImgRight.set_from_file(Config.IMAGE_ROOT + 'reverb' + str(img) + '.png') self.keyboardStandAlone.setReverb(self.reverb) def handleVolumeSlider(self, adj): diff --git a/miniTamTam/miniToolbars.py b/miniTamTam/miniToolbars.py index 02b93b1..36440f6 100644 --- a/miniTamTam/miniToolbars.py +++ b/miniTamTam/miniToolbars.py @@ -63,7 +63,7 @@ class playToolbar(gtk.Toolbar): _insertSeparator() self.reverbSliderImgRight = gtk.Image() - self.reverbSliderImgRight.set_from_file(Config.IMAGE_ROOT + 'reverb0.png') + self.reverbSliderImgRight.set_from_file(Config.IMAGE_ROOT + 'dur2.png') self.reverbSliderImgRightTool = gtk.ToolItem() self.reverbSliderImgRightTool.add(self.reverbSliderImgRight) @@ -96,33 +96,51 @@ class recordToolbar(gtk.Toolbar): self.toolbox = toolbox self.miniTamTam = miniTamTam - - self.keyboardRecButton = ToggleToolButton('keyrec') - self.keyboardRecButton.connect('button-press-event', self.miniTamTam.sequencer.handleRecordButton) - self.insert(self.keyboardRecButton, -1) - self.keyboardRecButton.show() - self.keyboardRecButton.set_tooltip(_('Left click to record, right click to record on top')) - - self.micRec1Button = ToolButton('micrec1') + + self.micRec1Button = ToolButton('rec1') self.micRec1Button.connect('clicked',self.miniTamTam.micRec,'mic1') self.insert(self.micRec1Button, -1) self.micRec1Button.show() self.micRec1Button.set_tooltip(_('Record microphone into slot 1')) - self.micRec2Button = ToolButton('micrec2') + self.micRec2Button = ToolButton('rec2') self.micRec2Button.connect('clicked',self.miniTamTam.micRec,'mic2') self.insert(self.micRec2Button, -1) self.micRec2Button.show() self.micRec2Button.set_tooltip(_('Record microphone into slot 2')) - self.micRec3Button = ToolButton('micrec3') + self.micRec3Button = ToolButton('rec3') self.micRec3Button.connect('clicked',self.miniTamTam.micRec,'mic3') self.insert(self.micRec3Button, -1) self.micRec3Button.show() self.micRec3Button.set_tooltip(_('Record microphone into slot 3')) - self.micRec4Button = ToolButton('micrec4') + self.micRec4Button = ToolButton('rec4') self.micRec4Button.connect('clicked',self.miniTamTam.micRec,'mic4') self.insert(self.micRec4Button, -1) self.micRec4Button.show() - self.micRec4Button.set_tooltip(('Record microphone into slot 4'))
\ No newline at end of file + self.micRec4Button.set_tooltip(('Record microphone into slot 4')) + + _insertSeparator() + _insertSeparator() + + self.keyboardRecButton = ToggleToolButton('keyrec') + self.keyboardRecButton.connect('clicked', self.miniTamTam.sequencer.handleRecordButton, True) + self.insert(self.keyboardRecButton, -1) + self.keyboardRecButton.show() + self.keyboardRecButton.set_tooltip(_('Click to record a loop')) + + self.keyboardRecOverButton = ToggleToolButton('overrec') + self.keyboardRecOverButton.connect('clicked', self.miniTamTam.sequencer.handleRecordButton, False) + self.insert(self.keyboardRecOverButton, -1) + self.keyboardRecOverButton.show() + self.keyboardRecOverButton.set_tooltip(_('Click to add a loop')) + + _insertSeparator() + _insertSeparator() + + self.loopSetButton = ToggleToolButton('loop') + #self.loopSetButton.connect('clicked', self.miniTamTam.changeme) + self.insert(self.loopSetButton, -1) + self.loopSetButton.show() + self.loopSetButton.set_tooltip(_('Add new sound'))
\ No newline at end of file |