#include "SampleDescriptor.h"

using namespace SoundSystem;

SampleDescriptor::SampleDescriptor(void) : SoundDescriptor()
{
	sample = NULL;
}

SampleDescriptor::~SampleDescriptor(void)
{
	if (isLoaded())
	{
		free();
	}
}

void SampleDescriptor::load(bool loop)
{
	if (isLoaded())
	{
		free();
	}
	// par defaut, on charge les sons en 16 bits, hardware 3D, on force le mono (sinon les son hardware ne peuvent
	// par etre joué en 3D) et sans looping et on a absolument pas besoin des tags...
	int flags = FSOUND_16BITS|FSOUND_HW3D|FSOUND_FORCEMONO|FSOUND_IGNORETAGS;
	if (loop)
	{
		flags |= FSOUND_LOOP_NORMAL;
	}
	else
	{
		flags |= FSOUND_LOOP_OFF;
	}
	sample = FSOUND_Sample_Load(FSOUND_FREE,path.c_str(),flags,0,0);
	// on verifie que le son soit bien chargé.
	loaded = (sample != NULL);
}

void SampleDescriptor::free()
{
	FSOUND_Sample_Free(sample);
	sample = NULL;
	loaded = false;
}

int SampleDescriptor::play()
{
	// si le son n'est pas chargé en memoire, c'est peut etre que load n'a pas été appelé avant.
	if (!isLoaded())
	{
		// on essaie donc de la charger
		load();
		// si il n'est toujours pas chargé, c'est que le nom du fichier est probablment mauvais
		if (!isLoaded())
		{
			return NULL;
		}
	}
	int channel = FSOUND_PlaySound(FSOUND_FREE,sample);
	return channel;
}

bool SampleDescriptor::canPlay()
{
	// un sample peut toujours etre joué
	return true;
}

