--- a/sc2src/alsadirect.cpp
+++ b/sc2src/alsadirect.cpp
@@ -89,7 +89,7 @@
         break;
     case SND_PCM_STATE_DISCONNECTED:
         break;
-	/* this is no error, so just keep running */
+        /* this is no error, so just keep running */
     case SND_PCM_STATE_RUNNING:
         err = 0;
         break;
@@ -438,12 +438,16 @@
 static bool fixToFloats(AudioMessage *tsk, SRC_DATA& src_data,
                         size_t tot_samples)
 {
+
+    // For some reason, newer versions of libsamplerate define
+    // data_in as const
+    float *datain = (float *)&(src_data.data_in[0]);
     switch (tsk->m_bits) {
     case 16: 
     {
         const short *sp = (const short *)tsk->m_buf;
         for (unsigned int i = 0; i < tot_samples; i++) {
-            src_data.data_in[i] = *sp++;
+            datain[i] = *sp++;
         }
     }
     break;
@@ -457,7 +461,7 @@
             ocp[1] = *icp++;
             ocp[2] = *icp++;
             ocp[3] = (ocp[2] & 0x80) ? 0xff : 0;
-            src_data.data_in[i] = o;
+            datain[i] = o;
         }
     }
     break;
@@ -465,7 +469,7 @@
     {
         const int *ip = (const int *)tsk->m_buf;
         for (unsigned int i = 0; i < tot_samples; i++) {
-            src_data.data_in[i] = *ip++;
+            datain[i] = *ip++;
         }
     }
     break;
@@ -602,7 +606,7 @@
     size_t needed_bytes = tot_samples * sizeof(float);
     if (src_input_bytes < needed_bytes) {
         src_data.data_in =
-            (float *)realloc(src_data.data_in, needed_bytes);
+            (float *)realloc((void *)src_data.data_in, needed_bytes);
         src_data.data_out = (float *)realloc(src_data.data_out,
                                              2 * needed_bytes);
         src_data.output_frames = 2 * tot_samples / tsk->m_chans;
@@ -746,7 +750,7 @@
             free(src_state);
         }
     }
-    free(src_data.data_in);
+    free((void *)src_data.data_in);
     free(src_data.data_out);
     LOGDEB("audioEater returning");
     return (void *)1;