
#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_acodec.h>


int main(int argc, char **argv)
{
	ALLEGRO_SAMPLE *sample_data;
	ALLEGRO_SAMPLE_INSTANCE *sample_instance;
	ALLEGRO_MIXER *mixer;
	ALLEGRO_VOICE *voice;
	int sample_length;
	int sample_position = 1;

	if(argc != 2)
	{
		fprintf(stderr,"Need the name of an audio file to play\n");
		return 1;
	}

	if (!al_init())
	{
		fprintf(stderr,"Could not init Allegro\n");
		return 1;
	}

	al_init_acodec_addon();

	if(!al_install_audio())
	{
		fprintf(stderr, "Can't install audio\n");
		return 1;
	}

	/* a voice is used for playback */
	voice = al_create_voice(44100, ALLEGRO_AUDIO_DEPTH_INT16, ALLEGRO_CHANNEL_CONF_2);
	if (!voice)
	{
		fprintf(stderr, "Could not create ALLEGRO_VOICE\n");
		return 1;
	}

	mixer = al_create_mixer(44100, ALLEGRO_AUDIO_DEPTH_FLOAT32, ALLEGRO_CHANNEL_CONF_2);
	if (!mixer)
	{
		fprintf(stderr,"al_create_mixer failed\n");
		return 1;
	}

	al_set_mixer_quality(mixer,ALLEGRO_MIXER_QUALITY_CUBIC);

	if (!al_attach_mixer_to_voice(mixer, voice))
	{
		fprintf(stderr,"al_attach_mixer_to_voice failed\n");
		return 1;
	}

	/* loads the entire sound file from disk into sample data */
	sample_data = al_load_sample(argv[1]);
	if (!sample_data)
	{
		fprintf(stderr, "Could not load sample from '%s'!", argv[1]);
		return 1;
	}

	sample_instance = al_create_sample_instance(sample_data);
	if (!sample_instance)
	{
		fprintf(stderr,"Could not create sample!\n");
		return 1;
	}

	if (!al_attach_sample_instance_to_mixer(sample_instance, mixer))
	{
		fprintf(stderr,"al_attach_sample_instance_to_mixer failed\n");
		return 1;
	}

	sample_length = al_get_sample_instance_length(sample_instance);

	al_play_sample_instance(sample_instance);

	while(1)
	{
		float spos;
		volatile int delay;	//I was too lazy to use a timer, and it ran too fast to check against 0 (done) or equal to sample_length.  Sue me

		if(sample_position == 0)	//it resets to zero when done.  Was initialized to 1 above
			break;

		for(delay=0;delay<10000000;delay++) {};

		sample_position = al_get_sample_instance_position(sample_instance);


		spos = (float)sample_position / sample_length * 100.0;

		if(sample_position != 0)
			printf("sample position %d, sample length %d, sample is %4.2f complete\n",sample_position,sample_length,spos);
	}

	return 0;
}
