Mercurial > almixer_isolated
diff EXAMPLES/playstream.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/playstream.c Wed Oct 27 21:41:31 2010 -0700 @@ -0,0 +1,94 @@ + +//#include "SDL.h" +#include "ALmixer.h" +#include <stdio.h> +#include <stdlib.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(ALMIXER_DEFAULT_FREQUENCY, ALMIXER_DEFAULT_NUM_SOURCES, ALMIXER_DEFAULT_REFRESH); + + for(i=1; i<argc; i++) + { + if(!(audio_data[i-1]=ALmixer_LoadStream( argv[i], ALMIXER_DEFAULT_BUFFERSIZE, ALMIXER_DEFAULT_QUEUE_BUFFERS, ALMIXER_DEFAULT_STARTUP_BUFFERS, AL_FALSE) )) +/* + if(!(audio_data[i-1]=ALmixer_LoadStream( argv[i], 4096, 2, 1, AL_FALSE) )) + if(!(audio_data[i-1]=ALmixer_LoadStream( argv[i], 4096, 5 * 4, 2, AL_FALSE) )) +*/ + { + 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; +} +