diff options
-rw-r--r-- | Config.py | 4 | ||||
-rw-r--r-- | Edit/MainWindow.py | 6 | ||||
-rwxr-xr-x | Resources/Sounds/drum1chine | bin | 80044 -> 20480 bytes | |||
-rw-r--r-- | Resources/univorc.csd | 109 | ||||
-rw-r--r-- | SynthLab/Parameter.py | 2 | ||||
-rw-r--r-- | SynthLab/SynthLabParametersWindow.py | 20 | ||||
-rw-r--r-- | SynthLab/SynthLabWindow.py | 13 | ||||
-rwxr-xr-x | TamTam.py | 3 | ||||
-rw-r--r-- | Util/CSoundClient.py | 10 | ||||
-rw-r--r-- | Util/Clooper/aclient.cpp | 31 | ||||
-rw-r--r-- | Util/Trackpad.py | 6 | ||||
-rw-r--r-- | miniTamTam/KeyboardStandAlone.py | 6 | ||||
-rw-r--r-- | miniTamTam/miniTamTamMain.py | 4 |
13 files changed, 143 insertions, 71 deletions
@@ -204,8 +204,8 @@ LOW, MID, HIGH, PUNCH = range( 4 ) INSTRUMENT_TABLE_OFFSET = 5000 INST_FREE = 5000 INST_TIED = 5001 -INST_PERC = 5002 -INST_SIMP = 5003 +INST_SIMP = 5011 +INST_PERC = 5021 CATEGORIES = ['all','animals','concret','electronic','keyboard','people','percussions','strings','winds'] INSTRUMENTS = { diff --git a/Edit/MainWindow.py b/Edit/MainWindow.py index 4a18ef6..51472a3 100644 --- a/Edit/MainWindow.py +++ b/Edit/MainWindow.py @@ -485,6 +485,7 @@ class MainWindow( SubActivity ): self.noteDB.addListener( self, page=True, note=True ) self.csnd.setMasterVolume( self.getVolume() ) + self.initTrackVolume() for tid in range(Config.NUMBER_OF_TRACKS): self.handleInstrumentChanged( ( tid, self._data['track_inst'][tid] ) ) @@ -681,8 +682,13 @@ class MainWindow( SubActivity ): img = min(3,int(4*self._data["volume"]/100)) # volume 0-3 self.GUI["2volumeImage"].set_from_file( Config.IMAGE_ROOT+"volume"+str(img)+".png" ) + def initTrackVolume( self ): + for i in range(Config.NUMBER_OF_TRACKS): + self.csnd.setTrackVolume(self._data["track_volume"][i], i) + def handleTrackVolume( self, widget, track ): self._data["track_volume"][track] = round( widget.get_value() ) + self.csnd.setTrackVolume(self._data["track_volume"][track], track) def getTrackInstrument( self, track ): return self._data["track_inst"][track] diff --git a/Resources/Sounds/drum1chine b/Resources/Sounds/drum1chine Binary files differindex 6e7580b..11d20f7 100755 --- a/Resources/Sounds/drum1chine +++ b/Resources/Sounds/drum1chine diff --git a/Resources/univorc.csd b/Resources/univorc.csd index 8b51ceb..da87a7e 100644 --- a/Resources/univorc.csd +++ b/Resources/univorc.csd @@ -622,6 +622,25 @@ zacl 0, 8 endin +/*********************** +DELETE RESOURCES +************************/ + +instr 5000 + +icount init 0 + +again: +ftfree 5000+icount, 0 +icount = icount+1 + +if icount < p4 goto again + +turnoff + +endin + + /**************************************************************** Soundfile player with tied notes ****************************************************************/ @@ -636,7 +655,13 @@ endin /************************* pitch, reverbGain, amp, pan, table, att, dec, filtType, cutoff, loopstart, loopend, crossdur *************************/ -instr 5001 +instr 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010 + +iTrackId = int(p(1)-5001) +SvolTrackName sprintf "trackVolume%0d", iTrackId +kvol chnget SvolTrackName +kvol = kvol * 0.01 +kvol port kvol, .01 idurfadein init 0.005 idurfadeout init 0.095 @@ -696,7 +721,7 @@ a1 bqrez a1, kcutoff, 6, p11-1 a1 balance a1, acomp endif -a1 = a1*kenv +a1 = a1*kenv*kvol gaoutL = a1*(1-kpan)+gaoutL gaoutR = a1*kpan+gaoutR @@ -706,49 +731,6 @@ gainrev = a1*krg+gainrev tieskip: endin -/*********************** -DELETE RESOURCES -************************/ - -instr 5000 - -icount init 0 - -again: -ftfree 5000+icount, 0 -icount = icount+1 - -if icount < p4 goto again - -turnoff - -endin - -/******************************************************************** -soundfile player for percussion - resonance notes -********************************************************************/ -instr 5002 - -a1 flooper2 1, p4, .25, .750, .2, p8 - -if (p11-1) != -1 then -acomp = a1 -a1 bqrez a1, p12, 6, p11-1 -a1 balance a1, acomp -endif - -kenv expseg 0.001, .003, .6, p3 - .003, 0.001 -klocalenv adsr p8, 0.05, .8, p10 - -a1 = a1*kenv*klocalenv - -gaoutL = a1*(1-p7)+gaoutL -gaoutR = a1*p7+gaoutR - -gainrev = a1*p5+gainrev - -endin - /************************************************************** Simple soundfile player **************************************************************/ @@ -765,7 +747,13 @@ event_i "i", p4, i2, p6, p7, p8, p9, p10, p11, p12, p13, p14 endin -instr 5003 +instr 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020 + +iTrackId = int(p(1)-5011) +SvolTrackName1 sprintf "trackVolume%0d", iTrackId +kvol chnget SvolTrackName1 +kvol = kvol * 0.01 +kvol port kvol, .01 p3 = nsamp(p8) * giScale / p4 @@ -779,7 +767,7 @@ endif kenv adsr p9, 0.05, .8, p10 -a1 = a1*kenv +a1 = a1*kenv*kvol gaoutL = a1*(1-p7)+gaoutL gaoutR = a1*p7+gaoutR @@ -788,6 +776,33 @@ gainrev = a1*p5+gainrev endin +/******************************************************************** +soundfile player for percussion - resonance notes +********************************************************************/ +instr 5021 + +a1 flooper2 1, p4, .25, .750, .2, p8 + +if (p11-1) != -1 then +acomp = a1 +a1 bqrez a1, p12, 6, p11-1 +a1 balance a1, acomp +endif + +kenv expseg 0.001, .003, .6, p3 - .003, 0.001 +klocalenv adsr p8, 0.05, .8, p10 + +a1 = a1*kenv*klocalenv + +gaoutL = a1*(1-p7)+gaoutL +gaoutR = a1*p7+gaoutR + +gainrev = a1*p5+gainrev + +endin + + + </CsInstruments> <CsScore> f1 0 8192 10 1 diff --git a/SynthLab/Parameter.py b/SynthLab/Parameter.py index add1d21..4a7a519 100644 --- a/SynthLab/Parameter.py +++ b/SynthLab/Parameter.py @@ -13,7 +13,7 @@ class Parameter( gtk.Window ): self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) color = gtk.gdk.color_parse(Config.INST_BCK_COLOR) self.modify_bg(gtk.STATE_NORMAL, color) - self.move(15, 660) + self.move(15, 650) self.set_size_request(450, 40) self.set_decorated(False) mainBox = RoundHBox(fillcolor=Config.INST_BCK_COLOR, bordercolor=Config.INST_BCK_COLOR) diff --git a/SynthLab/SynthLabParametersWindow.py b/SynthLab/SynthLabParametersWindow.py index 45aff9f..243d70a 100644 --- a/SynthLab/SynthLabParametersWindow.py +++ b/SynthLab/SynthLabParametersWindow.py @@ -7,14 +7,14 @@ from Util.ThemeWidgets import * from SynthLab.SynthLabConstants import SynthLabConstants from SynthLab.Parameter import Parameter from Util.Trackpad import Trackpad +from Util.CSoundClient import new_csound_client Tooltips = Config.Tooltips class SynthLabParametersWindow( gtk.Window ): - def __init__( self, instanceID, synthObjectsParameters, writeTables, playNoteFunction, client ): + def __init__( self, instanceID, synthObjectsParameters, writeTables, playNoteFunction ): gtk.Window.__init__( self, gtk.WINDOW_TOPLEVEL ) self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) - self.set_title("SynthLab Parameters") self.set_position( gtk.WIN_POS_CENTER ) self.set_default_size(30, 300) self.set_border_width(0) @@ -28,13 +28,14 @@ class SynthLabParametersWindow( gtk.Window ): self.add_events(gtk.gdk.KEY_RELEASE_MASK) self.connect("key-press-event", self.onKeyPress) self.connect("key-release-event", self.onKeyRelease) + self.connect('focus_in_event',self.onFocusIn) + self.connect('focus_out_event',self.onFocusOut) self.instanceID = instanceID self.objectType = self.instanceID / 4 self.synthObjectsParameters = synthObjectsParameters self.writeTables = writeTables self.playNoteFunction = playNoteFunction - self.csnd = client - self.trackpad = Trackpad( self, self.csnd ) + self.trackpad = Trackpad( self ) self.playingPitch = [] self.parameterOpen = 0 self.clockStart = 0 @@ -136,6 +137,16 @@ class SynthLabParametersWindow( gtk.Window ): self.add(self.mainBox) self.show_all() + def onFocusIn(self, event, data=None): + print 'DEBUG: Params Window::onFocusIn' + csnd = new_csound_client() + csnd.connect(True) + + def onFocusOut(self, event, data=None): + print 'DEBUG: Params Window::onFocusOut' + + + def destroy( self, data=None ): self.hide() @@ -146,6 +157,7 @@ class SynthLabParametersWindow( gtk.Window ): midiPitch = Config.KEY_MAP[key] if midiPitch not in self.playingPitch: self.playingPitch.append( midiPitch ) + print midiPitch self.playNoteFunction( midiPitch, 0 ) def onKeyRelease( self, widget, event ): diff --git a/SynthLab/SynthLabWindow.py b/SynthLab/SynthLabWindow.py index 3f3fd26..d7b7d2f 100644 --- a/SynthLab/SynthLabWindow.py +++ b/SynthLab/SynthLabWindow.py @@ -32,7 +32,7 @@ class SynthLabWindow(SubActivity): self.set_keep_above(False) self.set_decorated(False) self.csnd = new_csound_client() - self.trackpad = Trackpad( self, self.csnd ) + self.trackpad = Trackpad( self ) self.table = table self.synthObjectsParameters = SynthObjectsParameters() self.resetLocations() @@ -178,16 +178,15 @@ class SynthLabWindow(SubActivity): self.tooltips.set_tip(resetButton, Tooltips.RESET) self.tooltips.set_tip(closeButton, Tooltips.CLOSE) self.add(self.mainBox) + self.tooltips.set_tip(self.durationSlider, Tooltips.SOUNDDUR + ': ' + self.durString) tempFile = 'synthTemp' + str(self.table - 85) if tempFile in os.listdir(Config.PREF_DIR): self.handleLoadTemp() else: self.presetCallback(self.presets,0) - - self.tooltips.set_tip(self.durationSlider, Tooltips.SOUNDDUR + ': ' + self.durString) - + self.show_all() - + def onDestroy(self): pass @@ -201,9 +200,7 @@ class SynthLabWindow(SubActivity): self.playingPitch.append( midiPitch ) self.playNote( midiPitch, 0 ) else: - #self.csnd.inputMessage("i5204 0.02 4 " + str(self.table) ) self.recordWait = 0 - #time.sleep(0.02) self.playingPitch.append( midiPitch ) self.playNote( midiPitch, self.table ) self.waitRecording() @@ -353,7 +350,7 @@ class SynthLabWindow(SubActivity): if self.bounds[i][0] < event.x < self.bounds[i][2] and self.bounds[i][1] < event.y < self.bounds[i][3]: if self.instanceOpen: self.synthLabParametersWindow.destroy() - self.synthLabParametersWindow = SynthLabParametersWindow( i, self.synthObjectsParameters, self.writeTables, self.playNote, self.csnd ) + self.synthLabParametersWindow = SynthLabParametersWindow( i, self.synthObjectsParameters, self.writeTables, self.playNote ) self.instanceOpen = 1 def handleMotion( self, widget, event ): @@ -11,6 +11,7 @@ from miniTamTam.miniTamTamMain import miniTamTamMain from Edit.MainWindow import MainWindow from Welcome import Welcome from SynthLab.SynthLabWindow import SynthLabWindow +from Util.Trackpad import Trackpad try : from sugar.activity.Activity import Activity @@ -42,6 +43,8 @@ class TamTam(Activity): self.set_title('TamTam') self.set_resizable(False) + self.trackpad = Trackpad( self ) + self.connect('focus_in_event',self.onFocusIn) self.connect('focus_out_event',self.onFocusOut) self.connect('destroy', self.onDestroy) diff --git a/Util/CSoundClient.py b/Util/CSoundClient.py index 399df60..0793b4d 100644 --- a/Util/CSoundClient.py +++ b/Util/CSoundClient.py @@ -17,7 +17,7 @@ class _CSoundClientPlugin: def __init__(self, orc): sc_initialize(orc) self.on = False - self.masterVolume = 80.0 + #self.masterVolume = 80.0 self.periods_per_buffer = 2 def __del__(self): @@ -26,10 +26,14 @@ class _CSoundClientPlugin: def setMasterVolume(self, volume): - self.masterVolume = volume + #self.masterVolume = volume if self.on: sc_setMasterVolume(volume) + def setTrackVolume( self, volume, trackId ): + self.trackVolume = volume + sc_setTrackVolume(volume, trackId) + def setTrackpadX( self, value ): trackpadX = value sc_setTrackpadX(trackpadX) @@ -226,7 +230,7 @@ class _CSoundClientPlugin: a = array.array('f') a.extend( [ - Config.INSTRUMENTS[ instr ].csoundInstrumentId + trackId * 0.01, + (Config.INSTRUMENTS[ instr ].csoundInstrumentId + trackId) + trackId * 0.01, onset, duration, pitch, diff --git a/Util/Clooper/aclient.cpp b/Util/Clooper/aclient.cpp index 6b830c1..31b9c67 100644 --- a/Util/Clooper/aclient.cpp +++ b/Util/Clooper/aclient.cpp @@ -591,6 +591,24 @@ thread_fn_cleanup: } } + void setTrackVolume(MYFLT vol, int Id) + { + if (!csound) { + fprintf(stderr, "skipping %s, csound==NULL\n", __FUNCTION__); + return ; + } + MYFLT *p; + char buf[128]; + sprintf( buf, "trackVolume%i", Id); + fprintf(stderr, "DEBUG: setTrackvolume string [%s]\n", buf); + if (!(csoundGetChannelPtr(csound, &p, buf, CSOUND_CONTROL_CHANNEL | CSOUND_INPUT_CHANNEL))) + *p = (MYFLT) vol; + else + { + if (_debug) fprintf(_debug, "ERROR: failed to set track volume\n"); + } + } + void setTrackpadX(MYFLT value) { if (!csound) { @@ -738,6 +756,18 @@ DECL(sc_setMasterVolume) //(float v) Py_INCREF(Py_None); return Py_None; } +DECL(sc_setTrackVolume) //(float v) +{ + float v; + int i; + if (!PyArg_ParseTuple(args, "fi", &v, &i)) + { + return NULL; + } + sc_tt->setTrackVolume(v,i); + Py_INCREF(Py_None); + return Py_None; +} DECL(sc_setTrackpadX) //(float v) { float v; @@ -893,6 +923,7 @@ static PyMethodDef SpamMethods[] = { {"sc_stop", sc_stop, METH_VARARGS,""}, {"sc_scoreEvent", sc_scoreEvent, METH_VARARGS, ""}, {"sc_setMasterVolume", sc_setMasterVolume, METH_VARARGS, ""}, + {"sc_setTrackVolume", sc_setTrackVolume, METH_VARARGS, ""}, {"sc_setTrackpadX", sc_setTrackpadX, METH_VARARGS, ""}, {"sc_setTrackpadY", sc_setTrackpadY, METH_VARARGS, ""}, MDECL(sc_loop_getTick) diff --git a/Util/Trackpad.py b/Util/Trackpad.py index 5854e00..3aaf549 100644 --- a/Util/Trackpad.py +++ b/Util/Trackpad.py @@ -4,14 +4,15 @@ pygtk.require( '2.0' ) import gtk import gobject +from Util.CSoundClient import new_csound_client import Config KEY_MAP_PIANO = Config.KEY_MAP_PIANO class Trackpad: - def __init__(self, win, client): + def __init__(self, win): self.win = win - self.csnd = client + self.csnd = new_csound_client() win.add_events(gtk.gdk.POINTER_MOTION_MASK) win.add_events(gtk.gdk.BUTTON_PRESS_MASK) win.add_events(gtk.gdk.BUTTON_RELEASE_MASK) @@ -62,6 +63,7 @@ class Trackpad: self.current_x = X self.current_y = Y if self.buttonPressed: + print self.final_x, self.final_y self.final_x = X - self.first_x self.final_y = Y - self.first_y self.csnd.setTrackpadX(self.final_x) diff --git a/miniTamTam/KeyboardStandAlone.py b/miniTamTam/KeyboardStandAlone.py index 033edf2..ebaf6e2 100644 --- a/miniTamTam/KeyboardStandAlone.py +++ b/miniTamTam/KeyboardStandAlone.py @@ -20,7 +20,7 @@ class KeyboardStandAlone: self.getPlayState = getPlayState self.key_dict = dict() self.onset_dict = dict() - self.trackCount = 10 + self.trackCount = 0 self.instrument = 'flute' self.reverb = 0 @@ -38,8 +38,8 @@ class KeyboardStandAlone: # Assign on which track the note will be created according to the number of keys pressed track = self.trackCount self.trackCount += 1 - if self.trackCount >= 20: - self.trackCount = 10 + if self.trackCount >= 10: + self.trackCount = 0 # If the pressed key is in the keymap if KEY_MAP_PIANO.has_key(key): # CsoundNote parameters diff --git a/miniTamTam/miniTamTamMain.py b/miniTamTam/miniTamTamMain.py index dca6122..17aaab5 100644 --- a/miniTamTam/miniTamTamMain.py +++ b/miniTamTam/miniTamTamMain.py @@ -47,7 +47,9 @@ class miniTamTamMain(SubActivity): self.notesList = [] time.sleep(0.001) self.playbackTimeout = None - self.trackpad = Trackpad( self, self.csnd ) + self.trackpad = Trackpad( self ) + for i in range(21): + self.csnd.setTrackVolume( 100, i ) loopPointsTable = [] sample_names = [name for i in range( len( Config.INSTRUMENTS ) ) for name in Config.INSTRUMENTS.keys() if Config.INSTRUMENTS[ name ].instrumentId == i ] |