diff options
author | amartin <olpc@xo-05-28-21.localdomain> | 2007-12-27 10:13:17 (GMT) |
---|---|---|
committer | amartin <olpc@xo-05-28-21.localdomain> | 2007-12-27 10:13:17 (GMT) |
commit | 32a03b1c90a0df81f97104a671dddaa137b634af (patch) | |
tree | 1a205f59fe85f9073e4ceecc657b23540815fb9d /TamTamJam.activity/Jam | |
parent | 0547c68b55579fca5eb1e87753bc1dc019aefb05 (diff) |
network
Diffstat (limited to 'TamTamJam.activity/Jam')
-rw-r--r-- | TamTamJam.activity/Jam/JamMain.py | 28 | ||||
-rw-r--r-- | TamTamJam.activity/Jam/Toolbars.py | 242 |
2 files changed, 179 insertions, 91 deletions
diff --git a/TamTamJam.activity/Jam/JamMain.py b/TamTamJam.activity/Jam/JamMain.py index e75b8e3..a8aad03 100644 --- a/TamTamJam.activity/Jam/JamMain.py +++ b/TamTamJam.activity/Jam/JamMain.py @@ -15,7 +15,7 @@ import sugar.graphics.style as style from Jam.Desktop import Desktop import Jam.Picker as Picker import Jam.Block as Block -from Jam.Toolbars import JamToolbar, DesktopToolbar, recordToolbar +from Jam.Toolbars import JamToolbar, PlaybackToolbar, DesktopToolbar, RecordToolbar from common.Util.CSoundNote import CSoundNote @@ -196,10 +196,11 @@ class JamMain(gtk.EventBox): #-- Toolbars ------------------------------------------ self.jamToolbar = JamToolbar( self ) self.activity.toolbox.add_toolbar( _("Jam"), self.jamToolbar ) - + self.playbackToolbar = PlaybackToolbar( self ) + self.activity.toolbox.add_toolbar( _("Playback"), self.playbackToolbar ) self.desktopToolbar = DesktopToolbar( self ) - self.recordToolbar = recordToolbar( self ) self.activity.toolbox.add_toolbar( _("Desktop"), self.desktopToolbar ) + self.recordToolbar = RecordToolbar( self ) self.activity.toolbox.add_toolbar( _("Record"), self.recordToolbar ) #-- GUI ----------------------------------------------- @@ -300,6 +301,8 @@ class JamMain(gtk.EventBox): self.csnd.loopSetNumTicks( self.syncBeats*Config.TICKS_PER_BEAT, self.heartbeatLoop ) self.heartbeatStart = time.time() self.csnd.loopStart( self.heartbeatLoop ) + self.curBeat = 0 + self.beatWheelTimeout = gobject.timeout_add( 100, self.updateBeatWheel ) # data packing classes self.packer = xdrlib.Packer() @@ -1132,7 +1135,7 @@ class JamMain(gtk.EventBox): # Sync def setSyncBeats( self, beats ): - self.jamToolbar.setSyncBeats( beats ) + self.playbackToolbar.setSyncBeats( beats ) def _setSyncBeats( self, beats ): if beats == self.syncBeats: @@ -1148,10 +1151,25 @@ class JamMain(gtk.EventBox): while curTick > ticks: curTick -= ticks - self.csnd.loopSetTick( self.heartbeatLoop ) + self.csnd.loopSetTick( curTick, self.heartbeatLoop ) self.updateSync() + + def _setBeat( self, beat ): + curTick = self.csnd.loopGetTick( self.heartbeatLoop ) + beatTick = curTick % Config.TICKS_PER_BEAT + + newTick = beat*Config.TICKS_PER_BEAT + beatTick + + self.csnd.adjustTick( newTick - curTick ) + + def updateBeatWheel( self ): + curTick = self.csnd.loopGetTick( self.heartbeatLoop ) + self.curBeat = int( curTick ) // Config.TICKS_PER_BEAT + self.playbackToolbar.updateBeatWheel( self.curBeat ) + return True + def nextHeartbeat( self ): delta = time.time() - self.heartbeatStart return self.beatDuration - (delta % self.beatDuration) diff --git a/TamTamJam.activity/Jam/Toolbars.py b/TamTamJam.activity/Jam/Toolbars.py index a60d2b5..b1db5e2 100644 --- a/TamTamJam.activity/Jam/Toolbars.py +++ b/TamTamJam.activity/Jam/Toolbars.py @@ -31,17 +31,7 @@ class JamToolbar( gtk.Toolbar ): self.volumeImg = gtk.Image() - self.stopButton = ToolButton('media-playback-stop') - self.stopButton.connect('clicked',self.handleStopButton) - self.insert(self.stopButton, -1) - self.stopButton.show() - self.stopButton.set_tooltip(_('Stop')) - - self.pauseButton = ToggleToolButton('media-playback-pause') - self.pauseButton.connect('clicked',self.handlePauseButton) - self.insert(self.pauseButton, -1) - self.pauseButton.show() - self.pauseButton.set_tooltip(_('pause')) + self._insert_separator( True ) self.volumeAdjustment = gtk.Adjustment( 0.0, 0, 1.0, 0.1, 0.1, 0 ) self.volumeAdjustment.connect( 'value-changed', self.handleVolume ) @@ -72,29 +62,6 @@ class JamToolbar( gtk.Toolbar ): self._insert_separator( True ) - label = gtk.Label( _("Sync to:") ) - self.syncLabel = gtk.ToolItem() - self.syncLabel.add( label ) - self.insert( self.syncLabel, -1 ) - - self.comboBox = ComboBox() - self.comboBox.append_item( 1, _("1 Beat") ) - self.comboBox.append_item( 2, _("2 Beats") ) - self.comboBox.append_item( 3, _("3 Beats") ) - self.comboBox.append_item( 4, _("4 Beats") ) - self.comboBox.append_item( 5, _("5 Beats") ) - self.comboBox.append_item( 6, _("6 Beats") ) - self.comboBox.append_item( 7, _("7 Beats") ) - self.comboBox.append_item( 8, _("8 Beats") ) - self.comboBox.append_item( 9, _("9 Beats") ) - self.comboBox.append_item( 10, _("10 Beats") ) - self.comboBox.append_item( 11, _("11 Beats") ) - self.comboBox.append_item( 12, _("12 Beats") ) - self.comboBox.set_active( 4 - 1 ) # default 4 beats - self.comboBox.connect( "changed", self.changeSync ) - self.syncBox = ToolComboBox( self.comboBox ) - self.insert( self.syncBox, -1 ) - self.show_all() #def _add_palette( self, widget, palette, position = Palette.DEFAULT ): @@ -118,26 +85,11 @@ class JamToolbar( gtk.Toolbar ): separator.set_expand( expand ) self.insert( separator, -1 ) - def setSyncBeats( self, beats ): - self.comboBox.set_active( beats - 1 ) - - def changeSync( self, widget ): - self.owner._setSyncBeats( widget.get_active() + 1 ) - def mapRange( self, value, ilower, iupper, olower, oupper ): if value == iupper: return oupper return olower + int( (oupper-olower+1)*(value-ilower)/float(iupper-ilower) ) - def handleStopButton( self, widget ): - self.owner.setStopped() - - def handlePauseButton (self, widget ): - if widget.get_active(): - self.owner.setPaused(True) - else: - self.owner.setPaused(False) - def handleVolume( self, widget ): self.owner._setVolume( widget.get_value() ) @@ -178,55 +130,123 @@ class JamToolbar( gtk.Toolbar ): self.delayedTempo = 0 self.owner.sendSyncQuery() +class PlaybackToolbar( gtk.Toolbar ): -class recordToolbar(gtk.Toolbar): - def __init__(self, jam): - gtk.Toolbar.__init__(self) + def __init__( self, owner ): + gtk.Toolbar.__init__( self ) - def _insertSeparator(x = 1): - for i in range(x): - self.separator = gtk.SeparatorToolItem() - self.separator.set_draw(True) - self.insert(self.separator,-1) - self.separator.show() + self.owner = owner - #self.toolbox = toolbox - self.jam = jam + self.toolItem = {} - self.micRec1Button = ToolButton('rec1') - self.micRec1Button.connect('clicked',self.jam.micRec,'mic1') - self.insert(self.micRec1Button, -1) - self.micRec1Button.show() - self.micRec1Button.set_tooltip(_('Record microphone into slot 1')) + self.stopButton = ToolButton('media-playback-stop') + self.stopButton.connect('clicked',self.handleStopButton) + self.insert(self.stopButton, -1) + self.stopButton.show() + self.stopButton.set_tooltip(_('Stop')) - self.micRec2Button = ToolButton('rec2') - self.micRec2Button.connect('clicked',self.jam.micRec,'mic2') - self.insert(self.micRec2Button, -1) - self.micRec2Button.show() - self.micRec2Button.set_tooltip(_('Record microphone into slot 2')) + self.pauseButton = ToggleToolButton('media-playback-pause') + self.pauseButton.connect('clicked',self.handlePauseButton) + self.insert(self.pauseButton, -1) + self.pauseButton.show() + self.pauseButton.set_tooltip(_('Pause')) - self.micRec3Button = ToolButton('rec3') - self.micRec3Button.connect('clicked',self.jam.micRec,'mic3') - self.insert(self.micRec3Button, -1) - self.micRec3Button.show() - self.micRec3Button.set_tooltip(_('Record microphone into slot 3')) + self._insert_separator( True ) - self.micRec4Button = ToolButton('rec4') - self.micRec4Button.connect('clicked',self.jam.micRec,'mic4') - self.insert(self.micRec4Button, -1) - self.micRec4Button.show() - self.micRec4Button.set_tooltip(('Record microphone into slot 4')) + self.blockBeat = False + self.beatWheel = [] - _insertSeparator() + btn = RadioToolButton( 'media-playback-pause', group = None ) + btn.connect( 'toggled', self.setBeat, 0 ) + btn.set_tooltip( _('Jump To Beat') ) + self.insert( btn, -1 ) + self.beatWheel.append( btn ) - self._loopSettingsPalette = LoopSettingsPalette(_('Add new Sound'), self.jam) - self.loopSetButton = ToggleToolButton('loop') - self.loopSetButton.set_palette(self._loopSettingsPalette) - self.insert(self.loopSetButton, -1) - self.loopSetButton.show() + for i in range(1,12): + btn = RadioToolButton( 'media-playback-pause', group = self.beatWheel[0] ) + btn.connect( 'toggled', self.setBeat, i ) + btn.set_tooltip( _('Jump To Beat') ) + self.insert( btn, -1 ) + self.beatWheel.append( btn ) + + + label = gtk.Label( _("Sync to:") ) + self.syncLabel = gtk.ToolItem() + self.syncLabel.add( label ) + self.insert( self.syncLabel, -1 ) + + self.comboBox = ComboBox() + self.comboBox.append_item( 1, _("1 Beat") ) + self.comboBox.append_item( 2, _("2 Beats") ) + self.comboBox.append_item( 3, _("3 Beats") ) + self.comboBox.append_item( 4, _("4 Beats") ) + self.comboBox.append_item( 5, _("5 Beats") ) + self.comboBox.append_item( 6, _("6 Beats") ) + self.comboBox.append_item( 7, _("7 Beats") ) + self.comboBox.append_item( 8, _("8 Beats") ) + self.comboBox.append_item( 9, _("9 Beats") ) + self.comboBox.append_item( 10, _("10 Beats") ) + self.comboBox.append_item( 11, _("11 Beats") ) + self.comboBox.append_item( 12, _("12 Beats") ) + self.comboBox.set_active( 4 - 1 ) # default 4 beats + self.comboBox.connect( "changed", self.changeSync ) + self.syncBox = ToolComboBox( self.comboBox ) + self.insert( self.syncBox, -1 ) self.show_all() + #def _add_palette( self, widget, palette, position = Palette.DEFAULT ): + def _add_palette( self, widget, palette ): + widget._palette = palette + widget._palette.props.invoker = WidgetInvoker( widget ) + #widget._palette.set_property( "position", position ) + + def _add_tooltip( self, widget, tooltip ): + #self._add_palette( widget, Palette( tooltip ), Palette.DEFAULT ) + self._add_palette( widget, Palette( tooltip ) ) + + def _insert_widget( self, widget, pos ): + self.toolItem[ widget ] = gtk.ToolItem() + self.toolItem[ widget ].add( widget ) + self.insert( self.toolItem[ widget ], pos ) + + def _insert_separator( self, expand = False ): + separator = gtk.SeparatorToolItem() + separator.set_draw( False ) + separator.set_expand( expand ) + self.insert( separator, -1 ) + + def setBeat( self, widget, beat ): + if not self.blockBeat and widget.get_active(): + self.owner._setBeat( beat ) + + def updateBeatWheel( self, beat ): + self.blockBeat = True + self.beatWheel[ beat ].set_active( True ) + self.blockBeat = False + + def setSyncBeats( self, beats ): + self.comboBox.set_active( beats - 1 ) + + def changeSync( self, widget ): + beats = widget.get_active() + 1 + for i in range(beats): + self.beatWheel[i].show() + for i in range(beats,12): + self.beatWheel[i].hide() + + self.owner._setSyncBeats( beats ) + + def handleStopButton( self, widget ): + self.owner.setStopped() + + def handlePauseButton( self, widget ): + if widget.get_active(): + self.owner.setPaused( True ) + else: + self.owner.setPaused( False ) + + class DesktopToolbar( gtk.Toolbar ): def __init__( self, owner ): @@ -267,6 +287,55 @@ class DesktopToolbar( gtk.Toolbar ): def setDesktop( self, widget, which ): if widget.get_active(): self.owner._setDesktop( which ) + +class RecordToolbar(gtk.Toolbar): + def __init__(self, jam): + gtk.Toolbar.__init__(self) + + def _insertSeparator(x = 1): + for i in range(x): + self.separator = gtk.SeparatorToolItem() + self.separator.set_draw(True) + self.insert(self.separator,-1) + self.separator.show() + + #self.toolbox = toolbox + self.jam = jam + + self.micRec1Button = ToolButton('rec1') + self.micRec1Button.connect('clicked',self.jam.micRec,'mic1') + self.insert(self.micRec1Button, -1) + self.micRec1Button.show() + self.micRec1Button.set_tooltip(_('Record microphone into slot 1')) + + self.micRec2Button = ToolButton('rec2') + self.micRec2Button.connect('clicked',self.jam.micRec,'mic2') + self.insert(self.micRec2Button, -1) + self.micRec2Button.show() + self.micRec2Button.set_tooltip(_('Record microphone into slot 2')) + + self.micRec3Button = ToolButton('rec3') + self.micRec3Button.connect('clicked',self.jam.micRec,'mic3') + self.insert(self.micRec3Button, -1) + self.micRec3Button.show() + self.micRec3Button.set_tooltip(_('Record microphone into slot 3')) + + self.micRec4Button = ToolButton('rec4') + self.micRec4Button.connect('clicked',self.jam.micRec,'mic4') + self.insert(self.micRec4Button, -1) + self.micRec4Button.show() + self.micRec4Button.set_tooltip(('Record microphone into slot 4')) + + _insertSeparator() + + self._loopSettingsPalette = LoopSettingsPalette(_('Add new Sound'), self.jam) + self.loopSetButton = ToggleToolButton('loop') + self.loopSetButton.set_palette(self._loopSettingsPalette) + self.insert(self.loopSetButton, -1) + self.loopSetButton.show() + + self.show_all() + class LoopSettingsPalette( Palette ): def __init__( self, label, jam ): Palette.__init__( self, label ) @@ -505,3 +574,4 @@ class LoopSettingsPalette( Palette ): self.playStopButton.set_active(False) gobject.source_remove(self.timeoutStop) self.ok = True + |