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 ... */
+