#ifndef __BMPlayer_h__
#define __BMPlayer_h__

#include "MIDIPlayer.h"

#include <bassmidi.h>

typedef struct sflist_presets sflist_presets;

class BMPlayer : public MIDIPlayer {
	public:
	// zero variables
	BMPlayer();

	// close, unload
	virtual ~BMPlayer();

	// configuration
	void setSoundFont(const char* in);
	void setFileSoundFont(const char* in);
	void setSincInterpolation(bool enable = true);

	private:
	virtual void send_event(uint32_t b);
	virtual void send_sysex(const uint8_t* data, size_t size, size_t port);
	virtual void render(float* out, unsigned long count);

	virtual void shutdown();
	virtual bool startup();

	void compound_presets(std::vector<BASS_MIDI_FONTEX>& out, std::vector<BASS_MIDI_FONTEX>& in, std::vector<long>& channels);

	void reset_parameters();

	std::vector<HSOUNDFONT> _soundFonts;
	sflist_presets* _presetList;
	std::string sSoundFontName;
	std::string sFileSoundFontName;

	HSTREAM _stream[3];

	bool bSincInterpolation;

	bool bank_lsb_overridden;
	uint8_t bank_lsb_override[48];
};

#endif
