diff --git a/src/gdpd.cpp b/src/gdpd.cpp
index da5956d77246d3b75c00cf6bdb9fc8dc69775c67..fbdc24c8a2f03c8e716907400ac5a1a8b95f8982 100644
--- a/src/gdpd.cpp
+++ b/src/gdpd.cpp
@@ -17,11 +17,8 @@ void Gdpd::_register_methods() {
 
 int Gdpd::audioCallback(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData){
 	Gdpd* gdpd = static_cast<Gdpd*>(userData);
-	int ticks = nBufferFrames / 64;
-	gdpd->m_pd.processFloat(ticks, (float*)inputBuffer, (float*)outputBuffer);
-	for(int b=0; b<nBufferFrames; ++b) {
-		((float*)outputBuffer)[b]*=gdpd->get_volume();
-	}
+	gdpd->processAudio(outputBuffer, inputBuffer, nBufferFrames, streamTime,
+					   status, userData);
 	return 0;
 }
 
@@ -63,8 +60,8 @@ int Gdpd::init(int nbInputs, int nbOutputs, int sampleRate) {
 	unsigned int sr = m_audio.getDeviceInfo(outParams.deviceId).preferredSampleRate;
 	outParams.deviceId = m_audio.getDefaultOutputDevice();
 	inParams.deviceId = m_audio.getDefaultOutputDevice();
-	outParams.nChannels = nbInputs;
-	inParams.nChannels = nbOutputs;
+	outParams.nChannels = m_nbInputs = nbInputs;
+	inParams.nChannels = m_nbOutputs = nbOutputs;
 	m_bufferFrames = 128;
 
 	RtAudio::StreamOptions options;
@@ -89,6 +86,19 @@ int Gdpd::init(int nbInputs, int nbOutputs, int sampleRate) {
 	return 0;
 }
 
+void Gdpd::processAudio(void *outputBuffer, void *inputBuffer, 
+						unsigned int nBufferFrames, double streamTime, 
+						RtAudioStreamStatus status, void *userData) {
+	int ticks = nBufferFrames / libpd_blocksize();
+
+	m_pd.processFloat(ticks, (float*)inputBuffer, (float*)outputBuffer);
+
+	//volume control on the output
+	for(int b=0; b<nBufferFrames*m_nbOutputs; ++b) {
+		((float*)outputBuffer)[b]*=m_vol;
+	}
+}
+
 void Gdpd::openfile(godot::String baseStr, godot::String dirStr) {
 	std::wstring baseWs = baseStr.unicode_str();
 	std::string baseS(baseWs.begin(), baseWs.end());
diff --git a/src/gdpd.hpp b/src/gdpd.hpp
index 5e34ab846d2c5080b6dccdcc178eb433eb949a25..5a24807ea0335bd7915d0c6f6c21e6bfbaf5eb5c 100644
--- a/src/gdpd.hpp
+++ b/src/gdpd.hpp
@@ -26,6 +26,8 @@ private:
 	RtAudio m_audio;
 	unsigned int m_bufferFrames;
 	float m_vol;
+	int m_nbInputs;
+	int m_nbOutputs;
 
 public:
     static void _register_methods();
@@ -57,7 +59,12 @@ public:
 
 
 	//rtaudio
-	static int audioCallback(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData);
+	static int audioCallback(void *outputBuffer, void *inputBuffer, 
+							 unsigned int nBufferFrames, double streamTime, 
+							 RtAudioStreamStatus status, void *userData);
+	void processAudio(void *outputBuffer, void *inputBuffer, 
+					   unsigned int nBufferFrames, double streamTime, 
+					   RtAudioStreamStatus status, void *userData);
 
 };