/* -----------------------------------------------------------------------------
	GSFramework
	Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
------------------------------------------------------------------------------*/


#ifndef	__NNULLMIXER__
#define	__NNULLMIXER__


		#include "core/mixer.h"


namespace GS {
	namespace Audio {

/*!
	@short	Null mixer.
	@author Emmanuel Julien (ejulien@gsworks.fr)
*/
struct	NullMixer : public IMixer
{
		bool			Open() { return true; }
		void			Close() {}

		void			SuspendWorkerThread() {}
		void			ResumeWorkerThread() {}

		void			SetMasterVolume(float = 1.0) {}
		float			GetMasterVolume() { return 1; }

		bool			StartFast(int, FutureData *) { return false; }
		int				Start(int, FutureData *) { return 0; }
		bool			StreamFast(int, const char *) { return false; }
		int				Stream(int, const char *) { return 0; }
		void			Stop(int) {}
		void			Pause(int) {}
		void			Resume(int) {}

		int				LockChannel() { return 0; }
		void			UnlockChannel(int) {}
		void			UnlockAllChannels() {}

		float			GetChannelPitch(int) { return 1; }
		float			GetChannelVolume(int) { return 1; }
		float			GetChannelPanning(int) { return 0; }
		Loop			GetChannelLoopMode(int) { return None; }
		int				GetChannelLoopPosition(int) { return 0; }

		void			SetChannelPitch(int, float) {}
		void			SetChannelVolume(int, float) {}
		void			SetChannelPanning(int, float) {}
		void			SetChannelLoopMode(int, Loop = None) {}
		void			SetChannelLoopPosition(int, int ms) {}

		State			GetState(int) { return Invalid; }

		FutureData		 *LoadSound(const char *) { return 0; }
		void			UnloadSound(FutureData *) {}

		~NullMixer() {}
};

	} // Audio
} // GS


#endif	// __NNULLMIXER__
