fmodex/src/fmod_codec_s3m.h

111 lines
2.9 KiB
C++
Executable file

#ifndef _FMOD_CODEC_S3M_H
#define _FMOD_CODEC_S3M_H
#include "fmod_settings.h"
#ifdef FMOD_SUPPORT_S3M
#include "fmod_music.h"
namespace FMOD
{
class DSPI;
class ChannelPool;
enum FMUSIC_S3MCOMMANDS
{
FMUSIC_S3M_SETSPEED = 1,
FMUSIC_S3M_PATTERNJUMP,
FMUSIC_S3M_PATTERNBREAK,
FMUSIC_S3M_VOLUMESLIDE,
FMUSIC_S3M_PORTADOWN,
FMUSIC_S3M_PORTAUP,
FMUSIC_S3M_PORTATO,
FMUSIC_S3M_VIBRATO,
FMUSIC_S3M_TREMOR,
FMUSIC_S3M_ARPEGGIO,
FMUSIC_S3M_VIBRATOVOLSLIDE,
FMUSIC_S3M_PORTATOVOLSLIDE,
FMUSIC_S3M_M,
FMUSIC_S3M_N,
FMUSIC_S3M_SETSAMPLEOFFSET,
FMUSIC_S3M_P,
FMUSIC_S3M_RETRIGVOLSLIDE,
FMUSIC_S3M_TREMOLO,
FMUSIC_S3M_SPECIAL,
FMUSIC_S3M_SETTEMPO,
FMUSIC_S3M_FINEVIBRATO,
FMUSIC_S3M_GLOBALVOLUME,
FMUSIC_S3M_W,
FMUSIC_S3M_SETPAN,
FMUSIC_S3M_Y,
FMUSIC_S3M_Z
};
enum FMUSIC_S3MCOMMANDSSPECIAL
{
FMUSIC_S3M_SETFILTER,
FMUSIC_S3M_SETGLISSANDO,
FMUSIC_S3M_SETFINETUNE,
FMUSIC_S3M_SETVIBRATOWAVE,
FMUSIC_S3M_SETTREMOLOWAVE,
FMUSIC_S3M_S5,
FMUSIC_S3M_S6,
FMUSIC_S3M_S7,
FMUSIC_S3M_SETPANPOSITION16,
FMUSIC_S3M_S9,
FMUSIC_S3M_STEREOCONTROL,
FMUSIC_S3M_PATTERNLOOP,
FMUSIC_S3M_NOTECUT,
FMUSIC_S3M_NOTEDELAY,
FMUSIC_S3M_PATTERNDELAY,
FMUSIC_S3M_FUNKREPEAT
};
const int S3M_MAXROWS = 64;
const int S3M_MAXSAMPLES = 99;
class MusicChannelS3M : public MusicChannel
{
public:
FMOD_RESULT volumeSlide();
FMOD_RESULT portamento();
FMOD_RESULT vibrato();
FMOD_RESULT tremolo();
FMOD_RESULT fineVibrato();
};
class CodecS3M : public MusicSong
{
private:
MusicSample mSample[S3M_MAXSAMPLES];
FMOD_RESULT calculateLength();
FMOD_RESULT updateNote(bool audible);
FMOD_RESULT updateEffects();
FMOD_RESULT update(bool audible);
FMOD_RESULT openInternal(FMOD_MODE usermode, FMOD_CREATESOUNDEXINFO *userexinfo);
FMOD_RESULT closeInternal();
FMOD_RESULT readInternal(void *buffer, unsigned int size, unsigned int *read);
FMOD_RESULT setPositionInternal(int subsound, unsigned int position, FMOD_TIMEUNIT postype);
public:
static FMOD_RESULT F_CALLBACK openCallback(FMOD_CODEC_STATE *codec, FMOD_MODE usermode, FMOD_CREATESOUNDEXINFO *userexinfo);
static FMOD_RESULT F_CALLBACK closeCallback(FMOD_CODEC_STATE *codec);
static FMOD_RESULT F_CALLBACK readCallback(FMOD_CODEC_STATE *codec, void *buffer, unsigned int sizebytes, unsigned int *bytesread);
static FMOD_RESULT F_CALLBACK setPositionCallback(FMOD_CODEC_STATE *codec, int subsound, unsigned int position, FMOD_TIMEUNIT postype);
static FMOD_CODEC_DESCRIPTION_EX *getDescriptionEx();
};
}
#endif /* FMOD_SUPPORT_S3M */
#endif