30#if ((XMP_VERCODE+0) < 0x040200)
31#error libxmp version 4.2 or newer is required when linking to libxmp
36#define qxmp_version xmp_version
37#define qxmp_vercode xmp_vercode
40#define qxmp_create_context xmp_create_context
41#define qxmp_free_context xmp_free_context
45#define qxmp_load_module_from_memory xmp_load_module_from_memory
47#define qxmp_release_module xmp_release_module
49#define qxmp_get_module_info xmp_get_module_info
51#define qxmp_start_player xmp_start_player
52#define qxmp_play_frame xmp_play_frame
53#define qxmp_play_buffer xmp_play_buffer
54#define qxmp_get_frame_info xmp_get_frame_info
55#define qxmp_end_player xmp_end_player
68#define qxmp_get_player xmp_get_player
69#define qxmp_set_player xmp_set_player
87#define XMP_NAME_SIZE 64
90#define XMP_FORMAT_8BIT (1 << 0)
91#define XMP_FORMAT_UNSIGNED (1 << 1)
92#define XMP_FORMAT_MONO (1 << 2)
95#define XMP_PLAYER_AMP 0
96#define XMP_PLAYER_MIX 1
97#define XMP_PLAYER_INTERP 2
98#define XMP_PLAYER_DSP 3
99#define XMP_PLAYER_FLAGS 4
100#define XMP_PLAYER_CFLAGS 5
101#define XMP_PLAYER_SMPCTL 6
102#define XMP_PLAYER_VOLUME 7
103#define XMP_PLAYER_STATE 8
104#define XMP_PLAYER_SMIX_VOLUME 9
105#define XMP_PLAYER_DEFPAN 10
108#define XMP_INTERP_NEAREST 0
109#define XMP_INTERP_LINEAR 1
110#define XMP_INTERP_SPLINE 2
113#define XMP_STATE_UNLOADED 0
114#define XMP_STATE_LOADED 1
115#define XMP_STATE_PLAYING 2
118#define XMP_SMPCTL_SKIP (1 << 0)
123#define XMP_MAX_MOD_LENGTH 256
125#define XMP_MAX_SRATE 49170
126#define XMP_MIN_SRATE 4000
128#define XMP_MAX_FRAMESIZE (5 * XMP_MAX_SRATE * 2 / XMP_MIN_BPM)
132#define XMP_ERROR_INTERNAL 2
133#define XMP_ERROR_FORMAT 3
134#define XMP_ERROR_LOAD 4
135#define XMP_ERROR_DEPACK 5
136#define XMP_ERROR_SYSTEM 6
137#define XMP_ERROR_INVALID 7
138#define XMP_ERROR_STATE 8
149#define XMP_CHANNEL_SYNTH (1 << 0)
150#define XMP_CHANNEL_MUTE (1 << 1)
175 struct xmp_instrument *
xxi;
351 const char* dllnames_xmp [] =
378 Con_Printf(
"Found incompatible XMP library version %s, not loading. (4.2.0 or higher required)\n", *
qxmp_version);
438 int i, len = numsampleframes * sfx->format.channels;
439 int f = sfx->format.width * sfx->format.channels;
500 while (numsampleframes *
f > (
int)
sizeof(per_ch->
buffer))
502 done =
sizeof(per_ch->
buffer) /
f;
504 firstsampleframe += done;
505 numsampleframes -= done;
506 outsamplesfloat += done * sfx->format.channels;
527 memmove(per_ch->
buffer, per_ch->
buffer +
offset * sfx->format.width * sfx->format.channels, keeplength * sfx->format.width * sfx->format.channels);
536 done += (
int)(newlength - done);
539 if (done < newlength)
541 memset(per_ch->
buffer + done, 0, newlength - done);
549 for (
i = 0;
i < len;
i++)
550 outsamplesfloat[
i] =
buf[
i] * (1.0f / 32768.0f);
604#ifndef LINK_TO_LIBXMP
614 if (sfx->fetcher !=
NULL)
625 Con_Printf(
"error creating a libxmp file context; while trying to load file \"%s\"\n", filename);
631 Con_Printf(
"Loading Module file (libxmp) \"%s\"\n", filename);
635 Con_Printf(
"error while trying to load xmp module \"%s\"\n", filename);
642 Con_Printf (
"\"%s\" will be streamed\n", filename);
649 sfx->memsize +=
sizeof(*per_sfx);
650 sfx->memsize += filesize;
652 sfx->format.speed = 48000;
654 sfx->format.speed = 8000;
660 sfx->total_length = 1<<30;
661 sfx->loopstart = sfx->total_length;
662 sfx->fetcher_data = per_sfx;
664 sfx->volume_peak = 0;
670 " Module name : %s\n"
671 " Module type : %s\n"
672 " Module length: %i patterns\n"
674 " Instruments : %i\n"
677 " Initial Speed: %i\n"
678 " Initial BPM : %i\n"
679 " Restart Pos. : %i\n"
680 " Global Volume: %i\n",
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
unsigned char * FS_LoadFile(const char *path, mempool_t *pool, qbool quiet, fs_offset_t *filesizepointer)
static int(ZEXPORT *qz_inflate)(z_stream *strm
GLint GLint GLint GLsizei GLsizei GLenum format
GLsizeiptr const GLvoid * data
GLuint GLuint GLintptr offset
GLenum GLuint GLenum GLsizei const GLchar * buf
int S_GetSoundChannels(void)
int S_GetSoundWidth(void)
#define STREAM_BUFFERSIZE
in sampleframes
#define SFXFLAG_STREAMED
informative only. You shouldn't need to know that
#define XMP_INTERP_SPLINE
#define XMP_FORMAT_UNSIGNED
static void XMP_FreeSfx(sfx_t *sfx)
static int(* qxmp_play_frame)(xmp_context)
static void(* qxmp_end_player)(xmp_context)
#define XMP_PLAYER_INTERP
static void(* qxmp_release_module)(xmp_context)
static int(* qxmp_play_buffer)(xmp_context, void *, int, int)
static const unsigned int * qxmp_vercode
static dllhandle_t xmp_dll
static void XMP_GetSamplesFloat(channel_t *ch, sfx_t *sfx, int firstsampleframe, int numsampleframes, float *outsamplesfloat)
qbool XMP_OpenLibrary(void)
static const char ** qxmp_version
qbool XMP_LoadModFile(const char *filename, sfx_t *sfx)
static xmp_context(* qxmp_create_context)(void)
static void XMP_StopChannel(channel_t *ch)
static const snd_fetcher_t xmp_fetcher
static int(* qxmp_load_module_from_memory)(xmp_context, void *, long)
void XMP_CloseLibrary(void)
static int(* qxmp_get_player)(xmp_context, int)
static void(* qxmp_free_context)(xmp_context)
static int(* qxmp_start_player)(xmp_context, int, int)
#define XMP_MAX_MOD_LENGTH
static void(* qxmp_get_module_info)(xmp_context, struct xmp_module_info *)
static dllfunction_t xmpfuncs[]
static int(* qxmp_set_player)(xmp_context, int, int)
static void(* qxmp_get_frame_info)(xmp_context, struct xmp_frame_info *)
void * fetcher_data
Per-channel data for the sound fetching function.
struct xmp_sequence * seq_data
struct xmp_channel xxc[64]
unsigned char xxo[XMP_MAX_MOD_LENGTH]
struct xmp_pattern ** xxp
struct xmp_instrument * xxi
xmp_context playercontext
unsigned char buffer[STREAM_BUFFERSIZE *4]
qbool Sys_LoadDependency(const char **dllnames, dllhandle_t *handle, const dllfunction_t *fcts)
void Sys_FreeLibrary(dllhandle_t *handle)
int Sys_CheckParm(const char *parm)
#define Mem_Alloc(pool, size)