Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TamTamJam.activity/Jam
diff options
context:
space:
mode:
authoramartin <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)
commit32a03b1c90a0df81f97104a671dddaa137b634af (patch)
tree1a205f59fe85f9073e4ceecc657b23540815fb9d /TamTamJam.activity/Jam
parent0547c68b55579fca5eb1e87753bc1dc019aefb05 (diff)
network
Diffstat (limited to 'TamTamJam.activity/Jam')
-rw-r--r--TamTamJam.activity/Jam/JamMain.py28
-rw-r--r--TamTamJam.activity/Jam/Toolbars.py242
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
+