#ifndef _DISPATCH_H #define _DISPATCH_H enum DivDispatchCmds { DIV_CMD_NOTE_ON=0, DIV_CMD_NOTE_OFF, DIV_CMD_INSTRUMENT, DIV_CMD_VOLUME, DIV_CMD_NOTE_PORTA, DIV_CMD_PITCH, DIV_CMD_PANNING, DIV_CMD_SAMPLE_MODE }; struct DivCommand { DivDispatchCmds cmd; unsigned char chan, value; DivCommand(DivDispatchCmds c, unsigned char ch, unsigned char val): cmd(c), chan(ch), value(val) {} DivCommand(DivDispatchCmds c, unsigned char ch): cmd(c), chan(ch), value(0) {} }; struct DivDelayedCommand { int ticks; DivCommand cmd; }; class DivEngine; class DivDispatch { protected: DivEngine* parent; public: /** * the rate the samples are provided. * the engine shall resample to the output rate. */ int rate; virtual void acquire(short& l, short& r); virtual int dispatch(DivCommand c); virtual void tick(); /** * initialize this DivDispatch. * @param parent the parent DivEngine. * @param channels the number of channels to acquire. * @param sugRate the suggested rate. this may change, so don't rely on it. * @return the number of channels allocated. */ virtual int init(DivEngine* parent, int channels, int sugRate); }; #endif