Added short data interface
diff --git a/wave.c b/wave.c
index 2765eeb..8d203c6 100644
--- a/wave.c
+++ b/wave.c
@@ -22,6 +22,7 @@
 */
 #include <stdlib.h>
 #include <limits.h>
+#include <string.h>
 #include <sndfile.h>
 #include "wave.h"
 
@@ -94,7 +95,7 @@
 /* Read from the wave file. */
 int readFromWaveFile(
     waveFile file,
-    float *buffer,
+    short *buffer,
     int maxSamples)
 {
     SNDFILE *soundFile = file->soundFile;
@@ -114,12 +115,16 @@
 	return 0;
     }
     samplesRead /= numChannels;
-    for(i = 0; i < samplesRead; i++) {
-	value = 0.0f;
-	for(j = 0; j < numChannels; j++) {
-	    value += values[i*numChannels + j];
+    if(numChannels > 1) {
+	for(i = 0; i < samplesRead; i++) {
+	    value = 0.0f;
+	    for(j = 0; j < numChannels; j++) {
+		value += values[i*numChannels + j];
+	    }
+	    buffer[i] = (short)(value/(numChannels*32768.0f) + 0.5);
 	}
-	buffer[i] = value/(numChannels*32768.0f);
+    } else {
+	memcpy(buffer, values, samplesRead*sizeof(short));
     }
     return samplesRead;
 }
@@ -127,28 +132,17 @@
 /* Write to the wave file. */
 int writeToWaveFile(
     waveFile file,
-    float *buffer,
+    short *buffer,
     int numSamples)
 {
     SNDFILE *soundFile = file->soundFile;
-    int value;
-    int xValue, numWritten;
+    int numWritten;
 
     if(numSamples > file->numValues) {
 	file->numValues = numSamples*3/2;
 	file->values = (short *)realloc(file->values, file->numValues*sizeof(short));
     }
-    for(xValue = 0; xValue < numSamples; xValue++) {
-	value = (int)(buffer[xValue]*32768.0 + 0.5);
-	if(value > SHRT_MAX) {
-	    file->values[xValue] = SHRT_MAX;
-	} else if (value < SHRT_MIN) {
-	    file->values[xValue] = SHRT_MIN;
-	} else {
-	    file->values[xValue] = value;
-	}
-    }
-    numWritten = sf_write_short(soundFile, file->values, numSamples);
+    numWritten = sf_write_short(soundFile, buffer, numSamples);
     if(numWritten != numSamples) {
 	fprintf(stderr, "Unable to write wave file.\n");
 	return 0;