diff --git a/trunk/configure.ac b/trunk/configure.ac
index a376936..73eeed2 100644
--- a/trunk/configure.ac
+++ b/trunk/configure.ac
@@ -1327,6 +1327,17 @@ else
 fi
 AC_DEFINE_UNQUOTED(CONFIG_UNSIGNED_TRIANG_ALGO, ${triang_unsigned}, [Define unsigned triangular wave algorithm to be used.])
 
+AC_ARG_ENABLE(alsa-s32_le,
+  [  --enable-alsa-s32_le
+                          Enable using S32_LE sample format with ALSA driver
+                          (default=off). Some audio cards need it (e.g.
+			  Native Instruments Komplete Audio 6).],
+  [config_alsa_s32_le="$enableval"],
+  [config_alsa_s32_le="no"]
+)
+if test "$config_alsa_s32_le" = "yes"; then
+  AC_DEFINE_UNQUOTED(DWORDS_LITTLEENDIAN, 1, [Define to 1 if you want to enable S32_LE sample format.])
+fi
 
 ###########################################################################
 # Create Build Files
diff --git a/trunk/src/drivers/audio/AudioOutputDeviceAlsa.cpp b/trunk/src/drivers/audio/AudioOutputDeviceAlsa.cpp
index 87d79f2..ebb0a4a 100644
--- a/trunk/src/drivers/audio/AudioOutputDeviceAlsa.cpp
+++ b/trunk/src/drivers/audio/AudioOutputDeviceAlsa.cpp
@@ -561,6 +561,8 @@ namespace LinuxSampler {
         /* Set sample format */
         #if WORDS_BIGENDIAN
         if ((err = snd_pcm_hw_params_set_format(pcm_handle, hwparams, SND_PCM_FORMAT_S16_BE)) < 0)
+	#elif DWORDS_LITTLEENDIAN
+        if ((err = snd_pcm_hw_params_set_format(pcm_handle, hwparams, SND_PCM_FORMAT_S32_LE)) < 0)
         #else // little endian
         if ((err = snd_pcm_hw_params_set_format(pcm_handle, hwparams, SND_PCM_FORMAT_S16_LE)) < 0)
         #endif
@@ -623,7 +625,11 @@ namespace LinuxSampler {
         }
 
         // allocate Alsa output buffer
+#if DWORDS_LITTLEENDIAN
+        pAlsaOutputBuffer = new int32_t[uiAlsaChannels * FragmentSize];
+#else
         pAlsaOutputBuffer = new int16_t[uiAlsaChannels * FragmentSize];
+#endif
 
         // create audio channels for this audio device to which the sampler engines can write to
         for (int i = 0; i < uiAlsaChannels; i++) this->Channels.push_back(new AudioChannel(i, FragmentSize));
@@ -669,6 +675,8 @@ namespace LinuxSampler {
         }
         #if WORDS_BIGENDIAN
         if (snd_pcm_hw_params_test_format(pcm_handle, hwparams, SND_PCM_FORMAT_S16_BE) < 0)
+	#elif DWORDS_LITTLEENDIAN
+        if (snd_pcm_hw_params_test_format(pcm_handle, hwparams, SND_PCM_FORMAT_S32_LE) < 0)
         #else // little endian
         if (snd_pcm_hw_params_test_format(pcm_handle, hwparams, SND_PCM_FORMAT_S16_LE) < 0)
         #endif
@@ -755,10 +763,17 @@ namespace LinuxSampler {
             for (int c = 0; c < uiAlsaChannels; c++) {
                 float* in  = Channels[c]->Buffer();
                 for (int i = 0, o = c; i < FragmentSize; i++ , o += uiAlsaChannels) {
+#if DWORDS_LITTLEENDIAN
+                    float sample_point = in[i] * 2147483648.0f;
+                    if (sample_point < -2147483648.0) sample_point = -2147483648.0;
+                    if (sample_point >  2147483647.0) sample_point =  2147483647.0;
+                    pAlsaOutputBuffer[o] = (int32_t) sample_point;
+#else
                     float sample_point = in[i] * 32768.0f;
                     if (sample_point < -32768.0) sample_point = -32768.0;
                     if (sample_point >  32767.0) sample_point =  32767.0;
                     pAlsaOutputBuffer[o] = (int16_t) sample_point;
+#endif
                 }
             }
 
diff --git a/trunk/src/drivers/audio/AudioOutputDeviceAlsa.h b/trunk/src/drivers/audio/AudioOutputDeviceAlsa.h
index 51942e4..313182c 100644
--- a/trunk/src/drivers/audio/AudioOutputDeviceAlsa.h
+++ b/trunk/src/drivers/audio/AudioOutputDeviceAlsa.h
@@ -151,7 +151,11 @@ namespace LinuxSampler {
             uint                 uiAlsaChannels;
             uint                 uiSamplerate;
             uint                 FragmentSize;
+#if DWORDS_LITTLEENDIAN
+            int32_t*             pAlsaOutputBuffer; ///< This is the buffer where the final mix will be copied to and send to the sound card
+#else
             int16_t*             pAlsaOutputBuffer; ///< This is the buffer where the final mix will be copied to and send to the sound card
+#endif
             String               pcm_name;          ///< Name of the PCM device, like plughw:0,0 the first number is the number of the soundcard, the second number is the number of the device.
             snd_pcm_t*           pcm_handle;        ///< Handle for the PCM device
             snd_pcm_stream_t     stream;
