//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: soundplayer.hpp
//      Краткое описание: проигрыватель звука с использованием DirectSound
//

#ifndef DSE_AS_SOUND_SOUNDDRIVER_HPP
#define DSE_AS_SOUND_SOUNDDRIVER_HPP

#include <Darkstar/Kernel/misc.hpp>

#include <dsound.h>

#pragma comment(lib, "dsound.lib")

using namespace ker;

namespace as
{
	struct SoundCaps
	{
		bool is_emul_driver;
		// for primary buffer
		bool is_sup_16bitprimbuf;
		bool is_sup_8bitprimbuf;
		bool is_sup_stereoprimbuffer;
		bool is_sup_monoprimbuffer;
		// for secondary buffer
		bool is_sup_16secbuffer;
		bool is_sup_8secbuffer;
		bool is_sup_stereosecbuffer;
		bool is_sup_monosecbuffer;
		// other param
		unsigned int max_static_buf;
		unsigned int max_stream_buf;
		unsigned int max_3dstream_buf;
		unsigned int max_3dstatic_buf;
	};

	class SoundDriver : public SingletonHolder<SoundDriver>
	{
	private:
		LPDIRECTSOUND8 lpds;
		LPDIRECTSOUNDBUFFER prim_buf;
		SoundCaps scaps;
		unsigned int seconds_load_for_streaming;
	public:
		SoundDriver();
		~SoundDriver();

		bool create(HWND hwnd);
		bool setPrimaryBufferFormat(const unsigned int num_channels, const unsigned int bitspersample, const unsigned int sample_rate);

		const SoundCaps& getCaps() const;
	};
};

#endif
