Mercurial > SDL_sound_CoreAudio
diff playsound/test_sdlsound.c @ 4:341cea3e13c6
Initial add.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Mon, 17 Sep 2001 18:12:03 +0000 |
parents | |
children | f2af6266775f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/playsound/test_sdlsound.c Mon Sep 17 18:12:03 2001 +0000 @@ -0,0 +1,187 @@ +/* + * SDL_sound -- An abstract sound format decoding API. + * Copyright (C) 2001 Ryan C. Gordon. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/** + * This is a quick and dirty test of SDL_sound. + * + * Please see the file LICENSE in the source's root directory. + * + * This file written by Ryan C. Gordon. (icculus@clutteredmind.org) + */ + +#include <stdio.h> +#include <assert.h> +#include "SDL.h" +#include "SDL_sound.h" + +#define TEST_VERSION_MAJOR 0 +#define TEST_VERSION_MINOR 1 +#define TEST_VERSION_PATCH 0 + + +static void output_versions(void) +{ + Sound_Version compiled; + Sound_Version linked; + SDL_version sdl_compiled; + const SDL_version *sdl_linked; + + SOUND_VERSION(&compiled); + Sound_GetLinkedVersion(&linked); + SDL_VERSION(&sdl_compiled); + sdl_linked = SDL_Linked_Version(); + + printf("test_sdlsound version %d.%d.%d.\n" + " Compiled against SDL_sound version %d.%d.%d,\n" + " and linked against %d.%d.%d.\n" + " Compiled against SDL version %d.%d.%d,\n" + " and linked against %d.%d.%d.\n\n", + TEST_VERSION_MAJOR, TEST_VERSION_MINOR, TEST_VERSION_PATCH, + compiled.major, compiled.minor, compiled.patch, + linked.major, linked.minor, linked.patch, + sdl_compiled.major, sdl_compiled.minor, sdl_compiled.patch, + sdl_linked->major, sdl_linked->minor, sdl_linked->patch); +} /* output_versions */ + + +static void output_decoders(void) +{ + const Sound_DecoderInfo **rc = Sound_AvailableDecoders(); + const Sound_DecoderInfo **i; + + printf("Supported fileformats:\n"); + if (*rc == NULL) + printf(" * Apparently, NONE!\n"); + else + { + for (i = rc; *i != NULL; i++) + { + printf(" * %s: %s\n Written by %s.\n %s\n", + (*i)->extension, (*i)->description, + (*i)->author, (*i)->url); + } /* for */ + } /* else */ + + printf("\n"); +} /* output_decoders */ + + +static volatile int done_flag = 0; + +void test_callback(void *userdata, Uint8 *stream, int len) +{ + Sound_Sample *sample = (Sound_Sample *) userdata; + Uint32 rc = Sound_Decode(sample); + + if (sample->flags & SOUND_SAMPLEFLAG_EOF) + { + printf("EOF condition in decoding! (this is okay.)\n"); + done_flag = 1; + } /* if */ + + else if (sample->flags & SOUND_SAMPLEFLAG_ERROR) + { + printf("Error condition in decoding! (this is bad.)\n"); + done_flag = 1; + } /* else if */ + + assert(rc <= len); + + memcpy(stream, sample->buffer, rc); + if (rc < len) + memset(stream + rc, '\0', len - rc); /* (*shrug*) */ +} /* test_callback */ + + +int main(int argc, char **argv) +{ + Sound_AudioInfo sound_desired; + SDL_AudioSpec sdl_desired; + Sound_Sample *sample; + + if (SDL_Init(SDL_INIT_AUDIO) == -1) + { + printf("SDL_Init(SDL_INIT_AUDIO) failed!\n" + " reason: [%s].\n", SDL_GetError()); + return(42); + } /* if */ + + if (!Sound_Init()) + { + printf("Sound_Init() failed!\n" + " reason: [%s].\n", Sound_GetError()); + SDL_Quit(); + return(42); + } /* if */ + + output_versions(); + output_decoders(); + + if (argc != 2) + { + printf("USAGE: %s <oneSupportedFile>\n", argv[0]); + Sound_Quit(); + SDL_Quit(); + return(42); + } /* if */ + + sound_desired.rate = 44100; + sound_desired.channels = 2; + sound_desired.format = AUDIO_S16; + + sample = Sound_NewSampleFromFile(argv[1], &sound_desired, 4096 * 4); + if (!sample) + { + printf("Sound_NewSampleFromFile(\"%s\") failed!\n" + " reason: [%s].\n", argv[1], Sound_GetError()); + Sound_Quit(); + SDL_Quit(); + return(42); + } /* if */ + + sdl_desired.freq = 44100; + sdl_desired.format = AUDIO_S16; + sdl_desired.channels = 2; + sdl_desired.samples = 4096; + sdl_desired.callback = test_callback; + sdl_desired.userdata = sample; + + if ( SDL_OpenAudio(&sdl_desired, NULL) < 0 ) + { + printf("SDL_OpenAudio() failed!\n" + " reason: [%s].\n", SDL_GetError()); + Sound_Quit(); + SDL_Quit(); + return(42); + } /* if */ + + SDL_PauseAudio(0); + + while (!done_flag) + SDL_Delay(10); + + Sound_FreeSample(sample); + + Sound_Quit(); + SDL_Quit(); + return(0); +} /* main */ + +/* end of test_sdlsound.c ... */ +