From 1f827299ad820c1ca6f7ea6cde29cb702f89ad7e Mon Sep 17 00:00:00 2001 From: Oli Date: Fri, 23 May 2008 15:15:58 +0000 Subject: security model, cleanup, SynthLab to OGG --- (limited to 'TamTamSynthLab.activity') diff --git a/TamTamSynthLab.activity/MANIFEST b/TamTamSynthLab.activity/MANIFEST index 1f5b7cb..1793f97 100644 --- a/TamTamSynthLab.activity/MANIFEST +++ b/TamTamSynthLab.activity/MANIFEST @@ -112,6 +112,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 @@ + + + + + + + + + + + + + + -- cgit v0.9.1