Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoramartin <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)
commit1552274d1344d91f5744367e58eff9392aa5b7b9 (patch)
tree37ff86d7c97cffb703b0887f57f1fd744de19151
parent8d3015f87bc7270572b419e184184abc139a497c (diff)
parent203bba3cf167efad03cb5b5327f7297ffdd345a6 (diff)
Merge branch 'master' of git+ssh://amartin@dev.laptop.org/git/projects/tamtam
-rw-r--r--Config.py2
-rwxr-xr-xResources/Images/helpShow0.jpgbin0 -> 47067 bytes
-rwxr-xr-xResources/Images/helpShow1.jpgbin0 -> 131717 bytes
-rwxr-xr-xResources/Images/helpShow2.jpgbin0 -> 115432 bytes
-rwxr-xr-xResources/Images/helpShow3.jpgbin0 -> 103192 bytes
-rwxr-xr-xResources/Images/helpShow4.jpgbin0 -> 130566 bytes
-rwxr-xr-xResources/Images/helpShow5.jpgbin0 -> 147099 bytes
-rwxr-xr-xResources/Images/helpShow6.jpgbin0 -> 117896 bytes
-rwxr-xr-xResources/Images/helpShow7.jpgbin0 -> 132742 bytes
-rwxr-xr-xResources/Images/helpShow8.jpgbin0 -> 73756 bytes
-rw-r--r--Resources/univorc.csd20
-rw-r--r--SynthLab/SynthLabToolbars.py96
-rw-r--r--SynthLab/SynthLabWindow.py21
-rwxr-xr-xTamTam.py12
-rw-r--r--Util/LoopSettings.py50
-rw-r--r--Welcome.py70
-rw-r--r--icons/overrec.svg15
-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.py4
-rw-r--r--miniTamTam/miniTamTamMain.py21
-rw-r--r--miniTamTam/miniToolbars.py44
26 files changed, 314 insertions, 77 deletions
diff --git a/Config.py b/Config.py
index 8caa0a9..296d3c8 100644
--- a/Config.py
+++ b/Config.py
@@ -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
new file mode 100755
index 0000000..635603a
--- /dev/null
+++ b/Resources/Images/helpShow0.jpg
Binary files differ
diff --git a/Resources/Images/helpShow1.jpg b/Resources/Images/helpShow1.jpg
new file mode 100755
index 0000000..92e8473
--- /dev/null
+++ b/Resources/Images/helpShow1.jpg
Binary files differ
diff --git a/Resources/Images/helpShow2.jpg b/Resources/Images/helpShow2.jpg
new file mode 100755
index 0000000..c8fe527
--- /dev/null
+++ b/Resources/Images/helpShow2.jpg
Binary files differ
diff --git a/Resources/Images/helpShow3.jpg b/Resources/Images/helpShow3.jpg
new file mode 100755
index 0000000..2915037
--- /dev/null
+++ b/Resources/Images/helpShow3.jpg
Binary files differ
diff --git a/Resources/Images/helpShow4.jpg b/Resources/Images/helpShow4.jpg
new file mode 100755
index 0000000..1126984
--- /dev/null
+++ b/Resources/Images/helpShow4.jpg
Binary files differ
diff --git a/Resources/Images/helpShow5.jpg b/Resources/Images/helpShow5.jpg
new file mode 100755
index 0000000..5b9d5a7
--- /dev/null
+++ b/Resources/Images/helpShow5.jpg
Binary files differ
diff --git a/Resources/Images/helpShow6.jpg b/Resources/Images/helpShow6.jpg
new file mode 100755
index 0000000..61c4048
--- /dev/null
+++ b/Resources/Images/helpShow6.jpg
Binary files differ
diff --git a/Resources/Images/helpShow7.jpg b/Resources/Images/helpShow7.jpg
new file mode 100755
index 0000000..6cd6555
--- /dev/null
+++ b/Resources/Images/helpShow7.jpg
Binary files differ
diff --git a/Resources/Images/helpShow8.jpg b/Resources/Images/helpShow8.jpg
new file mode 100755
index 0000000..4201a1d
--- /dev/null
+++ b/Resources/Images/helpShow8.jpg
Binary files differ
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()
diff --git a/TamTam.py b/TamTam.py
index ef24a00..c682aea 100755
--- a/TamTam.py
+++ b/TamTam.py
@@ -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)
diff --git a/Welcome.py b/Welcome.py
index 5fed814..ab71b57 100644
--- a/Welcome.py
+++ b/Welcome.py
@@ -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