initial bugfix for volume setup
authorkoda
Mon, 29 Jun 2009 03:47:39 +0000
changeset 2210 1cb7118a77dd
parent 2209 2573d4ff78f9
child 2211 288360b78f30
initial bugfix for volume setup
QTfrontend/SDLs.cpp
QTfrontend/SDLs.h
hedgewars/uConsts.pas
hedgewars/uMisc.pas
hedgewars/uSound.pas
openalbridge/loaders.c
openalbridge/openalwrap.c
openalbridge/openalwrap.h
openalbridge/wrappers.c
openalbridge/wrappers.h
--- a/QTfrontend/SDLs.cpp	Mon Jun 29 00:58:32 2009 +0000
+++ b/QTfrontend/SDLs.cpp	Mon Jun 29 03:47:39 2009 +0000
@@ -26,7 +26,7 @@
 	music = -1;
 
 	SDL_Init(SDL_INIT_VIDEO);
-	openal_init(50);
+	openal_init(40);
 
 }
 
@@ -62,12 +62,12 @@
 	if (music < 0) {
 		music = openal_loadfile(QString(datadir->absolutePath() + "/Music/main theme.ogg").toLocal8Bit().constData());
 		openal_toggleloop(music);
-		openal_setvolume(music,66);
-    }
-	openal_fadein(music, 50);
+	}
+	openal_setvolume(music, 60);
+	openal_fadein(music, 70);
 }
 
 void SDLInteraction::StopMusic()
 {
-	if (music >= 0) openal_fadeout(music, 50);
+	if (music >= 0) openal_fadeout(music, 70);
 }
--- a/QTfrontend/SDLs.h	Mon Jun 29 00:58:32 2009 +0000
+++ b/QTfrontend/SDLs.h	Mon Jun 29 03:47:39 2009 +0000
@@ -21,18 +21,18 @@
 
 #include <QStringList>
 
-extern	"C" int		openal_init			(int);
-extern	"C" int		openal_close		(void);
-extern	"C" int		openal_loadfile		(const char*);
-extern	"C" int		openal_toggleloop	(int);
-extern	"C" int		openal_setvolume	(int, unsigned char);
-extern	"C" int		openal_setglobalvolume	(unsigned char);
-extern  "C" int		openal_togglemute	(void);
-extern	"C" int		openal_fadeout		(int, unsigned int);
-extern	"C" int		openal_fadein		(int, unsigned int);
-extern	"C" int		openal_playsound 	(int);
-extern	"C" int		openal_stopsound	(int);
-extern	"C" int		openal_pausesound	(int);
+extern "C" int openal_init		(int memorysize);
+extern "C" int openal_close		(void);
+extern "C" int openal_loadfile		(const char *filename);
+extern "C" int openal_toggleloop	(int index);
+extern "C" int openal_setvolume		(int index, unsigned char percentage);
+extern "C" int openal_setglobalvolume	(unsigned char percentage);
+extern "C" int openal_togglemute	(void);
+extern "C" int openal_fadeout		(int index, unsigned int quantity);
+extern "C" int openal_fadein		(int index, unsigned int quantity);
+extern "C" int openal_playsound 	(int index);
+extern "C" int openal_stopsound		(int index);
+extern "C" int openal_pausesound	(int index);
 
 class SDLInteraction : public QObject
 {
--- a/hedgewars/uConsts.pas	Mon Jun 29 00:58:32 2009 +0000
+++ b/hedgewars/uConsts.pas	Mon Jun 29 03:47:39 2009 +0000
@@ -161,7 +161,7 @@
     ifAlpha       = $00000001; // use alpha channel (unused right now?)
     ifCritical    = $00000002; // image is critical for gameplay (exit game if unable to load)
     ifTransparent = $00000004; // image uses transparent pixels (color keying)
-    ifIgnoreCaps  = $00000008; // ignore hardware capabilities when loading (i.e. image won't be drawn using OpenGL)
+    ifIgnoreCaps  = $00000008; // ignore hardware capabilities when loading (i.e. image will not be drawn using OpenGL)
 	
 const
 	cMaxPower     = 1500;
--- a/hedgewars/uMisc.pas	Mon Jun 29 00:58:32 2009 +0000
+++ b/hedgewars/uMisc.pas	Mon Jun 29 03:47:39 2009 +0000
@@ -82,7 +82,7 @@
 	cReducedQuality : boolean = false;
 	cLocaleFName  : shortstring = 'en.txt';
 	cSeed         : shortstring = '';
-	cInitVolume   : LongInt = 128;
+	cInitVolume   : LongInt = 50;
 	cVolumeDelta  : LongInt = 0;
 	cTimerInterval   : Longword = 8;
 	cHasFocus     : boolean = true;
--- a/hedgewars/uSound.pas	Mon Jun 29 00:58:32 2009 +0000
+++ b/hedgewars/uSound.pas	Mon Jun 29 03:47:39 2009 +0000
@@ -104,15 +104,16 @@
 isSoundEnabled:= openal_init(numSounds);
 if isSoundEnabled then WriteLnToConsole(msgOK)
                   else WriteLnToConsole(msgFailed);
-ChangeVolume(cInitVolume)
 end;
 
 procedure ReleaseSound;
 begin
+if isMusicEnabled then openal_fadeout(Mus, 30);
 openal_close();
 end;
 
 procedure SoundLoad;
+const volume = 60;
 var i: TSound;
 	s: shortstring;
 	t: Longword;
@@ -127,6 +128,7 @@
 		s:= Pathz[Soundz[i].Path] + '/' + Soundz[i].FileName;
 		WriteToConsole(msgLoading + s + ' ');
 		defVoicepack^.chunks[i]:= openal_loadfile (Str2PChar(s));
+		openal_setvolume(defVoicepack^.chunks[i],volume);
 		TryDo(defVoicepack^.chunks[i] >= 0, msgFailed, true);
 		WriteLnToConsole(msgOK);
 		end;
@@ -139,6 +141,7 @@
 				s:= Pathz[Soundz[i].Path] + '/' + voicepacks[t].name + '/' + Soundz[i].FileName;
 				WriteToConsole(msgLoading + s + ' ');
 				voicepacks[t].chunks[i]:= openal_loadfile (Str2PChar(s));
+				openal_setvolume(voicepacks[t].chunks[i],volume);
 				if voicepacks[t].chunks[i] < 0 then
 					WriteLnToConsole(msgFailed)
 				else
@@ -184,7 +187,8 @@
 TryDo(Mus >= 0, msgFailed, false);
 WriteLnToConsole(msgOK);
 
-openal_fadein(Mus, 50);
+openal_setvolume(Mus, 60);
+openal_fadein(Mus, 70);
 openal_toggleloop(Mus);
 end;
 
--- a/openalbridge/loaders.c	Mon Jun 29 00:58:32 2009 +0000
+++ b/openalbridge/loaders.c	Mon Jun 29 03:47:39 2009 +0000
@@ -136,10 +136,13 @@
 		FILE			*oggFile;		// ogg handle
 		OggVorbis_File  oggStream;		// stream handle
 		vorbis_info		*vorbisInfo;	// some formatting data
-		vorbis_comment	*vorbisComment;	// other less useful data
 		int64_t			pcm_length;		// length of the decoded data
 		int size = 0;
-		int section, result, i;
+		int section, result;
+#ifdef DEBUG
+		int i;
+		vorbis_comment	*vorbisComment;	// other less useful data
+#endif
 		
 		oggFile = Fopen(filename, "rb");
 		result = ov_open(oggFile, &oggStream, NULL, 0);
--- a/openalbridge/openalwrap.c	Mon Jun 29 00:58:32 2009 +0000
+++ b/openalbridge/openalwrap.c	Mon Jun 29 03:47:39 2009 +0000
@@ -21,11 +21,6 @@
 #ifdef __CPLUSPLUS
 extern "C" {
 #endif 
-
-	typedef struct _fade_t {
-		int index;
-		unsigned int quantity;
-	} fade_t;
 	
 	// Sources are points emitting sound.
 	ALuint *Sources;
@@ -169,14 +164,14 @@
 		free(data);		//deallocate data to save memory
 		
 		if (AlGetError("ERROR %d: Writing data to buffer\n") != AL_TRUE)
-			return -5;
+			return -6;
 		
 		//memory allocation for source position and velocity
 		SourcePos[globalindex] = (ALfloat*) Malloc(sizeof(ALfloat)*3);
 		SourceVel[globalindex] = (ALfloat*) Malloc(sizeof(ALfloat)*3);
 		
 		if (SourcePos[globalindex] == NULL || SourceVel[globalindex] == NULL)
-			return -6;
+			return -7;
 			
 		//source properties that it will use when it's in playback
 		for (i = 0; i < 3; i++) {
@@ -191,7 +186,7 @@
 		alSourcei (Sources[globalindex], AL_LOOPING,  0						);
 		
 		if (AlGetError("ERROR %d: Setting source properties\n") != AL_TRUE)
-			return -7;
+			return -8;
 		
 		alGetError();  /* clear any AL errors beforehand */
 		
@@ -271,48 +266,7 @@
 		return AL_TRUE;
 	}
 	
-#ifndef _WIN32
-	void *helper_fadeout(void *tmp) {
-#else
-	void WINAPI helper_fadeout(void *tmp) {	
-#endif
-		ALfloat gain;
-		fade_t *fade;
-		int index; 
-		unsigned int quantity; 
-		
-		fade = tmp;
-		index = fade->index;
-		quantity = fade->quantity;
-		free(fade);
 
-#ifdef DEBUG
-		fprintf(stderr, "Fade-out: index %d quantity %d", index, quantity);
-#endif
-		
-		alGetSourcef(Sources[index], AL_GAIN, &gain);
-		
-		for ( ; gain >= 0.00f; gain -= (float) quantity/10000){
-#ifdef DEBUG
-			fprintf(stderr, "Fade-out: Set gain to %f\n", gain);
-#endif
-			alSourcef(Sources[index], AL_GAIN, gain);
-			usleep(10000);
-		}
-
-		AlGetError("ERROR %d: Setting fade out volume\n");
-		
-		//stop that sound and reset its gain
-		alSourceStop (Sources[index]);
-		alSourcef (Sources[index], AL_GAIN, 1.0f);	
-		
-#ifndef _WIN32
-		pthread_exit(NULL);
-#else
-		_endthread();
-#endif
-	}
-	
 	ALint openal_fadeout(int index, unsigned int quantity) {
 #ifndef _WIN32
 		pthread_t thread;
@@ -343,43 +297,6 @@
 		return AL_TRUE;
 	}
 		
-#ifndef _WIN32
-		void *helper_fadein(void *tmp) 
-#else
-		void WINAPI helper_fadein(void *tmp) 
-#endif
-		{
-			ALfloat gain;
-			fade_t *fade;
-			int index; 
-			unsigned int quantity; 
-			
-			fade = tmp;
-			index = fade->index;
-			quantity = fade->quantity;
-			free (fade);
-			
-			gain = 0.0f;
-			alSourcef(Sources[index], AL_GAIN, gain);
-			alSourcePlay(Sources[index]);
-			
-			for ( ; gain <= 1.00f; gain += (float) quantity/10000){
-#ifdef DEBUG
-				fprintf(stderr, "Fade-in: Set gain to: %f\n", gain);
-#endif
-				alSourcef(Sources[index], AL_GAIN, gain);
-				usleep(10000);
-			}
-			
-			AlGetError("ERROR %d: Setting fade in volume\n");
-			
-#ifndef _WIN32
-			pthread_exit(NULL);
-#else
-			_endthread();
-#endif
-		}
-			
 		
 	ALint openal_fadein(int index, unsigned int quantity) {
 #ifndef _WIN32
--- a/openalbridge/openalwrap.h	Mon Jun 29 00:58:32 2009 +0000
+++ b/openalbridge/openalwrap.h	Mon Jun 29 03:47:39 2009 +0000
@@ -33,29 +33,6 @@
 #include "winstdint.h"
 #endif
 
-#ifndef _SLEEP_H
-#define _SLEEP_H
-/** 1.0 02/03/10 - Defines cross-platform sleep, usleep, etc. * By Wu Yongwei **/
-#ifdef _WIN32
-# if defined(_NEED_SLEEP_ONLY) && (defined(_MSC_VER) || defined(__MINGW32__))
-#  include <stdlib.h>
-#  define sleep(t) _sleep((t) * 1000)
-# else
-#  include <windows.h>
-#  define sleep(t)  Sleep((t) * 1000)
-# endif
-# ifndef _NEED_SLEEP_ONLY
-#  define msleep(t) Sleep(t)
-#  define usleep(t) Sleep((t) / 1000)
-# endif
-#else
-# include <unistd.h>
-# ifndef _NEED_SLEEP_ONLY
-#  define msleep(t) usleep((t) * 1000)
-# endif
-#endif
-
-#endif /* _SLEEP_H */
 
 #ifdef __CPLUSPLUS
 extern "C" {
--- a/openalbridge/wrappers.c	Mon Jun 29 00:58:32 2009 +0000
+++ b/openalbridge/wrappers.c	Mon Jun 29 03:47:39 2009 +0000
@@ -22,8 +22,9 @@
 extern "C" {
 #endif 
 	
-	void *Malloc (size_t nbytes)
-	{
+	extern ALint *Sources;
+	
+	void *Malloc (size_t nbytes){
 		void *aptr;
 		if ( (aptr = malloc(nbytes)) == NULL) {
 			fprintf(stderr, "ERROR: not enough memory! malloc() failed");
@@ -32,14 +33,15 @@
 		return aptr;
 	}
 	
-	FILE *Fopen (const char *fname, char *mode)
-	{
+	
+	FILE *Fopen (const char *fname, char *mode)	{
 		FILE *fp;
 		if ((fp=fopen(fname,mode)) == NULL)
 			fprintf (stderr, "ERROR: can't open file %s in mode '%s'", fname, mode);
 		return fp;
 	}
 	
+	
 	ALint AlGetError (const char *str) {
 		ALenum error;
 		
@@ -51,6 +53,97 @@
 			return AL_TRUE;
 	}
 	
+	
+#ifndef _WIN32
+	void *helper_fadein(void *tmp) 
+#else
+	void WINAPI helper_fadein(void *tmp) 
+#endif
+	{
+		ALfloat gain;
+		ALfloat target_gain;
+		fade_t *fade;
+		int index; 
+		unsigned int quantity; 
+		
+		fade = tmp;
+		index = fade->index;
+		quantity = fade->quantity;
+		free (fade);
+		
+#ifdef DEBUG
+		fprintf(stderr, "Fade-out: index %d quantity %d\n", index, quantity);
+#endif
+		
+		//save the volume desired after the fade
+		alGetSourcef(Sources[index], AL_GAIN, &target_gain);
+		if (target_gain > 1.0f || target_gain <= 0.0f)
+			target_gain = 1.0f;
+		
+		alSourcePlay(Sources[index]);
+		
+		for (gain = 0.0f ; gain <= target_gain; gain += (float) quantity/10000) {
+#ifdef DEBUG
+			fprintf(stderr, "Fade-in: Set gain to: %f\n", gain);
+#endif
+			alSourcef(Sources[index], AL_GAIN, gain);
+			usleep(10000);
+		}
+		
+		AlGetError("ERROR %d: Setting fade in volume\n");
+		
+#ifndef _WIN32
+		pthread_exit(NULL);
+#else
+		_endthread();
+#endif
+	}
+	
+	
+#ifndef _WIN32
+	void *helper_fadeout(void *tmp) 
+#else
+	void WINAPI helper_fadeout(void *tmp) 	
+#endif
+	{
+		ALfloat gain;
+		ALfloat old_gain;
+		fade_t *fade;
+		int index; 
+		unsigned int quantity; 
+		
+		fade = tmp;
+		index = fade->index;
+		quantity = fade->quantity;
+		free(fade);
+		
+#ifdef DEBUG
+		fprintf(stderr, "Fade-out: index %d quantity %d\n", index, quantity);
+#endif
+		
+		alGetSourcef(Sources[index], AL_GAIN, &old_gain);
+		
+		for (gain = old_gain; gain >= 0.00f; gain -= (float) quantity/10000) {
+#ifdef DEBUG
+			fprintf(stderr, "Fade-out: Set gain to %f\n", gain);
+#endif
+			alSourcef(Sources[index], AL_GAIN, gain);
+			usleep(10000);
+		}
+		
+		AlGetError("ERROR %d: Setting fade out volume\n");
+		
+		//stop that sound and reset its volume
+		alSourceStop (Sources[index]);
+		alSourcef (Sources[index], AL_GAIN, old_gain);	
+		
+#ifndef _WIN32
+		pthread_exit(NULL);
+#else
+		_endthread();
+#endif
+	}
+	
 #ifdef __CPLUSPLUS
 }
 #endif
\ No newline at end of file
--- a/openalbridge/wrappers.h	Mon Jun 29 00:58:32 2009 +0000
+++ b/openalbridge/wrappers.h	Mon Jun 29 03:47:39 2009 +0000
@@ -20,6 +20,52 @@
 #include <stdlib.h>
 #include "al.h"
 
+#ifndef _WIN32
+#include <pthread.h>
+#include <stdint.h>
+#else
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include "winstdint.h"
+#endif
+
+#ifndef _SLEEP_H
+#define _SLEEP_H
+/** 1.0 02/03/10 - Defines cross-platform sleep, usleep, etc. * By Wu Yongwei **/
+#ifdef _WIN32
+# if defined(_NEED_SLEEP_ONLY) && (defined(_MSC_VER) || defined(__MINGW32__))
+#  include <stdlib.h>
+#  define sleep(t) _sleep((t) * 1000)
+# else
+#  include <windows.h>
+#  define sleep(t)  Sleep((t) * 1000)
+# endif
+# ifndef _NEED_SLEEP_ONLY
+#  define msleep(t) Sleep(t)
+#  define usleep(t) Sleep((t) / 1000)
+# endif
+#else
+# include <unistd.h>
+# ifndef _NEED_SLEEP_ONLY
+#  define msleep(t) usleep((t) * 1000)
+# endif
+#endif
+#endif /* _SLEEP_H */
+
+#pragma once
+
+typedef struct _fade_t {
+	int index;
+	unsigned int quantity;
+} fade_t;
+
 void *Malloc (size_t nbytes);
 FILE *Fopen (const char *fname, char *mode);
 ALint AlGetError (const char *str);
+#ifndef _WIN32
+void *helper_fadein (void *tmp);
+void *helper_fadeout (void *tmp); 
+#else
+void WINAPI helper_fadein (void *tmp); 
+void WINAPI helper_fadeout (void *tmp); 	
+#endif
\ No newline at end of file