Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TamTamSynthLab.activity
diff options
context:
space:
mode:
authorPootle Translation <pootle@dev.laptop.org>2008-05-27 04:30:07 (GMT)
committer Pootle Translation <pootle@dev.laptop.org>2008-05-27 04:30:07 (GMT)
commit8900ef5f0fcf5005234f25023acdced1a37387de (patch)
tree579559a2b4d3851865d91eab115e0cf78191f312 /TamTamSynthLab.activity
parent89767dd1d5d472fc9f13139497ea575e30330af8 (diff)
parentd898ded314ef368770fd8a01cb7ef8cef1065dd3 (diff)
Merge branch 'master' of git+ssh://dev.laptop.org/git/projects/tamtam
Diffstat (limited to 'TamTamSynthLab.activity')
-rw-r--r--TamTamSynthLab.activity/MANIFEST74
-rw-r--r--TamTamSynthLab.activity/NEWS3
-rw-r--r--TamTamSynthLab.activity/SynthLab/SynthLabMain.py84
-rw-r--r--TamTamSynthLab.activity/SynthLab/SynthLabToolbars.py9
-rw-r--r--TamTamSynthLab.activity/TamTamSynthLab.py2
-rw-r--r--TamTamSynthLab.activity/icons/recordO.svg18
6 files changed, 152 insertions, 38 deletions
diff --git a/TamTamSynthLab.activity/MANIFEST b/TamTamSynthLab.activity/MANIFEST
index 1f5b7cb..f513fb2 100644
--- a/TamTamSynthLab.activity/MANIFEST
+++ b/TamTamSynthLab.activity/MANIFEST
@@ -4,47 +4,58 @@ setup.py
TamTamSynthLab.py
activity/activity-tamtamsynthlab.svg
activity/activity.info
-po/ne.po
+po/TamTamSynthLab.pot
po/am.po
-po/fa.po
-po/en.po
-po/ca.po
po/ar.po
-po/ig.po
-po/yo.po
+po/ay.po
+po/bg.po
po/bn.po
-po/qu.po
-po/pseudo.po
+po/bn_IN.po
+po/ca.po
+po/de.po
+po/dz.po
po/el.po
-po/ur.po
-po/TamTamSynthLab.pot
-po/bg.po
-po/hi.po
-po/fa_AF.po
-po/pt_BR.po
-po/nl.po
-po/te.po
+po/en.po
po/es.po
-po/mk.po
-po/pl.po
-po/ro.po
-po/bn_IN.po
+po/fa.po
+po/fa_AF.po
+po/ff.po
+po/fr.po
+po/gu.po
+po/ha.po
+po/hi.po
+po/ht.po
+po/ig.po
+po/is.po
+po/it.po
po/ja.po
-po/dz.po
+po/km.po
+po/ko.po
+po/mk.po
+po/ml.po
+po/mn.po
+po/mr.po
+po/ne.po
+po/nl.po
po/pa.po
-po/ay.po
+po/pl.po
po/ps.po
-po/de.po
-po/ml.po
-po/th.po
-po/rw.po
-po/fr.po
+po/pseudo.po
po/pt.po
-po/is.po
-po/ff.po
+po/pt_BR.po
+po/qu.po
+po/ro.po
po/ru.po
-po/ha.po
-po/mn.po
+po/rw.po
+po/si.po
+po/te.po
+po/th.po
+po/tr.po
+po/ur.po
+po/vi.po
+po/yo.po
+po/zh_CN.po
+po/zh_TW.po
icons/accept.svg
icons/cancel.svg
icons/preset10.svg
@@ -112,6 +123,7 @@ icons/sl-voice+.svg
icons/sl-wguide-menu.svg
icons/sl-wguide+.svg
icons/tam-help.svg
+icons/recordO.svg
icons/XYButDownClick.svg
icons/XYButDown.svg
icons/XYBut.svg
diff --git a/TamTamSynthLab.activity/NEWS b/TamTamSynthLab.activity/NEWS
index 1f09b88..28d6145 100644
--- a/TamTamSynthLab.activity/NEWS
+++ b/TamTamSynthLab.activity/NEWS
@@ -1,5 +1,8 @@
49
+* Extended duration and save OGG files in the journal (Olipet)
+* SynthLab follows security model (Olipet)
+
48
* Updated po files (Flipo)
diff --git a/TamTamSynthLab.activity/SynthLab/SynthLabMain.py b/TamTamSynthLab.activity/SynthLab/SynthLabMain.py
index a593f19..9bc56c3 100644
--- a/TamTamSynthLab.activity/SynthLab/SynthLabMain.py
+++ b/TamTamSynthLab.activity/SynthLab/SynthLabMain.py
@@ -24,6 +24,7 @@ from SynthLab.SynthLabConstants import SynthLabConstants
from SynthLab.SynthLabToolbars import mainToolbar
from SynthLab.SynthLabToolbars import presetToolbar
from common.Util.Trackpad import Trackpad
+from sugar.datastore import datastore
as_window = False
@@ -52,6 +53,7 @@ class SynthLabMain(gtk.EventBox):
self.updateBounds(i)
self.instanceOpen = 0
self.recordWait = 0
+ self.table = 0
self.recCount = 0
self.new = True
self.selectGate = False
@@ -145,10 +147,11 @@ class SynthLabMain(gtk.EventBox):
slider1Min = SynthLabConstants.TYPES[selectedType][4]
slider1Max = SynthLabConstants.TYPES[selectedType][5]
- slider2Min = SynthLabConstants.TYPES[selectedType][6]
if selectedType == 'sample' or selectedType == 'grain':
+ slider2Min = 4
slider2Max = len(self.sample_names)
else:
+ slider2Min = SynthLabConstants.TYPES[selectedType][6]
slider2Max = SynthLabConstants.TYPES[selectedType][7]
slider3Min = SynthLabConstants.TYPES[selectedType][8]
slider3Max = SynthLabConstants.TYPES[selectedType][9]
@@ -411,11 +414,12 @@ class SynthLabMain(gtk.EventBox):
slider1Min = SynthLabConstants.TYPES[selectedType][4]
slider1Max = SynthLabConstants.TYPES[selectedType][5]
- slider2Min = SynthLabConstants.TYPES[selectedType][6]
if selectedType == 'sample' or selectedType == 'grain':
self.sample_names = [name for i in range( len( self.instrumentDB.instNamed ) ) for name in self.instrumentDB.instNamed.keys() if self.instrumentDB.instNamed[ name ].instrumentId == i ]
+ slider2Min = 4
slider2Max = len(self.sample_names)
else:
+ slider2Min = SynthLabConstants.TYPES[selectedType][6]
slider2Max = SynthLabConstants.TYPES[selectedType][7]
slider3Min = SynthLabConstants.TYPES[selectedType][8]
slider3Max = SynthLabConstants.TYPES[selectedType][9]
@@ -504,8 +508,45 @@ class SynthLabMain(gtk.EventBox):
def resetRecord( self ):
gobject.source_remove( self.wait )
self.recordButton.set_active(False)
- inst = 'lab' + str(self.table-85)
- self.csnd.load_synth_instrument(inst)
+ if self.table > 85:
+ inst = 'lab' + str(self.table-85)
+ self.csnd.load_synth_instrument(inst)
+ elif self.table == 85:
+ time.sleep(4)
+ self.csnd.__del__()
+ time.sleep(0.5)
+ command = "gst-launch-0.10 filesrc location=" + Config.INSTANCE_DIR + "/lab0 ! wavparse ! audioconvert ! vorbisenc ! oggmux ! filesink location=" + self.audioFileName
+ command2 = "rm " + Config.INSTANCE_DIR + "/lab0"
+ (status, output) = commands.getstatusoutput(command)
+ (status2, output2) = commands.getstatusoutput(command2)
+
+ jobject = datastore.create()
+ jobject.metadata['title'] = os.path.split(self.audioFileName)[1]
+ jobject.metadata['keep'] = '1'
+ jobject.metadata['mime_type'] = 'audio/ogg'
+ jobject.file_path = self.audioFileName
+ datastore.write(jobject)
+
+ os.remove(self.audioFileName)
+
+ self.csnd.__init__()
+ time.sleep(0.1)
+ self.csnd.connect(True)
+ time.sleep(0.1)
+ self.csnd.load_instruments()
+ time.sleep(0.3)
+ self.initializeConnections()
+ self.controlToSrcConnections()
+ time.sleep(.01)
+ self.controlToFxConnections()
+ time.sleep(.01)
+ self.audioConnections()
+ time.sleep(.01)
+ self.synthObjectsParameters.update()
+ self.writeTables( self.synthObjectsParameters.types, self.synthObjectsParameters.controlsParameters, self.synthObjectsParameters.sourcesParameters, self.synthObjectsParameters.fxsParameters )
+ time.sleep(.01)
+ self.invalidate_rect( 0, 0, self.drawingAreaWidth, self.drawingAreaHeight )
+
self.table = 0
return True
@@ -529,7 +570,10 @@ class SynthLabMain(gtk.EventBox):
def playNote( self, midiPitch, table ):
cpsPitch = 261.626*pow(1.0594633, midiPitch-36)
self.recCount += 1
- mess = "i5203." + str(self.recCount) + " 0 " + str(self.duration) + " " + str(cpsPitch) + " " + str(table) + " " + " ".join([str(n) for n in self.synthObjectsParameters.getOutputParameters()]) + ' "%s"' % Config.DATA_DIR
+ if self.table == 85:
+ mess = "i5203." + str(self.recCount) + " 0 " + str(self.duration) + " " + str(cpsPitch) + " " + str(table) + " " + " ".join([str(n) for n in self.synthObjectsParameters.getOutputParameters()]) + ' "%s"' % Config.INSTANCE_DIR
+ else:
+ mess = "i5203." + str(self.recCount) + " 0 " + str(self.duration) + " " + str(cpsPitch) + " " + str(table) + " " + " ".join([str(n) for n in self.synthObjectsParameters.getOutputParameters()]) + ' "%s"' % Config.DATA_DIR
self.csnd.inputMessage( mess )
if self.recCount >= 9: self.recCount = 0
@@ -1181,6 +1225,36 @@ class SynthLabMain(gtk.EventBox):
else:
self.recordWait = 0
+ def recordOgg( self, widget, data=None ):
+ if widget.get_active() == True:
+ chooser = gtk.FileChooserDialog(
+ title='Save Synth sound as Audio file',
+ action=gtk.FILE_CHOOSER_ACTION_SAVE,
+ buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_SAVE,gtk.RESPONSE_OK))
+ filter = gtk.FileFilter()
+ filter.add_pattern('*.ogg')
+ chooser.set_filter(filter)
+ chooser.set_current_folder(Config.INSTANCE_DIR)
+
+ for f in chooser.list_shortcut_folder_uris():
+ chooser.remove_shortcut_folder_uri(f)
+
+ if chooser.run() == gtk.RESPONSE_OK:
+ head, tail = os.path.split(chooser.get_filename())
+ tailfilt = '_'.join(tail.split())
+ self.audioFileName = os.path.join(head, tailfilt)
+ if self.audioFileName[-4:] != '.ogg':
+ self.audioFileName += '.ogg'
+ chooser.destroy()
+
+ if os.path.isfile(Config.INSTANCE_DIR + '/lab0'):
+ os.system('rm ' + Config.INSTANCE_DIR + '/lab0')
+ self.recordButton = widget
+ self.recordWait = 1
+ self.table = 85
+ else:
+ self.recordWait = 0
+
def updateSound( self ):
self.controlToSrcConnections()
time.sleep(.01)
diff --git a/TamTamSynthLab.activity/SynthLab/SynthLabToolbars.py b/TamTamSynthLab.activity/SynthLab/SynthLabToolbars.py
index 5dd6334..58a3c9c 100644
--- a/TamTamSynthLab.activity/SynthLab/SynthLabToolbars.py
+++ b/TamTamSynthLab.activity/SynthLab/SynthLabToolbars.py
@@ -30,7 +30,7 @@ class mainToolbar(gtk.Toolbar):
self.durationSliderLabelSecond = gtk.Label(_(' s.'))
self.durationSliderLabelSecondTool = gtk.ToolItem()
self.durationSliderLabelSecondTool.add(self.durationSliderLabelSecond)
- self.durationSliderAdj = gtk.Adjustment(2, .5, 10, .01, .01, 0)
+ self.durationSliderAdj = gtk.Adjustment(2, .5, 30, .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)
@@ -87,6 +87,13 @@ class mainToolbar(gtk.Toolbar):
self.synthRec6Button.show()
self.synthRec6Button.set_tooltip(_('Record Synth sound into slot "lab6"'))
+ #RecordOgg button
+ self.recordOggButton = ToggleToolButton('recordO')
+ self.recordOggButton.connect('clicked', self.synthLab.recordOgg)
+ self.insert(self.recordOggButton, -1)
+ self.recordOggButton.show()
+ self.recordOggButton.set_tooltip(_('Record to ogg'))
+
_insertSeparator(1)
self.resetButton = ToolButton('sl-reset')
diff --git a/TamTamSynthLab.activity/TamTamSynthLab.py b/TamTamSynthLab.activity/TamTamSynthLab.py
index 483d4f0..1f27c51 100644
--- a/TamTamSynthLab.activity/TamTamSynthLab.py
+++ b/TamTamSynthLab.activity/TamTamSynthLab.py
@@ -22,7 +22,7 @@ class TamTamSynthLab(activity.Activity):
def __init__(self, handle):
activity.Activity.__init__(self, handle)
- for snd in ['mic1','mic2','mic3','mic4','lab1','lab2','lab3','lab4', 'lab5', 'lab6']:
+ for snd in ['lab1','lab2','lab3','lab4', 'lab5', 'lab6']:
if not os.path.isfile(os.path.join(Config.DATA_DIR, snd)):
shutil.copyfile(Config.SOUNDS_DIR + '/' + snd , Config.DATA_DIR + '/' + snd)
os.system('chmod 0777 ' + Config.DATA_DIR + '/' + snd + ' &')
diff --git a/TamTamSynthLab.activity/icons/recordO.svg b/TamTamSynthLab.activity/icons/recordO.svg
new file mode 100644
index 0000000..83f8cfe
--- /dev/null
+++ b/TamTamSynthLab.activity/icons/recordO.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="55px" height="55px" viewBox="0 0 55 55" enable-background="new 0 0 55 55" xml:space="preserve">
+<g>
+ <circle fill="#808284" cx="27" cy="27" r="22.5"/>
+ <circle fill="none" stroke="#4C4D4F" stroke-width="2.25" cx="26.999" cy="27" r="18.677"/>
+ <path fill="#FFFFFF" d="M34.895,27c0,4.354-3.541,7.895-7.895,7.895S19.104,31.354,19.104,27c0-4.354,3.54-7.895,7.895-7.895
+ C31.354,19.105,34.895,22.646,34.895,27z"/>
+</g>
+<g>
+ <path fill="none" stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" d="M31,42.936
+ c0.043,0.068,4.286-17.459,10.357,0"/>
+ <path fill="none" stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" d="M51,41.445
+ c-0.045-0.068-4.286,17.461-10.357,0"/>
+</g>
+</svg>