/*
*     ___
*    / _ \___ _    _____ ____
*   / ___/ _ \ |/|/ / -_) __/
*  /_/   \___/__,__/\__/_/
*
*
*   Original Code by John Garrison
*   Written June 3-11,18,25 August 5, 1999
*   To be released under the LGPL
*
*   PowerSound pan example
*
*   Mostly taken from the SDL-demo mixer library
*   borrowed (and modified) by Max Watson <max@blackholesun.com>
*
*   See LICENSE.TXT for more LGPL info
*
*   MIXERLIB:  An audio mixer library based on the SDL library
*   Copyright (C) 1997-1999  Sam Lantinga
*
*   This library is free software; you can redistribute it and/or
*   modify it under the terms of the GNU Library General Public
*   License as published by the Free Software Foundation; either
*   version 2 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
*   Library General Public License for more details.
*
*   You should have received a copy of the GNU Library General Public
*   License along with this library; if not, write to the Free
*   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*   Sam Lantinga
*   5635-34 Springhouse Dr.
*   Pleasanton, CA 94588 (USA)
*   slouken@devolution.com
*/

#ifdef __WIN32__
#include <windows.h>
#endif

#include <stdlib.h>

#include "PowerPak/powerpak.h"
#include "PowerPak/powersound.h"

static int audio_open = 0;
static PS_Sample *wave = NULL;

void CleanUp(void)
{
    if ( audio_open ) {
        PS_AudioClose();
        audio_open = 0;
    }
    if ( wave ) {
        PS_SampleFree(wave);
        wave = NULL;
    }
    PP_Quit();
}

void Usage(char *argv0)
{
	fprintf(stderr, "Play a wave file via PowerSound\nUsage: %s [-8] [-r rate] [-m] <wavefile>\n", argv0);
}


main(int argc, char *argv[])
{
    Uint32 audio_rate;
    Uint16 audio_format;
    Uint8 audio_channels;
    int i;

    /* Initialize variables */
    audio_rate = 22050;
    audio_format = AUDIO_S16;
    audio_channels = 2;

    /* Check command line usage */
    for ( i=1; argv[i] && (*argv[i] == '-'); ++i ) {
        if ( (strcmp(argv[i], "-r") == 0) && argv[i+1] ) {
            ++i;
            audio_rate = atoi(argv[i]);
        } else
            if ( strcmp(argv[i], "-m") == 0 ) {
                audio_channels = 1;
            } else
                if ( strcmp(argv[i], "-8") == 0 ) {
                    audio_format = AUDIO_U8;
                } else {
                    Usage(argv[0]);
                    exit(1);
                }
    }
    if ( ! argv[i] ) {
        Usage(argv[0]);
        exit(1);
    }


    /* Initialize the library */
    PP_Init();
    PS_Init();

    /* Open the audio device */
    if (PS_AudioOpen(audio_rate, audio_format, audio_channels, 4096) < 0) {
        fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
        exit(2);
    } else {
        PS_AudioQuery(&audio_rate, &audio_format, &audio_channels);
        printf("Opened audio at %d Hz %d bit %s\n", audio_rate,
               (audio_format&0xFF),
               (audio_channels > 1) ? "stereo" : "mono");
    }
    audio_open = 1;

    /* Load the requested wave file */
    wave = PS_SampleLoad(argv[i]);
    if ( wave == NULL ) {
        fprintf(stderr, "Couldn't load %s: %s\n",
                argv[i], SDL_GetError());
        exit(2);
    }

    /* Play on the left */
    PS_SamplePanSet(wave, -127);


getchar();
    PS_SamplePlayOnChannel(0, wave, 0);
    while ( PS_ChannelPlaying(0) ) {
        PP_Wait(100);
    }

    /* Play on the left
    PS_SamplePanSet(wave, 127);
    PS_SamplePlayOnChannel(0, wave, 0);
    while ( PS_ChannelPlaying(0) ) {
        PP_Wait(100);
    }*/

    /* Cleanup */
    PS_Quit();
    PP_Quit();

    return 0;
}
