Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Config.py4
-rw-r--r--Edit/MainWindow.py6
-rwxr-xr-xResources/Sounds/drum1chinebin80044 -> 20480 bytes
-rw-r--r--Resources/univorc.csd109
-rw-r--r--SynthLab/Parameter.py2
-rw-r--r--SynthLab/SynthLabParametersWindow.py20
-rw-r--r--SynthLab/SynthLabWindow.py13
-rwxr-xr-xTamTam.py3
-rw-r--r--Util/CSoundClient.py10
-rw-r--r--Util/Clooper/aclient.cpp31
-rw-r--r--Util/Trackpad.py6
-rw-r--r--miniTamTam/KeyboardStandAlone.py6
-rw-r--r--miniTamTam/miniTamTamMain.py4
13 files changed, 143 insertions, 71 deletions
diff --git a/Config.py b/Config.py
index f2a8627..aa46eab 100644
--- a/Config.py
+++ b/Config.py
@@ -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
index 6e7580b..11d20f7 100755
--- a/Resources/Sounds/drum1chine
+++ b/Resources/Sounds/drum1chine
Binary files differ
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 ):
diff --git a/TamTam.py b/TamTam.py
index d746af2..24b0779 100755
--- a/TamTam.py
+++ b/TamTam.py
@@ -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 ]