diff EXAMPLES/playsound.c @ 4:26aec5629f68

Added example programs.
author Eric Wing <ewing . public |-at-| gmail . com>
date Wed, 27 Oct 2010 21:41:31 -0700
parents
children ee50db043251
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EXAMPLES/playsound.c	Wed Oct 27 21:41:31 2010 -0700
@@ -0,0 +1,87 @@
+#include "ALmixer.h"
+#include <stdio.h>
+
+#ifdef ALMIXER_COMPILE_WITHOUT_SDL
+	#if defined(_WIN32)
+		#define WIN32_LEAN_AND_MEAN
+		#include <windows.h>
+	#else
+   	  	#include <unistd.h>
+	#endif
+
+	static void Internal_Delay(ALuint milliseconds_delay)
+	{
+		#if defined(_WIN32)
+		Sleep(milliseconds_delay);
+		#else
+		usleep(milliseconds_delay);
+		#endif
+	}
+#else
+	#include "SDL.h"
+	#define Internal_Delay SDL_Delay
+#endif
+#define MAX_SOURCES 16
+
+ALboolean g_PlayingAudio[MAX_SOURCES];
+
+void Internal_SoundFinished_CallbackIntercept(ALint which_channel, ALuint al_source, ALmixer_Data* almixer_data, ALboolean finished_naturally, void* user_data)
+{
+	fprintf(stderr, "Channel %d finished\n", which_channel);
+	g_PlayingAudio[which_channel] = AL_FALSE;
+}
+
+int main(int argc, char* argv[])
+{
+	if(argc < 1)
+	{
+		printf("Pass a sound file (or files) as a parameter\n");
+	}
+	else if(argc-1 > MAX_SOURCES)
+	{
+		printf("Maximum supported files is %d\n", MAX_SOURCES);
+	}
+	size_t i;
+	ALboolean still_playing = AL_TRUE;
+
+	ALmixer_Data* audio_data[MAX_SOURCES];
+	ALmixer_Init(22050, 0, 0);
+	
+	for(i=1; i<argc; i++)
+	{
+		if(!(audio_data[i-1]=ALmixer_LoadAll( argv[i], AL_TRUE) ))
+		{
+			printf("%s. Quiting program.\n", ALmixer_GetError());
+			exit(0);
+		}
+	}
+
+	ALmixer_SetPlaybackFinishedCallback(Internal_SoundFinished_CallbackIntercept, NULL);
+
+	for(i=1; i<argc; i++)
+	{
+		g_PlayingAudio[i-1] = AL_TRUE;
+		ALmixer_PlayChannel(i-1, audio_data[i-1], 0);
+	}
+
+	while(still_playing)
+	{
+		still_playing = AL_FALSE;
+		for(i=1; i<argc; i++)
+		{
+			still_playing |= g_PlayingAudio[i-1];
+		}
+		ALmixer_Update();
+		Internal_Delay(10);
+	}
+		
+	for(i=1; i<argc; i++)
+	{
+		ALmixer_FreeData(audio_data[i-1]);
+	}
+
+	ALmixer_Quit();
+
+	return 0;
+}
+