diff --git a/src/gdpd.cpp b/src/gdpd.cpp
index 09951d61f6c7321b1b79967e3922aa29c781fd8f..e33197e51be2acfd0ae97c104e562d5403d33871 100644
--- a/src/gdpd.cpp
+++ b/src/gdpd.cpp
@@ -58,22 +58,30 @@ int Gdpd::init(int nbInputs, int nbOutputs, int sampleRate, int bufferSize) {
 		Godot::print("There are no available sound devices.");
 	}
 
-	RtAudio::StreamParameters outParams, inParams;
-	unsigned int sr = m_audio.getDeviceInfo(outParams.deviceId).preferredSampleRate;
+	RtAudio::StreamParameters outParams, inpParams;
+	inpParams.deviceId = m_audio.getDefaultInputDevice();
 	outParams.deviceId = m_audio.getDefaultOutputDevice();
-	inParams.deviceId = m_audio.getDefaultInputDevice();
-	outParams.nChannels = m_nbInputs = nbInputs;
-	inParams.nChannels = m_nbOutputs = nbOutputs;
-	m_bufferFrames = bufferSize;
+	RtAudio::DeviceInfo inpInfo = m_audio.getDeviceInfo(inpParams.deviceId);
+	RtAudio::DeviceInfo outInfo = m_audio.getDeviceInfo(outParams.deviceId);
+
+	unsigned int sr = outInfo.preferredSampleRate;
+	inpParams.nChannels = m_nbInputs 
+						= std::min<int>(nbInputs, inpInfo.inputChannels);
+	outParams.nChannels = m_nbOutputs
+						= std::min<int>(nbOutputs, outInfo.outputChannels);
+	print("Output channels = "+std::to_string(outParams.nChannels));
+	print("Input channels = "+std::to_string(inpParams.nChannels));
+	m_bufferFrames = std::max<int>(64, bufferSize);
+
 
 	RtAudio::StreamOptions options;
 	options.streamName = "gdpd";
 	options.flags = RTAUDIO_SCHEDULE_REALTIME;
 	if(m_audio.getCurrentApi() != RtAudio::MACOSX_CORE) {
-		options.flags |= RTAUDIO_MINIMIZE_LATENCY; // CoreAudio doesn't seem to like this
+		options.flags |= RTAUDIO_MINIMIZE_LATENCY;
 	}
 	try {
-		m_audio.openStream(&outParams, &inParams, RTAUDIO_FLOAT32, 
+		m_audio.openStream(&outParams, &inpParams, RTAUDIO_FLOAT32, 
 						   sr, &m_bufferFrames, &audioCallback, 
 						   this, &options);
 		m_audio.startStream();