diff --git a/src/Reveal.hpp b/src/Reveal.hpp
index b89a56362627bc0eed68385e5c2609e6f0cc3f6f..f661aa26b75ee7ef93f1ccc1ce98e5f1bff6e783 100644
--- a/src/Reveal.hpp
+++ b/src/Reveal.hpp
@@ -79,7 +79,7 @@ class Reveal : public GroupModule {
 			POSTFILTER, RENDERTEX,
 
 			AUDIOTEX, AUDIORATE, MAXAUDIOVALUE, AUDIOBUFSIZE, AUDIOMIXSIZE,
-			PROCESSAUDIO, AUDIONEXTBUF
+			PROCESSAUDIO, AUDIONEXTBUF, AUDIONBTRACKS
 		};
 
 		enum GEOM_ID { 
diff --git a/src/modules/ProjectorModule.cpp b/src/modules/ProjectorModule.cpp
index 9eb8a592dd8c9b652b498026440915c94a7ebdb4..2e2975153f3ff641c867beea7f4a7ab6f6241439 100644
--- a/src/modules/ProjectorModule.cpp
+++ b/src/modules/ProjectorModule.cpp
@@ -358,6 +358,8 @@ void ProjectorModule::draw() {
 			m_audioMixSize);
     glUniform1i(m_uniforms[Reveal::RENDERPROG][Reveal::AUDIONEXTBUF], 
 			m_audioNextBuf);
+    glUniform1i(m_uniforms[Reveal::RENDERPROG][Reveal::AUDIONBTRACKS], 
+			m_nbTracks);
 #endif
 
 	//Draw everything
@@ -592,6 +594,8 @@ void ProjectorModule::initGL() {
         = glGetUniformLocation(m_programs[Reveal::RENDERPROG], "audioRate");
     m_uniforms[Reveal::RENDERPROG][Reveal::AUDIONEXTBUF]
         = glGetUniformLocation(m_programs[Reveal::RENDERPROG], "audioNextBuf");
+    m_uniforms[Reveal::RENDERPROG][Reveal::AUDIONBTRACKS]
+        = glGetUniformLocation(m_programs[Reveal::RENDERPROG], "audioNbTracks");
 
     m_uniforms[Reveal::RENDERPROG][Reveal::OUTPUTTEX]
         = glGetUniformLocation(m_programs[Reveal::RENDERPROG], "outputTex");
diff --git a/src/shaders/render43.fs b/src/shaders/render43.fs
index 32f34966897b7fe207295615f3f05049ca388590..1e2acf1e08fa4096b960115dc02880bb432f48d8 100644
--- a/src/shaders/render43.fs
+++ b/src/shaders/render43.fs
@@ -29,6 +29,7 @@ uniform float maxAudioValue;
 uniform int audioRate;
 uniform int processAudio;
 uniform int audioNextBuf;
+uniform int audioNbTracks;
 
 uniform float viewportWidth;
 uniform float viewportHeight;
@@ -111,9 +112,9 @@ out vec4 color;
 
 void additiveSynth(vec4 color) {
 
-	int nbTracks=3000;
-	float note = 20.0 + floor(color.x * float(nbTracks))/float(nbTracks)*80.0;
-	int ind = int(color.x*float(nbTracks));
+	float note = 20.0 
+		+ floor(color.x * float(audioNbTracks))/float(audioNbTracks)*80.0;
+	int ind = int(color.x*float(audioNbTracks));
 	float freq=0.0;
 
 	//count this fragment
@@ -553,14 +554,15 @@ void main(void) {
 	if(rendered>0 && length(finalColor)>0) { 
 
 		if(revSize>0) {
-			imageAtomicOr(outputTex, ivec2(mod(outOffset,outCols), floor((outOffset))/outCols), rendered);
+			imageAtomicOr(outputTex, ivec2(mod(outOffset,outCols), 
+						floor((outOffset))/outCols), rendered);
 		}
 
 		if((insideVisible>0 && rendered==1) || (surface>0 && rendered==2)) {
 			color = vec4(finalColor, 1.0);
-
 			if(processAudio>0) {
 				additiveSynth(color);
+				//pitchedAdditiveSynth(color);
 			}
 		}
 		else {