diff options
author | Pootle 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) |
commit | 8900ef5f0fcf5005234f25023acdced1a37387de (patch) | |
tree | 579559a2b4d3851865d91eab115e0cf78191f312 /TamTamSynthLab.activity | |
parent | 89767dd1d5d472fc9f13139497ea575e30330af8 (diff) | |
parent | d898ded314ef368770fd8a01cb7ef8cef1065dd3 (diff) |
Merge branch 'master' of git+ssh://dev.laptop.org/git/projects/tamtam
Diffstat (limited to 'TamTamSynthLab.activity')
-rw-r--r-- | TamTamSynthLab.activity/MANIFEST | 74 | ||||
-rw-r--r-- | TamTamSynthLab.activity/NEWS | 3 | ||||
-rw-r--r-- | TamTamSynthLab.activity/SynthLab/SynthLabMain.py | 84 | ||||
-rw-r--r-- | TamTamSynthLab.activity/SynthLab/SynthLabToolbars.py | 9 | ||||
-rw-r--r-- | TamTamSynthLab.activity/TamTamSynthLab.py | 2 | ||||
-rw-r--r-- | TamTamSynthLab.activity/icons/recordO.svg | 18 |
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>
|