found 399758 0.0.2-3
tags 399758 patch
kthxbye

The 'fix' (I'd call it a workaround really) doesn't seem to work.
antigrav hangs (hogging the CPU) after

Can't open hover.wav : unknown audio format


The attached patch fixes sound for me.


-- 
Earthling Michel Dänzer           |          http://tungstengraphics.com
Libre software enthusiast         |          Debian, X and DRI developer
diff -up -ru antigrav-0.0.2.orig/src/main.cpp antigrav-0.0.2/src/main.cpp
--- antigrav-0.0.2.orig/src/main.cpp	2006-12-01 12:00:53.000000000 +0100
+++ antigrav-0.0.2/src/main.cpp	2006-12-01 11:55:54.000000000 +0100
@@ -167,6 +167,11 @@ int main(int argc, char *argv[])
 	return 0;
 }
 
+void swapWavBytes(Uint8 *buffer, Uint32 length)
+{
+	swab(buffer, buffer, length);
+}
+
 ALuint loadWavBuffer(const char *filename)
 {
 	ALuint buffer;
@@ -188,20 +193,40 @@ ALuint loadWavBuffer(const char *filenam
 	
 	if(wav_spec.channels == 1)
 	{
-		if(wav_spec.format == AUDIO_U8) format = AL_FORMAT_MONO8;
-		else if(wav_spec.format == AUDIO_S16SYS) format = AL_FORMAT_MONO16;
-		else
+		switch(wav_spec.format)
 		{
+		case AUDIO_U8:
+			format = AL_FORMAT_MONO8;
+			break;
+		case AUDIO_S16LSB:
+		case AUDIO_S16MSB:
+			format = AL_FORMAT_MONO16;
+			if (wav_spec.format != AUDIO_S16SYS)
+			{
+				swapWavBytes(wav_buffer, wav_length);
+			}
+			break;
+		default:
 			fprintf(stderr, "Can't open %s : unknown audio format\n", filename);
 			SDL_FreeWAV(wav_buffer);
 			return AL_NONE;
 		}
 	} else if(wav_spec.channels == 2)
 	{
-		if(wav_spec.format == AUDIO_U8) format = AL_FORMAT_STEREO8;
-		else if(wav_spec.format == AUDIO_S16SYS) format = AL_FORMAT_STEREO16;
-		else
+		switch(wav_spec.format)
 		{
+		case AUDIO_U8:
+			format = AL_FORMAT_STEREO8;
+			break;
+		case AUDIO_S16LSB:
+		case AUDIO_S16MSB:
+			format = AL_FORMAT_STEREO16;
+			if (wav_spec.format != AUDIO_S16SYS)
+			{
+				swapWavBytes(wav_buffer, wav_length);
+			}
+			break;
+		default:
 			fprintf(stderr, "Can't open %s : unknown audio format\n", filename);
 			SDL_FreeWAV(wav_buffer);
 			return AL_NONE;

Reply via email to