#ifndef SAMPLEDESCRIPTOR_H
#define SAMPLEDESCRIPTOR_H

#include "SoundDescriptor.h"
#include "fmod/fmod.h"
#ifdef WIN32
#define NOMINMAX // pour novodex
#include <windows.h>
#else
#include "fmod/wincompat.h"
#endif

namespace SoundSystem
{
	/**
	 * Classe definissant un son basé sur un Sample.
	 *
	 * Cette classe utilise un sample pour stocker le son. L'aventage des sample est d'etre tres flexible. En effet
	 * on peut demarre plusieurs son sur le même sample en même temps, on peut aussi changer leur mode de bouclage
	 * en cours de lecture. Par contre, les Sample presentent l'inconvenient de necessiter plus de ressource memoire
	 * que les Stream, ils sont donc plus approprié pour la lecture de petits fichier repetitifs pouvant etre joué
	 * a n'importe quel instant.
	 */
	class SampleDescriptor : public SoundDescriptor
	{
	protected:
		/**
		 * Le sample FMOD utilisé pour stocker le son.
		 */
		FSOUND_SAMPLE * sample;
	public:
		/**
		 * constructeur par defaut.
		 */ 
		SampleDescriptor(void);

		/**
		 * destructeur par defaut.
		 */
		~SampleDescriptor(void);

		/**
		 * charge le sample en memoire
		 */
		void load(bool loop = false);
		/**
		 * libere le sample de la memoire. Tout les son joué sur ce sample seront stopé.
		 */
		void free();
		/**
		 * lance un son basé sur ce sample
		 *
		 * @return int : le channel du son lancé. -1 si le lancement n'a pas pu s'effectué.
		 */
		int play();

		/**
		 * definit si le sample peut etre joué ou pas.
		 *
		 * @return bool : true si le son peut etre joué, false sinon
		 */
		bool canPlay();

		/**
		 * retourne le type du descripteur
		 */
		DescriptorType getType(){return SAMPLE;};

	};
}// namespace SoundSystem

#endif
