#ifndef __SCPlayer_h__
#define __SCPlayer_h__

#include "MIDIPlayer.h"

#include "SCCore.h"

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

	// close, unload
	virtual ~SCPlayer();

	unsigned int get_playing_note_count();

	typedef enum
	{
        sc_default = 0,
        sc_gm,
		sc_gm2,
		sc_sc55,
		sc_sc88,
		sc_sc88pro,
		sc_sc8850,
		sc_xg
	}
	sc_mode;
	
	void set_mode(sc_mode m);
    
void set_sccore_path(const char * path);

protected:
    virtual bool send_event_needs_time();
	virtual void send_event(uint32_t b);
	virtual void render(float * out, unsigned long count);

	virtual void shutdown();
	virtual bool startup();
    
private:
	void send_sysex(uint32_t port, const uint8_t * data);
	void send_gs(uint32_t port, uint8_t * data);
	void reset_sc(uint32_t port);

	void reset(uint32_t port);

    void junk(uint32_t port, unsigned long count);
    
    unsigned int instance_id;
	bool initialized;
    SCCore * sampler;
	
	sc_mode mode;
    
    char * sccore_path;
};

#endif
