+++ /dev/null
-#ifndef _ITDEFS_H_
-#define _ITDEFS_H_
-
-#pragma pack(1)
-
-typedef struct tagITFILEHEADER
-{
- DWORD id; // 0x4D504D49
- CHAR songname[26];
- WORD reserved1; // 0x1004
- WORD ordnum;
- WORD insnum;
- WORD smpnum;
- WORD patnum;
- WORD cwtv;
- WORD cmwt;
- WORD flags;
- WORD special;
- BYTE globalvol;
- BYTE mv;
- BYTE speed;
- BYTE tempo;
- BYTE sep;
- BYTE zero;
- WORD msglength;
- DWORD msgoffset;
- DWORD reserved2;
- BYTE chnpan[64];
- BYTE chnvol[64];
-} ITFILEHEADER;
-
-
-typedef struct tagITENVELOPE
-{
- BYTE flags;
- BYTE num;
- BYTE lpb;
- BYTE lpe;
- BYTE slb;
- BYTE sle;
- BYTE data[25*3];
- BYTE reserved;
-} ITENVELOPE;
-
-// Old Impulse Instrument Format (cmwt < 0x200)
-typedef struct tagITOLDINSTRUMENT
-{
- DWORD id; // IMPI = 0x49504D49
- CHAR filename[12]; // DOS file name
- BYTE zero;
- BYTE flags;
- BYTE vls;
- BYTE vle;
- BYTE sls;
- BYTE sle;
- WORD reserved1;
- WORD fadeout;
- BYTE nna;
- BYTE dnc;
- WORD trkvers;
- BYTE nos;
- BYTE reserved2;
- CHAR name[26];
- WORD reserved3[3];
- BYTE keyboard[240];
- BYTE volenv[200];
- BYTE nodes[50];
-} ITOLDINSTRUMENT;
-
-
-// Impulse Instrument Format
-typedef struct tagITINSTRUMENT
-{
- DWORD id;
- CHAR filename[12];
- BYTE zero;
- BYTE nna;
- BYTE dct;
- BYTE dca;
- WORD fadeout;
- signed char pps;
- BYTE ppc;
- BYTE gbv;
- BYTE dfp;
- BYTE rv;
- BYTE rp;
- WORD trkvers;
- BYTE nos;
- BYTE reserved1;
- CHAR name[26];
- BYTE ifc;
- BYTE ifr;
- BYTE mch;
- BYTE mpr;
- WORD mbank;
- BYTE keyboard[240];
- ITENVELOPE volenv;
- ITENVELOPE panenv;
- ITENVELOPE pitchenv;
- BYTE dummy[4]; // was 7, but IT v2.17 saves 554 bytes
-} ITINSTRUMENT;
-
-
-// IT Sample Format
-typedef struct ITSAMPLESTRUCT
-{
- DWORD id; // 0x53504D49
- CHAR filename[12];
- BYTE zero;
- BYTE gvl;
- BYTE flags;
- BYTE vol;
- CHAR name[26];
- BYTE cvt;
- BYTE dfp;
- DWORD length;
- DWORD loopbegin;
- DWORD loopend;
- DWORD C5Speed;
- DWORD susloopbegin;
- DWORD susloopend;
- DWORD samplepointer;
- BYTE vis;
- BYTE vid;
- BYTE vir;
- BYTE vit;
-} ITSAMPLESTRUCT;
-
-#pragma pack()
-
-extern BYTE autovibit2xm[8];
-extern BYTE autovibxm2it[8];
-
-#endif
+++ /dev/null
-/*
- * This source code is public domain.
- *
- * Authors: Kenton Varda <temporal@gauge3d.org> (C interface wrapper)
- */
-
-#ifndef MODPLUG_H__INCLUDED
-#define MODPLUG_H__INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct _ModPlugFile;
-typedef struct _ModPlugFile ModPlugFile;
-
-struct _ModPlugNote {
- unsigned char Note;
- unsigned char Instrument;
- unsigned char VolumeEffect;
- unsigned char Effect;
- unsigned char Volume;
- unsigned char Parameter;
-};
-typedef struct _ModPlugNote ModPlugNote;
-
-typedef void (*ModPlugMixerProc)(int*, unsigned long, unsigned long);
-
-/* Load a mod file. [data] should point to a block of memory containing the complete
- * file, and [size] should be the size of that block.
- * Return the loaded mod file on success, or NULL on failure. */
-ModPlugFile* ModPlug_Load(const void* data, int size);
-/* Unload a mod file. */
-void ModPlug_Unload(ModPlugFile* file);
-
-/* Read sample data into the buffer. Returns the number of bytes read. If the end
- * of the mod has been reached, zero is returned. */
-int ModPlug_Read(ModPlugFile* file, void* buffer, int size);
-
-/* Get the name of the mod. The returned buffer is stored within the ModPlugFile
- * structure and will remain valid until you unload the file. */
-const char* ModPlug_GetName(ModPlugFile* file);
-
-/* Get the length of the mod, in milliseconds. Note that this result is not always
- * accurate, especially in the case of mods with loops. */
-int ModPlug_GetLength(ModPlugFile* file);
-
-/* Seek to a particular position in the song. Note that seeking and MODs don't mix very
- * well. Some mods will be missing instruments for a short time after a seek, as ModPlug
- * does not scan the sequence backwards to find out which instruments were supposed to be
- * playing at that time. (Doing so would be difficult and not very reliable.) Also,
- * note that seeking is not very exact in some mods -- especially those for which
- * ModPlug_GetLength() does not report the full length. */
-void ModPlug_Seek(ModPlugFile* file, int millisecond);
-
-enum _ModPlug_Flags
-{
- MODPLUG_ENABLE_OVERSAMPLING = 1 << 0, /* Enable oversampling (*highly* recommended) */
- MODPLUG_ENABLE_NOISE_REDUCTION = 1 << 1, /* Enable noise reduction */
- MODPLUG_ENABLE_REVERB = 1 << 2, /* Enable reverb */
- MODPLUG_ENABLE_MEGABASS = 1 << 3, /* Enable megabass */
- MODPLUG_ENABLE_SURROUND = 1 << 4 /* Enable surround sound. */
-};
-
-enum _ModPlug_ResamplingMode
-{
- MODPLUG_RESAMPLE_NEAREST = 0, /* No interpolation (very fast, extremely bad sound quality) */
- MODPLUG_RESAMPLE_LINEAR = 1, /* Linear interpolation (fast, good quality) */
- MODPLUG_RESAMPLE_SPLINE = 2, /* Cubic spline interpolation (high quality) */
- MODPLUG_RESAMPLE_FIR = 3 /* 8-tap fir filter (extremely high quality) */
-};
-
-typedef struct _ModPlug_Settings
-{
- int mFlags; /* One or more of the MODPLUG_ENABLE_* flags above, bitwise-OR'ed */
-
- /* Note that ModPlug always decodes sound at 44100kHz, 32 bit, stereo and then
- * down-mixes to the settings you choose. */
- int mChannels; /* Number of channels - 1 for mono or 2 for stereo */
- int mBits; /* Bits per sample - 8, 16, or 32 */
- int mFrequency; /* Sampling rate - 11025, 22050, or 44100 */
- int mResamplingMode; /* One of MODPLUG_RESAMPLE_*, above */
-
- int mStereoSeparation; /* Stereo separation, 1 - 256 */
- int mMaxMixChannels; /* Maximum number of mixing channels (polyphony), 32 - 256 */
-
- int mReverbDepth; /* Reverb level 0(quiet)-100(loud) */
- int mReverbDelay; /* Reverb delay in ms, usually 40-200ms */
- int mBassAmount; /* XBass level 0(quiet)-100(loud) */
- int mBassRange; /* XBass cutoff in Hz 10-100 */
- int mSurroundDepth; /* Surround level 0(quiet)-100(heavy) */
- int mSurroundDelay; /* Surround delay in ms, usually 5-40ms */
- int mLoopCount; /* Number of times to loop. Zero prevents looping.
- -1 loops forever. */
-} ModPlug_Settings;
-
-/* Get and set the mod decoder settings. All options, except for channels, bits-per-sample,
- * sampling rate, and loop count, will take effect immediately. Those options which don't
- * take effect immediately will take effect the next time you load a mod. */
-void ModPlug_GetSettings(ModPlug_Settings* settings);
-void ModPlug_SetSettings(const ModPlug_Settings* settings);
-
-/* New ModPlug API Functions */
-/* NOTE: Master Volume (1-512) */
-unsigned int ModPlug_GetMasterVolume(ModPlugFile* file) ;
-void ModPlug_SetMasterVolume(ModPlugFile* file,unsigned int cvol) ;
-
-int ModPlug_GetCurrentSpeed(ModPlugFile* file);
-int ModPlug_GetCurrentTempo(ModPlugFile* file);
-int ModPlug_GetCurrentOrder(ModPlugFile* file);
-int ModPlug_GetCurrentPattern(ModPlugFile* file);
-int ModPlug_GetCurrentRow(ModPlugFile* file);
-int ModPlug_GetPlayingChannels(ModPlugFile* file);
-
-void ModPlug_SeekOrder(ModPlugFile* file,int order);
-int ModPlug_GetModuleType(ModPlugFile* file);
-char* ModPlug_GetMessage(ModPlugFile* file);
-
-
-#ifndef MODPLUG_NO_FILESAVE
-/*
- * EXPERIMENTAL Export Functions
- */
-/*Export to a Scream Tracker 3 S3M module. EXPERIMENTAL (only works on Little-Endian platforms)*/
-char ModPlug_ExportS3M(ModPlugFile* file, const char* filepath);
-
-/*Export to a Extended Module (XM). EXPERIMENTAL (only works on Little-Endian platforms)*/
-char ModPlug_ExportXM(ModPlugFile* file, const char* filepath);
-
-/*Export to a Amiga MOD file. EXPERIMENTAL.*/
-char ModPlug_ExportMOD(ModPlugFile* file, const char* filepath);
-
-/*Export to a Impulse Tracker IT file. Should work OK in Little-Endian & Big-Endian platforms :-) */
-char ModPlug_ExportIT(ModPlugFile* file, const char* filepath);
-#endif // MODPLUG_NO_FILESAVE
-
-unsigned int ModPlug_NumInstruments(ModPlugFile* file);
-unsigned int ModPlug_NumSamples(ModPlugFile* file);
-unsigned int ModPlug_NumPatterns(ModPlugFile* file);
-unsigned int ModPlug_NumChannels(ModPlugFile* file);
-unsigned int ModPlug_SampleName(ModPlugFile* file, unsigned int qual, char* buff);
-unsigned int ModPlug_InstrumentName(ModPlugFile* file, unsigned int qual, char* buff);
-
-/*
- * Retrieve pattern note-data
- */
-ModPlugNote* ModPlug_GetPattern(ModPlugFile* file, int pattern, unsigned int* numrows);
-
-/*
- * =================
- * Mixer callback
- * =================
- *
- * Use this callback if you want to 'modify' the mixed data of LibModPlug.
- *
- * void proc(int* buffer,unsigned long channels,unsigned long nsamples) ;
- *
- * 'buffer': A buffer of mixed samples
- * 'channels': N. of channels in the buffer
- * 'nsamples': N. of samples in the buffeer (without taking care of n.channels)
- *
- * (Samples are signed 32-bit integers)
- */
-void ModPlug_InitMixerCallback(ModPlugFile* file,ModPlugMixerProc proc) ;
-void ModPlug_UnloadMixerCallback(ModPlugFile* file) ;
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
+++ /dev/null
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-#if defined(HAVE_CONFIG_H) && !defined(CONFIG_H_INCLUDED)
-#include "config.h"
-#define CONFIG_H_INCLUDED 1
-#endif
-
-#ifndef __SNDFILE_H
-#define __SNDFILE_H
-
-#ifdef UNDER_CE
-int _strnicmp(const char *str1,const char *str2, int n);
-#endif
-
-#ifndef LPCBYTE
-typedef const BYTE * LPCBYTE;
-#endif
-
-#define MOD_AMIGAC2 0x1AB
-#define MAX_SAMPLE_LENGTH 16000000
-#define MAX_SAMPLE_RATE 192000
-#define MAX_ORDERS 256
-#define MAX_PATTERNS 240
-#define MAX_SAMPLES 240
-#define MAX_INSTRUMENTS MAX_SAMPLES
-#ifdef MODPLUG_FASTSOUNDLIB
-#define MAX_CHANNELS 80
-#else
-#define MAX_CHANNELS 128
-#endif
-#define MAX_BASECHANNELS 64
-#define MAX_ENVPOINTS 32
-#define MIN_PERIOD 0x0020
-#define MAX_PERIOD 0xFFFF
-#define MAX_PATTERNNAME 32
-#define MAX_CHANNELNAME 20
-#define MAX_INFONAME 80
-#define MAX_EQ_BANDS 6
-#define MAX_MIXPLUGINS 8
-
-
-#define MOD_TYPE_NONE 0x00
-#define MOD_TYPE_MOD 0x01
-#define MOD_TYPE_S3M 0x02
-#define MOD_TYPE_XM 0x04
-#define MOD_TYPE_MED 0x08
-#define MOD_TYPE_MTM 0x10
-#define MOD_TYPE_IT 0x20
-#define MOD_TYPE_669 0x40
-#define MOD_TYPE_ULT 0x80
-#define MOD_TYPE_STM 0x100
-#define MOD_TYPE_FAR 0x200
-#define MOD_TYPE_WAV 0x400
-#define MOD_TYPE_AMF 0x800
-#define MOD_TYPE_AMS 0x1000
-#define MOD_TYPE_DSM 0x2000
-#define MOD_TYPE_MDL 0x4000
-#define MOD_TYPE_OKT 0x8000
-#define MOD_TYPE_MID 0x10000
-#define MOD_TYPE_DMF 0x20000
-#define MOD_TYPE_PTM 0x40000
-#define MOD_TYPE_DBM 0x80000
-#define MOD_TYPE_MT2 0x100000
-#define MOD_TYPE_AMF0 0x200000
-#define MOD_TYPE_PSM 0x400000
-#define MOD_TYPE_J2B 0x800000
-#define MOD_TYPE_ABC 0x1000000
-#define MOD_TYPE_PAT 0x2000000
-#define MOD_TYPE_UMX 0x80000000 // Fake type
-#define MAX_MODTYPE 24
-
-
-
-// Channel flags:
-// Bits 0-7: Sample Flags
-#define CHN_16BIT 0x01
-#define CHN_LOOP 0x02
-#define CHN_PINGPONGLOOP 0x04
-#define CHN_SUSTAINLOOP 0x08
-#define CHN_PINGPONGSUSTAIN 0x10
-#define CHN_PANNING 0x20
-#define CHN_STEREO 0x40
-#define CHN_PINGPONGFLAG 0x80
-// Bits 8-31: Channel Flags
-#define CHN_MUTE 0x100
-#define CHN_KEYOFF 0x200
-#define CHN_NOTEFADE 0x400
-#define CHN_SURROUND 0x800
-#define CHN_NOIDO 0x1000
-#define CHN_HQSRC 0x2000
-#define CHN_FILTER 0x4000
-#define CHN_VOLUMERAMP 0x8000
-#define CHN_VIBRATO 0x10000
-#define CHN_TREMOLO 0x20000
-#define CHN_PANBRELLO 0x40000
-#define CHN_PORTAMENTO 0x80000
-#define CHN_GLISSANDO 0x100000
-#define CHN_VOLENV 0x200000
-#define CHN_PANENV 0x400000
-#define CHN_PITCHENV 0x800000
-#define CHN_FASTVOLRAMP 0x1000000
-#define CHN_EXTRALOUD 0x2000000
-#define CHN_REVERB 0x4000000
-#define CHN_NOREVERB 0x8000000
-
-
-#define ENV_VOLUME 0x0001
-#define ENV_VOLSUSTAIN 0x0002
-#define ENV_VOLLOOP 0x0004
-#define ENV_PANNING 0x0008
-#define ENV_PANSUSTAIN 0x0010
-#define ENV_PANLOOP 0x0020
-#define ENV_PITCH 0x0040
-#define ENV_PITCHSUSTAIN 0x0080
-#define ENV_PITCHLOOP 0x0100
-#define ENV_SETPANNING 0x0200
-#define ENV_FILTER 0x0400
-#define ENV_VOLCARRY 0x0800
-#define ENV_PANCARRY 0x1000
-#define ENV_PITCHCARRY 0x2000
-
-#define CMD_NONE 0
-#define CMD_ARPEGGIO 1
-#define CMD_PORTAMENTOUP 2
-#define CMD_PORTAMENTODOWN 3
-#define CMD_TONEPORTAMENTO 4
-#define CMD_VIBRATO 5
-#define CMD_TONEPORTAVOL 6
-#define CMD_VIBRATOVOL 7
-#define CMD_TREMOLO 8
-#define CMD_PANNING8 9
-#define CMD_OFFSET 10
-#define CMD_VOLUMESLIDE 11
-#define CMD_POSITIONJUMP 12
-#define CMD_VOLUME 13
-#define CMD_PATTERNBREAK 14
-#define CMD_RETRIG 15
-#define CMD_SPEED 16
-#define CMD_TEMPO 17
-#define CMD_TREMOR 18
-#define CMD_MODCMDEX 19
-#define CMD_S3MCMDEX 20
-#define CMD_CHANNELVOLUME 21
-#define CMD_CHANNELVOLSLIDE 22
-#define CMD_GLOBALVOLUME 23
-#define CMD_GLOBALVOLSLIDE 24
-#define CMD_KEYOFF 25
-#define CMD_FINEVIBRATO 26
-#define CMD_PANBRELLO 27
-#define CMD_XFINEPORTAUPDOWN 28
-#define CMD_PANNINGSLIDE 29
-#define CMD_SETENVPOSITION 30
-#define CMD_MIDI 31
-
-
-// Volume Column commands
-#define VOLCMD_VOLUME 1
-#define VOLCMD_PANNING 2
-#define VOLCMD_VOLSLIDEUP 3
-#define VOLCMD_VOLSLIDEDOWN 4
-#define VOLCMD_FINEVOLUP 5
-#define VOLCMD_FINEVOLDOWN 6
-#define VOLCMD_VIBRATOSPEED 7
-#define VOLCMD_VIBRATO 8
-#define VOLCMD_PANSLIDELEFT 9
-#define VOLCMD_PANSLIDERIGHT 10
-#define VOLCMD_TONEPORTAMENTO 11
-#define VOLCMD_PORTAUP 12
-#define VOLCMD_PORTADOWN 13
-
-#define RSF_16BIT 0x04
-#define RSF_STEREO 0x08
-
-#define RS_PCM8S 0 // 8-bit signed
-#define RS_PCM8U 1 // 8-bit unsigned
-#define RS_PCM8D 2 // 8-bit delta values
-#define RS_ADPCM4 3 // 4-bit ADPCM-packed
-#define RS_PCM16D 4 // 16-bit delta values
-#define RS_PCM16S 5 // 16-bit signed
-#define RS_PCM16U 6 // 16-bit unsigned
-#define RS_PCM16M 7 // 16-bit motorola order
-#define RS_STPCM8S (RS_PCM8S|RSF_STEREO) // stereo 8-bit signed
-#define RS_STPCM8U (RS_PCM8U|RSF_STEREO) // stereo 8-bit unsigned
-#define RS_STPCM8D (RS_PCM8D|RSF_STEREO) // stereo 8-bit delta values
-#define RS_STPCM16S (RS_PCM16S|RSF_STEREO) // stereo 16-bit signed
-#define RS_STPCM16U (RS_PCM16U|RSF_STEREO) // stereo 16-bit unsigned
-#define RS_STPCM16D (RS_PCM16D|RSF_STEREO) // stereo 16-bit delta values
-#define RS_STPCM16M (RS_PCM16M|RSF_STEREO) // stereo 16-bit signed big endian
-// IT 2.14 compressed samples
-#define RS_IT2148 0x10
-#define RS_IT21416 0x14
-#define RS_IT2158 0x12
-#define RS_IT21516 0x16
-// AMS Packed Samples
-#define RS_AMS8 0x11
-#define RS_AMS16 0x15
-// DMF Huffman compression
-#define RS_DMF8 0x13
-#define RS_DMF16 0x17
-// MDL Huffman compression
-#define RS_MDL8 0x20
-#define RS_MDL16 0x24
-#define RS_PTM8DTO16 0x25
-// Stereo Interleaved Samples
-#define RS_STIPCM8S (RS_PCM8S|0x40|RSF_STEREO) // stereo 8-bit signed
-#define RS_STIPCM8U (RS_PCM8U|0x40|RSF_STEREO) // stereo 8-bit unsigned
-#define RS_STIPCM16S (RS_PCM16S|0x40|RSF_STEREO) // stereo 16-bit signed
-#define RS_STIPCM16U (RS_PCM16U|0x40|RSF_STEREO) // stereo 16-bit unsigned
-#define RS_STIPCM16M (RS_PCM16M|0x40|RSF_STEREO) // stereo 16-bit signed big endian
-// 24-bit signed
-#define RS_PCM24S (RS_PCM16S|0x80) // mono 24-bit signed
-#define RS_STIPCM24S (RS_PCM16S|0x80|RSF_STEREO) // stereo 24-bit signed
-#define RS_PCM32S (RS_PCM16S|0xC0) // mono 24-bit signed
-#define RS_STIPCM32S (RS_PCM16S|0xC0|RSF_STEREO) // stereo 24-bit signed
-
-// NNA types
-#define NNA_NOTECUT 0
-#define NNA_CONTINUE 1
-#define NNA_NOTEOFF 2
-#define NNA_NOTEFADE 3
-
-// DCT types
-#define DCT_NONE 0
-#define DCT_NOTE 1
-#define DCT_SAMPLE 2
-#define DCT_INSTRUMENT 3
-
-// DNA types
-#define DNA_NOTECUT 0
-#define DNA_NOTEOFF 1
-#define DNA_NOTEFADE 2
-
-// Mixer Hardware-Dependent features
-#define SYSMIX_ENABLEMMX 0x01
-#define SYSMIX_WINDOWSNT 0x02
-#define SYSMIX_SLOWCPU 0x04
-#define SYSMIX_FASTCPU 0x08
-
-// Module flags
-#define SONG_EMBEDMIDICFG 0x0001
-#define SONG_FASTVOLSLIDES 0x0002
-#define SONG_ITOLDEFFECTS 0x0004
-#define SONG_ITCOMPATMODE 0x0008
-#define SONG_LINEARSLIDES 0x0010
-#define SONG_PATTERNLOOP 0x0020
-#define SONG_STEP 0x0040
-#define SONG_PAUSED 0x0080
-#define SONG_FADINGSONG 0x0100
-#define SONG_ENDREACHED 0x0200
-#define SONG_GLOBALFADE 0x0400
-#define SONG_CPUVERYHIGH 0x0800
-#define SONG_FIRSTTICK 0x1000
-#define SONG_MPTFILTERMODE 0x2000
-#define SONG_SURROUNDPAN 0x4000
-#define SONG_EXFILTERRANGE 0x8000
-#define SONG_AMIGALIMITS 0x10000
-
-// Global Options (Renderer)
-#define SNDMIX_REVERSESTEREO 0x0001
-#define SNDMIX_NOISEREDUCTION 0x0002
-#define SNDMIX_AGC 0x0004
-#define SNDMIX_NORESAMPLING 0x0008
-#define SNDMIX_HQRESAMPLER 0x0010
-#define SNDMIX_MEGABASS 0x0020
-#define SNDMIX_SURROUND 0x0040
-#define SNDMIX_REVERB 0x0080
-#define SNDMIX_EQ 0x0100
-#define SNDMIX_SOFTPANNING 0x0200
-#define SNDMIX_ULTRAHQSRCMODE 0x0400
-// Misc Flags (can safely be turned on or off)
-#define SNDMIX_DIRECTTODISK 0x10000
-#define SNDMIX_ENABLEMMX 0x20000
-#define SNDMIX_NOBACKWARDJUMPS 0x40000
-#define SNDMIX_MAXDEFAULTPAN 0x80000 // Used by the MOD loader
-
-
-// Reverb Types (GM2 Presets)
-enum {
- REVERBTYPE_SMALLROOM,
- REVERBTYPE_MEDIUMROOM,
- REVERBTYPE_LARGEROOM,
- REVERBTYPE_SMALLHALL,
- REVERBTYPE_MEDIUMHALL,
- REVERBTYPE_LARGEHALL,
- NUM_REVERBTYPES
-};
-
-
-enum {
- SRCMODE_NEAREST,
- SRCMODE_LINEAR,
- SRCMODE_SPLINE,
- SRCMODE_POLYPHASE,
- NUM_SRC_MODES
-};
-
-
-// Sample Struct
-typedef struct _MODINSTRUMENT
-{
- UINT nLength,nLoopStart,nLoopEnd;
- UINT nSustainStart, nSustainEnd;
- signed char *pSample;
- UINT nC4Speed;
- WORD nPan;
- WORD nVolume;
- WORD nGlobalVol;
- WORD uFlags;
- signed char RelativeTone;
- signed char nFineTune;
- BYTE nVibType;
- BYTE nVibSweep;
- BYTE nVibDepth;
- BYTE nVibRate;
- CHAR name[22];
-} MODINSTRUMENT;
-
-
-// Instrument Struct
-typedef struct _INSTRUMENTHEADER
-{
- UINT nFadeOut;
- DWORD dwFlags;
- WORD nGlobalVol;
- WORD nPan;
- WORD VolPoints[MAX_ENVPOINTS];
- WORD PanPoints[MAX_ENVPOINTS];
- WORD PitchPoints[MAX_ENVPOINTS];
- BYTE VolEnv[MAX_ENVPOINTS];
- BYTE PanEnv[MAX_ENVPOINTS];
- BYTE PitchEnv[MAX_ENVPOINTS];
- BYTE Keyboard[128];
- BYTE NoteMap[128];
-
- BYTE nVolEnv;
- BYTE nPanEnv;
- BYTE nPitchEnv;
- BYTE nVolLoopStart;
- BYTE nVolLoopEnd;
- BYTE nVolSustainBegin;
- BYTE nVolSustainEnd;
- BYTE nPanLoopStart;
- BYTE nPanLoopEnd;
- BYTE nPanSustainBegin;
- BYTE nPanSustainEnd;
- BYTE nPitchLoopStart;
- BYTE nPitchLoopEnd;
- BYTE nPitchSustainBegin;
- BYTE nPitchSustainEnd;
- BYTE nNNA;
- BYTE nDCT;
- BYTE nDNA;
- BYTE nPanSwing;
- BYTE nVolSwing;
- BYTE nIFC;
- BYTE nIFR;
- WORD wMidiBank;
- BYTE nMidiProgram;
- BYTE nMidiChannel;
- BYTE nMidiDrumKey;
- signed char nPPS;
- unsigned char nPPC;
- CHAR name[32];
- CHAR filename[12];
-} INSTRUMENTHEADER;
-
-
-// Channel Struct
-typedef struct _MODCHANNEL
-{
- // First 32-bytes: Most used mixing information: don't change it
- signed char * pCurrentSample;
- DWORD nPos;
- DWORD nPosLo; // actually 16-bit
- LONG nInc; // 16.16
- LONG nRightVol;
- LONG nLeftVol;
- LONG nRightRamp;
- LONG nLeftRamp;
- // 2nd cache line
- DWORD nLength;
- DWORD dwFlags;
- DWORD nLoopStart;
- DWORD nLoopEnd;
- LONG nRampRightVol;
- LONG nRampLeftVol;
- LONG nFilter_Y1, nFilter_Y2, nFilter_Y3, nFilter_Y4;
- LONG nFilter_A0, nFilter_B0, nFilter_B1;
- LONG nROfs, nLOfs;
- LONG nRampLength;
- // Information not used in the mixer
- signed char * pSample;
- LONG nNewRightVol, nNewLeftVol;
- LONG nRealVolume, nRealPan;
- LONG nVolume, nPan, nFadeOutVol;
- LONG nPeriod, nC4Speed, nPortamentoDest;
- INSTRUMENTHEADER *pHeader;
- MODINSTRUMENT *pInstrument;
- DWORD nVolEnvPosition, nPanEnvPosition, nPitchEnvPosition;
- DWORD nMasterChn, nVUMeter;
- LONG nGlobalVol, nInsVol;
- LONG nFineTune, nTranspose;
- LONG nPortamentoSlide, nAutoVibDepth;
- UINT nAutoVibPos, nVibratoPos, nTremoloPos, nPanbrelloPos;
- // 16-bit members
- signed short nVolSwing, nPanSwing;
- // 8-bit members
- BYTE nNote, nNNA;
- BYTE nNewNote, nNewIns, nCommand, nArpeggio;
- BYTE nOldVolumeSlide, nOldFineVolUpDown;
- BYTE nOldPortaUpDown, nOldFinePortaUpDown;
- BYTE nOldPanSlide, nOldChnVolSlide;
- BYTE nVibratoType, nVibratoSpeed, nVibratoDepth;
- BYTE nTremoloType, nTremoloSpeed, nTremoloDepth;
- BYTE nPanbrelloType, nPanbrelloSpeed, nPanbrelloDepth;
- BYTE nOldCmdEx, nOldVolParam, nOldTempo;
- BYTE nOldOffset, nOldHiOffset;
- BYTE nCutOff, nResonance;
- BYTE nRetrigCount, nRetrigParam;
- BYTE nTremorCount, nTremorParam;
- BYTE nPatternLoop, nPatternLoopCount;
- BYTE nRowNote, nRowInstr;
- BYTE nRowVolCmd, nRowVolume;
- BYTE nRowCommand, nRowParam;
- BYTE nLeftVU, nRightVU;
- BYTE nActiveMacro, nPadding;
-} MODCHANNEL;
-
-
-typedef struct _MODCHANNELSETTINGS
-{
- UINT nPan;
- UINT nVolume;
- DWORD dwFlags;
- UINT nMixPlugin;
- char szName[MAX_CHANNELNAME]; // changed from CHAR
-} MODCHANNELSETTINGS;
-
-
-typedef struct _MODCOMMAND
-{
- BYTE note;
- BYTE instr;
- BYTE volcmd;
- BYTE command;
- BYTE vol;
- BYTE param;
-} MODCOMMAND, *LPMODCOMMAND;
-
-////////////////////////////////////////////////////////////////////
-// Mix Plugins
-#define MIXPLUG_MIXREADY 0x01 // Set when cleared
-
-class IMixPlugin
-{
-public:
- virtual ~IMixPlugin();
- virtual int AddRef() = 0;
- virtual int Release() = 0;
- virtual void SaveAllParameters() = 0;
- virtual void RestoreAllParameters() = 0;
- virtual void Process(float *pOutL, float *pOutR, unsigned long nSamples) = 0;
- virtual void Init(unsigned long nFreq, int bReset) = 0;
- virtual void MidiSend(DWORD dwMidiCode) = 0;
- virtual void MidiCommand(UINT nMidiCh, UINT nMidiProg, UINT note, UINT vol) = 0;
-};
-
-
-#define MIXPLUG_INPUTF_MASTEREFFECT 0x01 // Apply to master mix
-#define MIXPLUG_INPUTF_BYPASS 0x02 // Bypass effect
-#define MIXPLUG_INPUTF_WETMIX 0x04 // Wet Mix (dry added)
-
-typedef struct _SNDMIXPLUGINSTATE
-{
- DWORD dwFlags; // MIXPLUG_XXXX
- LONG nVolDecayL, nVolDecayR; // Buffer click removal
- int *pMixBuffer; // Stereo effect send buffer
- float *pOutBufferL; // Temp storage for int -> float conversion
- float *pOutBufferR;
-} SNDMIXPLUGINSTATE, *PSNDMIXPLUGINSTATE;
-
-typedef struct _SNDMIXPLUGININFO
-{
- DWORD dwPluginId1;
- DWORD dwPluginId2;
- DWORD dwInputRouting; // MIXPLUG_INPUTF_XXXX
- DWORD dwOutputRouting; // 0=mix 0x80+=fx
- DWORD dwReserved[4]; // Reserved for routing info
- CHAR szName[32];
- CHAR szLibraryName[64]; // original DLL name
-} SNDMIXPLUGININFO, *PSNDMIXPLUGININFO; // Size should be 128
-
-typedef struct _SNDMIXPLUGIN
-{
- IMixPlugin *pMixPlugin;
- PSNDMIXPLUGINSTATE pMixState;
- ULONG nPluginDataSize;
- PVOID pPluginData;
- SNDMIXPLUGININFO Info;
-} SNDMIXPLUGIN, *PSNDMIXPLUGIN;
-
-typedef BOOL (*PMIXPLUGINCREATEPROC)(PSNDMIXPLUGIN);
-
-////////////////////////////////////////////////////////////////////
-
-enum {
- MIDIOUT_START=0,
- MIDIOUT_STOP,
- MIDIOUT_TICK,
- MIDIOUT_NOTEON,
- MIDIOUT_NOTEOFF,
- MIDIOUT_VOLUME,
- MIDIOUT_PAN,
- MIDIOUT_BANKSEL,
- MIDIOUT_PROGRAM,
-};
-
-
-typedef struct MODMIDICFG
-{
- char szMidiGlb[9*32]; // changed from CHAR
- char szMidiSFXExt[16*32]; // changed from CHAR
- char szMidiZXXExt[128*32]; // changed from CHAR
-} MODMIDICFG, *LPMODMIDICFG;
-
-#define NOTE_MAX 120 //Defines maximum notevalue as well as maximum number of notes.
-
-typedef VOID (* LPSNDMIXHOOKPROC)(int *, unsigned long, unsigned long); // buffer, samples, channels
-
-
-
-//==============
-class CSoundFile
-//==============
-{
-public: // Static Members
- static UINT m_nXBassDepth, m_nXBassRange;
- static UINT m_nReverbDepth, m_nReverbDelay, gnReverbType;
- static UINT m_nProLogicDepth, m_nProLogicDelay;
- static UINT m_nStereoSeparation;
- static UINT m_nMaxMixChannels;
- static LONG m_nStreamVolume;
- static DWORD gdwSysInfo, gdwSoundSetup, gdwMixingFreq, gnBitsPerSample, gnChannels;
- static UINT gnAGC, gnVolumeRampSamples, gnVUMeter, gnCPUUsage;
- static LPSNDMIXHOOKPROC gpSndMixHook;
- static PMIXPLUGINCREATEPROC gpMixPluginCreateProc;
-
-public: // for Editing
- MODCHANNEL Chn[MAX_CHANNELS]; // Channels
- UINT ChnMix[MAX_CHANNELS]; // Channels to be mixed
- MODINSTRUMENT Ins[MAX_SAMPLES]; // Instruments
- INSTRUMENTHEADER *Headers[MAX_INSTRUMENTS]; // Instrument Headers
- MODCHANNELSETTINGS ChnSettings[MAX_BASECHANNELS]; // Channels settings
- MODCOMMAND *Patterns[MAX_PATTERNS]; // Patterns
- WORD PatternSize[MAX_PATTERNS]; // Patterns Lengths
- BYTE Order[MAX_ORDERS]; // Pattern Orders
- MODMIDICFG m_MidiCfg; // Midi macro config table
- SNDMIXPLUGIN m_MixPlugins[MAX_MIXPLUGINS]; // Mix plugins
- UINT m_nDefaultSpeed, m_nDefaultTempo, m_nDefaultGlobalVolume;
- DWORD m_dwSongFlags; // Song flags SONG_XXXX
- UINT m_nChannels, m_nMixChannels, m_nMixStat, m_nBufferCount;
- UINT m_nType, m_nSamples, m_nInstruments;
- UINT m_nTickCount, m_nTotalCount, m_nPatternDelay, m_nFrameDelay;
- UINT m_nMusicSpeed, m_nMusicTempo;
- UINT m_nNextRow, m_nRow;
- UINT m_nPattern,m_nCurrentPattern,m_nNextPattern,m_nRestartPos;
- UINT m_nMasterVolume, m_nGlobalVolume, m_nSongPreAmp;
- UINT m_nFreqFactor, m_nTempoFactor, m_nOldGlbVolSlide;
- LONG m_nMinPeriod, m_nMaxPeriod, m_nRepeatCount, m_nInitialRepeatCount;
- DWORD m_nGlobalFadeSamples, m_nGlobalFadeMaxSamples;
- UINT m_nMaxOrderPosition;
- UINT m_nPatternNames;
- LPSTR m_lpszSongComments, m_lpszPatternNames;
- char m_szNames[MAX_INSTRUMENTS][32]; // changed from CHAR
- CHAR CompressionTable[16];
-
-public:
- CSoundFile();
- ~CSoundFile();
-
-public:
- BOOL Create(LPCBYTE lpStream, DWORD dwMemLength=0);
- BOOL Destroy();
- UINT GetType() const { return m_nType; }
- UINT GetNumChannels() const;
- UINT GetLogicalChannels() const { return m_nChannels; }
- BOOL SetMasterVolume(UINT vol, BOOL bAdjustAGC=FALSE);
- UINT GetMasterVolume() const { return m_nMasterVolume; }
- UINT GetNumPatterns() const;
- UINT GetNumInstruments() const;
- UINT GetNumSamples() const { return m_nSamples; }
- UINT GetCurrentPos() const;
- UINT GetCurrentPattern() const { return m_nPattern; }
- UINT GetCurrentOrder() const { return m_nCurrentPattern; }
- UINT GetSongComments(LPSTR s, UINT cbsize, UINT linesize=32);
- UINT GetRawSongComments(LPSTR s, UINT cbsize, UINT linesize=32);
- UINT GetMaxPosition() const;
- void SetCurrentPos(UINT nPos);
- void SetCurrentOrder(UINT nOrder);
- void GetTitle(LPSTR s) const { lstrcpyn(s,m_szNames[0],32); }
- LPCSTR GetTitle() const { return m_szNames[0]; }
- UINT GetSampleName(UINT nSample,LPSTR s=NULL) const;
- UINT GetInstrumentName(UINT nInstr,LPSTR s=NULL) const;
- UINT GetMusicSpeed() const { return m_nMusicSpeed; }
- UINT GetMusicTempo() const { return m_nMusicTempo; }
- DWORD GetLength(BOOL bAdjust, BOOL bTotal=FALSE);
- DWORD GetSongTime() { return GetLength(FALSE, TRUE); }
- void SetRepeatCount(int n) { m_nRepeatCount = n; m_nInitialRepeatCount = n; }
- int GetRepeatCount() const { return m_nRepeatCount; }
- BOOL IsPaused() const { return (m_dwSongFlags & SONG_PAUSED) ? TRUE : FALSE; }
- void LoopPattern(int nPat, int nRow=0);
- void CheckCPUUsage(UINT nCPU);
- BOOL SetPatternName(UINT nPat, LPCSTR lpszName);
- BOOL GetPatternName(UINT nPat, LPSTR lpszName, UINT cbSize=MAX_PATTERNNAME) const;
- // Module Loaders
- BOOL ReadXM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadS3M(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMod(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMed(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMTM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadSTM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadIT(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL Read669(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadUlt(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadWav(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadDSM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadFAR(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadAMS(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadAMS2(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMDL(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadOKT(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadDMF(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadPTM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadDBM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadAMF(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMT2(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadPSM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadJ2B(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadUMX(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadABC(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL TestABC(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMID(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL TestMID(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadPAT(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL TestPAT(LPCBYTE lpStream, DWORD dwMemLength);
- // Save Functions
-#ifndef MODPLUG_NO_FILESAVE
- UINT WriteSample(FILE *f, MODINSTRUMENT *pins, UINT nFlags, UINT nMaxLen=0);
- BOOL SaveXM(LPCSTR lpszFileName, UINT nPacking=0);
- BOOL SaveS3M(LPCSTR lpszFileName, UINT nPacking=0);
- BOOL SaveMod(LPCSTR lpszFileName, UINT nPacking=0);
- BOOL SaveIT(LPCSTR lpszFileName, UINT nPacking=0);
-#endif // MODPLUG_NO_FILESAVE
- // MOD Convert function
- UINT GetBestSaveFormat() const;
- UINT GetSaveFormats() const;
- void ConvertModCommand(MODCOMMAND *) const;
- void S3MConvert(MODCOMMAND *m, BOOL bIT) const;
- void S3MSaveConvert(UINT *pcmd, UINT *pprm, BOOL bIT) const;
- WORD ModSaveCommand(const MODCOMMAND *m, BOOL bXM) const;
-
-public:
- // Real-time sound functions
- VOID ResetChannels();
-
- UINT Read(LPVOID lpBuffer, UINT cbBuffer);
- UINT CreateStereoMix(int count);
- BOOL FadeSong(UINT msec);
- BOOL GlobalFadeSong(UINT msec);
- UINT GetTotalTickCount() const { return m_nTotalCount; }
- VOID ResetTotalTickCount() { m_nTotalCount = 0; }
-
-public:
- // Mixer Config
- static BOOL InitPlayer(BOOL bReset=FALSE);
- static BOOL SetMixConfig(UINT nStereoSeparation, UINT nMaxMixChannels);
- static BOOL SetWaveConfig(UINT nRate,UINT nBits,UINT nChannels,BOOL bMMX=FALSE);
- static BOOL SetResamplingMode(UINT nMode); // SRCMODE_XXXX
- static BOOL IsStereo() { return (gnChannels > 1) ? TRUE : FALSE; }
- static DWORD GetSampleRate() { return gdwMixingFreq; }
- static DWORD GetBitsPerSample() { return gnBitsPerSample; }
- static DWORD InitSysInfo();
- static DWORD GetSysInfo() { return gdwSysInfo; }
- // AGC
- static BOOL GetAGC() { return (gdwSoundSetup & SNDMIX_AGC) ? TRUE : FALSE; }
- static void SetAGC(BOOL b);
- static void ResetAGC();
- static void ProcessAGC(int count);
-
- //GCCFIX -- added these functions back in!
- static BOOL SetWaveConfigEx(BOOL bSurround,BOOL bNoOverSampling,BOOL bReverb,BOOL hqido,BOOL bMegaBass,BOOL bNR,BOOL bEQ);
- // DSP Effects
- static void InitializeDSP(BOOL bReset);
- static void ProcessStereoDSP(int count);
- static void ProcessMonoDSP(int count);
- // [Reverb level 0(quiet)-100(loud)], [delay in ms, usually 40-200ms]
- static BOOL SetReverbParameters(UINT nDepth, UINT nDelay);
- // [XBass level 0(quiet)-100(loud)], [cutoff in Hz 10-100]
- static BOOL SetXBassParameters(UINT nDepth, UINT nRange);
- // [Surround level 0(quiet)-100(heavy)] [delay in ms, usually 5-40ms]
- static BOOL SetSurroundParameters(UINT nDepth, UINT nDelay);
-public:
- BOOL ReadNote();
- BOOL ProcessRow();
- BOOL ProcessEffects();
- UINT GetNNAChannel(UINT nChn) const;
- void CheckNNA(UINT nChn, UINT instr, int note, BOOL bForceCut);
- void NoteChange(UINT nChn, int note, BOOL bPorta=FALSE, BOOL bResetEnv=TRUE);
- void InstrumentChange(MODCHANNEL *pChn, UINT instr, BOOL bPorta=FALSE,BOOL bUpdVol=TRUE,BOOL bResetEnv=TRUE);
- // Channel Effects
- void PortamentoUp(MODCHANNEL *pChn, UINT param);
- void PortamentoDown(MODCHANNEL *pChn, UINT param);
- void FinePortamentoUp(MODCHANNEL *pChn, UINT param);
- void FinePortamentoDown(MODCHANNEL *pChn, UINT param);
- void ExtraFinePortamentoUp(MODCHANNEL *pChn, UINT param);
- void ExtraFinePortamentoDown(MODCHANNEL *pChn, UINT param);
- void TonePortamento(MODCHANNEL *pChn, UINT param);
- void Vibrato(MODCHANNEL *pChn, UINT param);
- void FineVibrato(MODCHANNEL *pChn, UINT param);
- void VolumeSlide(MODCHANNEL *pChn, UINT param);
- void PanningSlide(MODCHANNEL *pChn, UINT param);
- void ChannelVolSlide(MODCHANNEL *pChn, UINT param);
- void FineVolumeUp(MODCHANNEL *pChn, UINT param);
- void FineVolumeDown(MODCHANNEL *pChn, UINT param);
- void Tremolo(MODCHANNEL *pChn, UINT param);
- void Panbrello(MODCHANNEL *pChn, UINT param);
- void RetrigNote(UINT nChn, UINT param);
- void NoteCut(UINT nChn, UINT nTick);
- void KeyOff(UINT nChn);
- int PatternLoop(MODCHANNEL *, UINT param);
- void ExtendedMODCommands(UINT nChn, UINT param);
- void ExtendedS3MCommands(UINT nChn, UINT param);
- void ExtendedChannelEffect(MODCHANNEL *, UINT param);
- void ProcessMidiMacro(UINT nChn, LPCSTR pszMidiMacro, UINT param=0);
- void SetupChannelFilter(MODCHANNEL *pChn, BOOL bReset, int flt_modifier=256) const;
- // Low-Level effect processing
- void DoFreqSlide(MODCHANNEL *pChn, LONG nFreqSlide);
- // Global Effects
- void SetTempo(UINT param);
- void SetSpeed(UINT param);
- void GlobalVolSlide(UINT param);
- DWORD IsSongFinished(UINT nOrder, UINT nRow) const;
- BOOL IsValidBackwardJump(UINT nStartOrder, UINT nStartRow, UINT nJumpOrder, UINT nJumpRow) const;
- // Read/Write sample functions
- signed char GetDeltaValue(signed char prev, UINT n) const { return (signed char)(prev + CompressionTable[n & 0x0F]); }
- UINT PackSample(int &sample, int next);
- BOOL CanPackSample(LPSTR pSample, UINT nLen, UINT nPacking, BYTE *result=NULL);
- UINT ReadSample(MODINSTRUMENT *pIns, UINT nFlags, LPCSTR pMemFile, DWORD dwMemLength);
- BOOL DestroySample(UINT nSample);
- BOOL DestroyInstrument(UINT nInstr);
- BOOL IsSampleUsed(UINT nSample);
- BOOL IsInstrumentUsed(UINT nInstr);
- BOOL RemoveInstrumentSamples(UINT nInstr);
- UINT DetectUnusedSamples(BOOL *);
- BOOL RemoveSelectedSamples(BOOL *);
- void AdjustSampleLoop(MODINSTRUMENT *pIns);
- // I/O from another sound file
- BOOL ReadInstrumentFromSong(UINT nInstr, CSoundFile *, UINT nSrcInstrument);
- BOOL ReadSampleFromSong(UINT nSample, CSoundFile *, UINT nSrcSample);
- // Period/Note functions
- UINT GetNoteFromPeriod(UINT period) const;
- UINT GetPeriodFromNote(UINT note, int nFineTune, UINT nC4Speed) const;
- UINT GetFreqFromPeriod(UINT period, UINT nC4Speed, int nPeriodFrac=0) const;
- // Misc functions
- MODINSTRUMENT *GetSample(UINT n) { return Ins+n; }
- void ResetMidiCfg();
- UINT MapMidiInstrument(DWORD dwProgram, UINT nChannel, UINT nNote);
- BOOL ITInstrToMPT(const void *p, INSTRUMENTHEADER *penv, UINT trkvers);
- UINT SaveMixPlugins(FILE *f=NULL, BOOL bUpdate=TRUE);
- UINT LoadMixPlugins(const void *pData, UINT nLen);
-#ifndef NO_FILTER
- DWORD CutOffToFrequency(UINT nCutOff, int flt_modifier=256) const; // [0-255] => [1-10KHz]
-#endif
-
- // Static helper functions
-public:
- static DWORD TransposeToFrequency(int transp, int ftune=0);
- static int FrequencyToTranspose(DWORD freq);
- static void FrequencyToTranspose(MODINSTRUMENT *psmp);
-
- // System-Dependant functions
-public:
- static MODCOMMAND *AllocatePattern(UINT rows, UINT nchns);
- static signed char* AllocateSample(UINT nbytes);
- static void FreePattern(LPVOID pat);
- static void FreeSample(LPVOID p);
- static UINT Normalize24BitBuffer(LPBYTE pbuffer, UINT cbsizebytes, DWORD lmax24, DWORD dwByteInc);
-};
-
-
-// inline DWORD BigEndian(DWORD x) { return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | ((x & 0xFF0000) >> 8) | ((x & 0xFF000000) >> 24); }
-// inline WORD BigEndianW(WORD x) { return (WORD)(((x >> 8) & 0xFF) | ((x << 8) & 0xFF00)); }
-
-
-//////////////////////////////////////////////////////////
-// WAVE format information
-
-#pragma pack(1)
-
-// Standard IFF chunks IDs
-#define IFFID_FORM 0x4d524f46
-#define IFFID_RIFF 0x46464952
-#define IFFID_WAVE 0x45564157
-#define IFFID_LIST 0x5453494C
-#define IFFID_INFO 0x4F464E49
-
-// IFF Info fields
-#define IFFID_ICOP 0x504F4349
-#define IFFID_IART 0x54524149
-#define IFFID_IPRD 0x44525049
-#define IFFID_INAM 0x4D414E49
-#define IFFID_ICMT 0x544D4349
-#define IFFID_IENG 0x474E4549
-#define IFFID_ISFT 0x54465349
-#define IFFID_ISBJ 0x4A425349
-#define IFFID_IGNR 0x524E4749
-#define IFFID_ICRD 0x44524349
-
-// Wave IFF chunks IDs
-#define IFFID_wave 0x65766177
-#define IFFID_fmt 0x20746D66
-#define IFFID_wsmp 0x706D7377
-#define IFFID_pcm 0x206d6370
-#define IFFID_data 0x61746164
-#define IFFID_smpl 0x6C706D73
-#define IFFID_xtra 0x61727478
-
-typedef struct WAVEFILEHEADER
-{
- DWORD id_RIFF; // "RIFF"
- DWORD filesize; // file length-8
- DWORD id_WAVE;
-} WAVEFILEHEADER;
-
-
-typedef struct WAVEFORMATHEADER
-{
- DWORD id_fmt; // "fmt "
- DWORD hdrlen; // 16
- WORD format; // 1
- WORD channels; // 1:mono, 2:stereo
- DWORD freqHz; // sampling freq
- DWORD bytessec; // bytes/sec=freqHz*samplesize
- WORD samplesize; // sizeof(sample)
- WORD bitspersample; // bits per sample (8/16)
-} WAVEFORMATHEADER;
-
-
-typedef struct WAVEDATAHEADER
-{
- DWORD id_data; // "data"
- DWORD length; // length of data
-} WAVEDATAHEADER;
-
-
-typedef struct WAVESMPLHEADER
-{
- // SMPL
- DWORD smpl_id; // "smpl" -> 0x6C706D73
- DWORD smpl_len; // length of smpl: 3Ch (54h with sustain loop)
- DWORD dwManufacturer;
- DWORD dwProduct;
- DWORD dwSamplePeriod; // 1000000000/freqHz
- DWORD dwBaseNote; // 3Ch = C-4 -> 60 + RelativeTone
- DWORD dwPitchFraction;
- DWORD dwSMPTEFormat;
- DWORD dwSMPTEOffset;
- DWORD dwSampleLoops; // number of loops
- DWORD cbSamplerData;
-} WAVESMPLHEADER;
-
-
-typedef struct SAMPLELOOPSTRUCT
-{
- DWORD dwIdentifier;
- DWORD dwLoopType; // 0=normal, 1=bidi
- DWORD dwLoopStart;
- DWORD dwLoopEnd; // Byte offset ?
- DWORD dwFraction;
- DWORD dwPlayCount; // Loop Count, 0=infinite
-} SAMPLELOOPSTRUCT;
-
-
-typedef struct WAVESAMPLERINFO
-{
- WAVESMPLHEADER wsiHdr;
- SAMPLELOOPSTRUCT wsiLoops[2];
-} WAVESAMPLERINFO;
-
-
-typedef struct WAVELISTHEADER
-{
- DWORD list_id; // "LIST" -> 0x5453494C
- DWORD list_len;
- DWORD info; // "INFO"
-} WAVELISTHEADER;
-
-
-typedef struct WAVEEXTRAHEADER
-{
- DWORD xtra_id; // "xtra" -> 0x61727478
- DWORD xtra_len;
- DWORD dwFlags;
- WORD wPan;
- WORD wVolume;
- WORD wGlobalVol;
- WORD wReserved;
- BYTE nVibType;
- BYTE nVibSweep;
- BYTE nVibDepth;
- BYTE nVibRate;
-} WAVEEXTRAHEADER;
-
-#pragma pack()
-
-///////////////////////////////////////////////////////////
-// Low-level Mixing functions
-
-#define MIXBUFFERSIZE 512
-#define MIXING_ATTENUATION 4
-#define MIXING_CLIPMIN (-0x08000000)
-#define MIXING_CLIPMAX (0x07FFFFFF)
-#define VOLUMERAMPPRECISION 12
-#define FADESONGDELAY 100
-#define EQ_BUFFERSIZE (MIXBUFFERSIZE)
-#define AGC_PRECISION 9
-#define AGC_UNITY (1 << AGC_PRECISION)
-
-// Calling conventions
-#ifdef MSC_VER
-#define MPPASMCALL __cdecl
-#define MPPFASTCALL __fastcall
-#else
-#define MPPASMCALL
-#define MPPFASTCALL
-#endif
-
-#define MOD2XMFineTune(k) ((int)( (signed char)((k)<<4) ))
-#define XM2MODFineTune(k) ((int)( (k>>4)&0x0f ))
-
-int _muldiv(long a, long b, long c);
-int _muldivr(long a, long b, long c);
-
-
-// Byte swapping functions from the GNU C Library and libsdl
-
-/* Swap bytes in 16 bit value. */
-#ifdef __GNUC__
-# define bswap_16(x) \
- (__extension__ \
- ({ unsigned short int __bsx = (x); \
- ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); }))
-#else
-static __inline unsigned short int
-bswap_16 (unsigned short int __bsx)
-{
- return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8));
-}
-#endif
-
-/* Swap bytes in 32 bit value. */
-#ifdef __GNUC__
-# define bswap_32(x) \
- (__extension__ \
- ({ unsigned int __bsx = (x); \
- ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | \
- (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); }))
-#else
-static __inline unsigned int
-bswap_32 (unsigned int __bsx)
-{
- return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) |
- (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24));
-}
-#endif
-
-#if (defined ARM) && (defined _WIN32_WCE)
-static __inline unsigned short int
-ARM_get16(const void *data)
-{
- unsigned short int s;
- memcpy(&s,data,sizeof(s));
- return s;
-}
-
-static __inline unsigned int
-ARM_get32(const void *data)
-{
- unsigned int s;
- memcpy(&s,data,sizeof(s));
- return s;
-}
-
-#define bswapLE16(X) ARM_get16(&X)
-#define bswapLE32(X) ARM_get32(&X)
-#define bswapBE16(X) bswap_16(ARM_get16(&X))
-#define bswapBE32(X) bswap_32(ARM_get32(&X))
-
-// From libsdl
-#elif defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN
-#define bswapLE16(X) bswap_16(X)
-#define bswapLE32(X) bswap_32(X)
-#define bswapBE16(X) (X)
-#define bswapBE32(X) (X)
-#else
-#define bswapLE16(X) (X)
-#define bswapLE32(X) (X)
-#define bswapBE16(X) bswap_16(X)
-#define bswapBE32(X) bswap_32(X)
-#endif
-
-#endif
+++ /dev/null
-/*
- * This source code is public domain.
- *
- * Authors: Rani Assaf <rani@magic.metawire.com>,
- * Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
- */
-
-#ifndef _STDAFX_H_
-#define _STDAFX_H_
-
-/* Autoconf detection of stdint/inttypes */
-#if defined(HAVE_CONFIG_H) && !defined(CONFIG_H_INCLUDED)
-# include "config.h"
-# define CONFIG_H_INCLUDED 1
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-
-
-#ifdef _WIN32
-
-#ifdef MSC_VER
-#pragma warning (disable:4201)
-#pragma warning (disable:4514)
-#endif
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <windowsx.h>
-#include <mmsystem.h>
-#include <stdio.h>
-#include <malloc.h>
-#include <stdint.h>
-
-#define srandom(_seed) srand(_seed)
-#define random() rand()
-#define sleep(_ms) Sleep(_ms)
-
-inline void ProcessPlugins(int n) {}
-
-#define strncasecmp(a,b,c) strncmp(a,b,c)
-#define strcasecmp(a,b) strcmp(a,b)
-#define strnicmp(a,b,c) strncasecmp(a,b,c)
-#define HAVE_SINF 1
-
-#else
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#ifdef HAVE_MALLOC_H
-#include <malloc.h>
-#endif
-
-typedef int8_t CHAR;
-typedef uint8_t UCHAR;
-typedef uint8_t* PUCHAR;
-typedef uint16_t USHORT;
-typedef uint32_t ULONG;
-typedef uint32_t UINT;
-typedef uint32_t DWORD;
-typedef int32_t LONG;
-typedef int64_t LONGLONG;
-typedef int32_t* LPLONG;
-typedef uint32_t* LPDWORD;
-typedef uint16_t WORD;
-typedef uint8_t BYTE;
-typedef uint8_t* LPBYTE;
-typedef bool BOOL;
-typedef char* LPSTR;
-typedef void* LPVOID;
-typedef uint16_t* LPWORD;
-typedef const char* LPCSTR;
-typedef void* PVOID;
-typedef void VOID;
-
-inline LONG MulDiv (long a, long b, long c)
-{
- // if (!c) return 0;
- return ((uint64_t) a * (uint64_t) b ) / c;
-}
-
-#define MODPLUG_NO_FILESAVE
-#define NO_AGC
-#define LPCTSTR LPCSTR
-#define lstrcpyn strncpy
-#define lstrcpy strcpy
-#define lstrcmp strcmp
-#define WAVE_FORMAT_PCM 1
-//#define ENABLE_EQ
-
-#define GHND 0
-
-inline int8_t * GlobalAllocPtr(unsigned int, size_t size)
-{
- int8_t * p = (int8_t *) malloc(size);
-
- if (p != NULL) memset(p, 0, size);
- return p;
-}
-
-inline void ProcessPlugins(int n) {}
-
-#define GlobalFreePtr(p) free((void *)(p))
-
-#define strnicmp(a,b,c) strncasecmp(a,b,c)
-#define wsprintf sprintf
-
-#ifndef FALSE
-#define FALSE false
-#endif
-
-#ifndef TRUE
-#define TRUE true
-#endif
-
-#endif // _WIN32
-
-#endif
-
-
-
+++ /dev/null
-# libmodplug.la - a libtool library file
-# Generated by libtool (GNU libtool) 2.4
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname=''
-
-# Names of this library.
-library_names=''
-
-# The name of the static archive.
-old_library='libmodplug.a'
-
-# Linker flags that can not go in dependency_libs.
-inherited_linker_flags=''
-
-# Libraries that this one depends upon.
-dependency_libs=' -L/tmp/libmodplug-0.8.8.4.deps/lib/'
-
-# Names of additional weak libraries provided by this library
-weak_library_names=''
-
-# Version information for libmodplug.
-current=1
-age=0
-revision=0
-
-# Is this an already installed library?
-installed=yes
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=no
-
-# Files to dlopen/dlpreopen
-dlopen=''
-dlpreopen=''
-
-# Directory that this library needs to be installed in:
-libdir='/usr/local/lib'
+++ /dev/null
-prefix=/usr/local
-exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
-includedir=${prefix}/include
-
-Name: libmodplug
-Description: The ModPlug mod file playing library.
-Version: 0.8.8.4
-Requires:
-Libs: -L${libdir} -lmodplug
-Libs.private: -lstdc++ -lm
-Cflags: -I${includedir} -I${includedir}/libmodplug
+++ /dev/null
-#ifndef _ITDEFS_H_
-#define _ITDEFS_H_
-
-#pragma pack(1)
-
-typedef struct tagITFILEHEADER
-{
- DWORD id; // 0x4D504D49
- CHAR songname[26];
- WORD reserved1; // 0x1004
- WORD ordnum;
- WORD insnum;
- WORD smpnum;
- WORD patnum;
- WORD cwtv;
- WORD cmwt;
- WORD flags;
- WORD special;
- BYTE globalvol;
- BYTE mv;
- BYTE speed;
- BYTE tempo;
- BYTE sep;
- BYTE zero;
- WORD msglength;
- DWORD msgoffset;
- DWORD reserved2;
- BYTE chnpan[64];
- BYTE chnvol[64];
-} ITFILEHEADER;
-
-
-typedef struct tagITENVELOPE
-{
- BYTE flags;
- BYTE num;
- BYTE lpb;
- BYTE lpe;
- BYTE slb;
- BYTE sle;
- BYTE data[25*3];
- BYTE reserved;
-} ITENVELOPE;
-
-// Old Impulse Instrument Format (cmwt < 0x200)
-typedef struct tagITOLDINSTRUMENT
-{
- DWORD id; // IMPI = 0x49504D49
- CHAR filename[12]; // DOS file name
- BYTE zero;
- BYTE flags;
- BYTE vls;
- BYTE vle;
- BYTE sls;
- BYTE sle;
- WORD reserved1;
- WORD fadeout;
- BYTE nna;
- BYTE dnc;
- WORD trkvers;
- BYTE nos;
- BYTE reserved2;
- CHAR name[26];
- WORD reserved3[3];
- BYTE keyboard[240];
- BYTE volenv[200];
- BYTE nodes[50];
-} ITOLDINSTRUMENT;
-
-
-// Impulse Instrument Format
-typedef struct tagITINSTRUMENT
-{
- DWORD id;
- CHAR filename[12];
- BYTE zero;
- BYTE nna;
- BYTE dct;
- BYTE dca;
- WORD fadeout;
- signed char pps;
- BYTE ppc;
- BYTE gbv;
- BYTE dfp;
- BYTE rv;
- BYTE rp;
- WORD trkvers;
- BYTE nos;
- BYTE reserved1;
- CHAR name[26];
- BYTE ifc;
- BYTE ifr;
- BYTE mch;
- BYTE mpr;
- WORD mbank;
- BYTE keyboard[240];
- ITENVELOPE volenv;
- ITENVELOPE panenv;
- ITENVELOPE pitchenv;
- BYTE dummy[4]; // was 7, but IT v2.17 saves 554 bytes
-} ITINSTRUMENT;
-
-
-// IT Sample Format
-typedef struct ITSAMPLESTRUCT
-{
- DWORD id; // 0x53504D49
- CHAR filename[12];
- BYTE zero;
- BYTE gvl;
- BYTE flags;
- BYTE vol;
- CHAR name[26];
- BYTE cvt;
- BYTE dfp;
- DWORD length;
- DWORD loopbegin;
- DWORD loopend;
- DWORD C5Speed;
- DWORD susloopbegin;
- DWORD susloopend;
- DWORD samplepointer;
- BYTE vis;
- BYTE vid;
- BYTE vir;
- BYTE vit;
-} ITSAMPLESTRUCT;
-
-#pragma pack()
-
-extern BYTE autovibit2xm[8];
-extern BYTE autovibxm2it[8];
-
-#endif
+++ /dev/null
-/*
- * This source code is public domain.
- *
- * Authors: Kenton Varda <temporal@gauge3d.org> (C interface wrapper)
- */
-
-#ifndef MODPLUG_H__INCLUDED
-#define MODPLUG_H__INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct _ModPlugFile;
-typedef struct _ModPlugFile ModPlugFile;
-
-struct _ModPlugNote {
- unsigned char Note;
- unsigned char Instrument;
- unsigned char VolumeEffect;
- unsigned char Effect;
- unsigned char Volume;
- unsigned char Parameter;
-};
-typedef struct _ModPlugNote ModPlugNote;
-
-typedef void (*ModPlugMixerProc)(int*, unsigned long, unsigned long);
-
-/* Load a mod file. [data] should point to a block of memory containing the complete
- * file, and [size] should be the size of that block.
- * Return the loaded mod file on success, or NULL on failure. */
-ModPlugFile* ModPlug_Load(const void* data, int size);
-/* Unload a mod file. */
-void ModPlug_Unload(ModPlugFile* file);
-
-/* Read sample data into the buffer. Returns the number of bytes read. If the end
- * of the mod has been reached, zero is returned. */
-int ModPlug_Read(ModPlugFile* file, void* buffer, int size);
-
-/* Get the name of the mod. The returned buffer is stored within the ModPlugFile
- * structure and will remain valid until you unload the file. */
-const char* ModPlug_GetName(ModPlugFile* file);
-
-/* Get the length of the mod, in milliseconds. Note that this result is not always
- * accurate, especially in the case of mods with loops. */
-int ModPlug_GetLength(ModPlugFile* file);
-
-/* Seek to a particular position in the song. Note that seeking and MODs don't mix very
- * well. Some mods will be missing instruments for a short time after a seek, as ModPlug
- * does not scan the sequence backwards to find out which instruments were supposed to be
- * playing at that time. (Doing so would be difficult and not very reliable.) Also,
- * note that seeking is not very exact in some mods -- especially those for which
- * ModPlug_GetLength() does not report the full length. */
-void ModPlug_Seek(ModPlugFile* file, int millisecond);
-
-enum _ModPlug_Flags
-{
- MODPLUG_ENABLE_OVERSAMPLING = 1 << 0, /* Enable oversampling (*highly* recommended) */
- MODPLUG_ENABLE_NOISE_REDUCTION = 1 << 1, /* Enable noise reduction */
- MODPLUG_ENABLE_REVERB = 1 << 2, /* Enable reverb */
- MODPLUG_ENABLE_MEGABASS = 1 << 3, /* Enable megabass */
- MODPLUG_ENABLE_SURROUND = 1 << 4 /* Enable surround sound. */
-};
-
-enum _ModPlug_ResamplingMode
-{
- MODPLUG_RESAMPLE_NEAREST = 0, /* No interpolation (very fast, extremely bad sound quality) */
- MODPLUG_RESAMPLE_LINEAR = 1, /* Linear interpolation (fast, good quality) */
- MODPLUG_RESAMPLE_SPLINE = 2, /* Cubic spline interpolation (high quality) */
- MODPLUG_RESAMPLE_FIR = 3 /* 8-tap fir filter (extremely high quality) */
-};
-
-typedef struct _ModPlug_Settings
-{
- int mFlags; /* One or more of the MODPLUG_ENABLE_* flags above, bitwise-OR'ed */
-
- /* Note that ModPlug always decodes sound at 44100kHz, 32 bit, stereo and then
- * down-mixes to the settings you choose. */
- int mChannels; /* Number of channels - 1 for mono or 2 for stereo */
- int mBits; /* Bits per sample - 8, 16, or 32 */
- int mFrequency; /* Sampling rate - 11025, 22050, or 44100 */
- int mResamplingMode; /* One of MODPLUG_RESAMPLE_*, above */
-
- int mStereoSeparation; /* Stereo separation, 1 - 256 */
- int mMaxMixChannels; /* Maximum number of mixing channels (polyphony), 32 - 256 */
-
- int mReverbDepth; /* Reverb level 0(quiet)-100(loud) */
- int mReverbDelay; /* Reverb delay in ms, usually 40-200ms */
- int mBassAmount; /* XBass level 0(quiet)-100(loud) */
- int mBassRange; /* XBass cutoff in Hz 10-100 */
- int mSurroundDepth; /* Surround level 0(quiet)-100(heavy) */
- int mSurroundDelay; /* Surround delay in ms, usually 5-40ms */
- int mLoopCount; /* Number of times to loop. Zero prevents looping.
- -1 loops forever. */
-} ModPlug_Settings;
-
-/* Get and set the mod decoder settings. All options, except for channels, bits-per-sample,
- * sampling rate, and loop count, will take effect immediately. Those options which don't
- * take effect immediately will take effect the next time you load a mod. */
-void ModPlug_GetSettings(ModPlug_Settings* settings);
-void ModPlug_SetSettings(const ModPlug_Settings* settings);
-
-/* New ModPlug API Functions */
-/* NOTE: Master Volume (1-512) */
-unsigned int ModPlug_GetMasterVolume(ModPlugFile* file) ;
-void ModPlug_SetMasterVolume(ModPlugFile* file,unsigned int cvol) ;
-
-int ModPlug_GetCurrentSpeed(ModPlugFile* file);
-int ModPlug_GetCurrentTempo(ModPlugFile* file);
-int ModPlug_GetCurrentOrder(ModPlugFile* file);
-int ModPlug_GetCurrentPattern(ModPlugFile* file);
-int ModPlug_GetCurrentRow(ModPlugFile* file);
-int ModPlug_GetPlayingChannels(ModPlugFile* file);
-
-void ModPlug_SeekOrder(ModPlugFile* file,int order);
-int ModPlug_GetModuleType(ModPlugFile* file);
-char* ModPlug_GetMessage(ModPlugFile* file);
-
-
-#ifndef MODPLUG_NO_FILESAVE
-/*
- * EXPERIMENTAL Export Functions
- */
-/*Export to a Scream Tracker 3 S3M module. EXPERIMENTAL (only works on Little-Endian platforms)*/
-char ModPlug_ExportS3M(ModPlugFile* file, const char* filepath);
-
-/*Export to a Extended Module (XM). EXPERIMENTAL (only works on Little-Endian platforms)*/
-char ModPlug_ExportXM(ModPlugFile* file, const char* filepath);
-
-/*Export to a Amiga MOD file. EXPERIMENTAL.*/
-char ModPlug_ExportMOD(ModPlugFile* file, const char* filepath);
-
-/*Export to a Impulse Tracker IT file. Should work OK in Little-Endian & Big-Endian platforms :-) */
-char ModPlug_ExportIT(ModPlugFile* file, const char* filepath);
-#endif // MODPLUG_NO_FILESAVE
-
-unsigned int ModPlug_NumInstruments(ModPlugFile* file);
-unsigned int ModPlug_NumSamples(ModPlugFile* file);
-unsigned int ModPlug_NumPatterns(ModPlugFile* file);
-unsigned int ModPlug_NumChannels(ModPlugFile* file);
-unsigned int ModPlug_SampleName(ModPlugFile* file, unsigned int qual, char* buff);
-unsigned int ModPlug_InstrumentName(ModPlugFile* file, unsigned int qual, char* buff);
-
-/*
- * Retrieve pattern note-data
- */
-ModPlugNote* ModPlug_GetPattern(ModPlugFile* file, int pattern, unsigned int* numrows);
-
-/*
- * =================
- * Mixer callback
- * =================
- *
- * Use this callback if you want to 'modify' the mixed data of LibModPlug.
- *
- * void proc(int* buffer,unsigned long channels,unsigned long nsamples) ;
- *
- * 'buffer': A buffer of mixed samples
- * 'channels': N. of channels in the buffer
- * 'nsamples': N. of samples in the buffeer (without taking care of n.channels)
- *
- * (Samples are signed 32-bit integers)
- */
-void ModPlug_InitMixerCallback(ModPlugFile* file,ModPlugMixerProc proc) ;
-void ModPlug_UnloadMixerCallback(ModPlugFile* file) ;
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
+++ /dev/null
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-#if defined(HAVE_CONFIG_H) && !defined(CONFIG_H_INCLUDED)
-#include "config.h"
-#define CONFIG_H_INCLUDED 1
-#endif
-
-#ifndef __SNDFILE_H
-#define __SNDFILE_H
-
-#ifdef UNDER_CE
-int _strnicmp(const char *str1,const char *str2, int n);
-#endif
-
-#ifndef LPCBYTE
-typedef const BYTE * LPCBYTE;
-#endif
-
-#define MOD_AMIGAC2 0x1AB
-#define MAX_SAMPLE_LENGTH 16000000
-#define MAX_SAMPLE_RATE 192000
-#define MAX_ORDERS 256
-#define MAX_PATTERNS 240
-#define MAX_SAMPLES 240
-#define MAX_INSTRUMENTS MAX_SAMPLES
-#ifdef MODPLUG_FASTSOUNDLIB
-#define MAX_CHANNELS 80
-#else
-#define MAX_CHANNELS 128
-#endif
-#define MAX_BASECHANNELS 64
-#define MAX_ENVPOINTS 32
-#define MIN_PERIOD 0x0020
-#define MAX_PERIOD 0xFFFF
-#define MAX_PATTERNNAME 32
-#define MAX_CHANNELNAME 20
-#define MAX_INFONAME 80
-#define MAX_EQ_BANDS 6
-#define MAX_MIXPLUGINS 8
-
-
-#define MOD_TYPE_NONE 0x00
-#define MOD_TYPE_MOD 0x01
-#define MOD_TYPE_S3M 0x02
-#define MOD_TYPE_XM 0x04
-#define MOD_TYPE_MED 0x08
-#define MOD_TYPE_MTM 0x10
-#define MOD_TYPE_IT 0x20
-#define MOD_TYPE_669 0x40
-#define MOD_TYPE_ULT 0x80
-#define MOD_TYPE_STM 0x100
-#define MOD_TYPE_FAR 0x200
-#define MOD_TYPE_WAV 0x400
-#define MOD_TYPE_AMF 0x800
-#define MOD_TYPE_AMS 0x1000
-#define MOD_TYPE_DSM 0x2000
-#define MOD_TYPE_MDL 0x4000
-#define MOD_TYPE_OKT 0x8000
-#define MOD_TYPE_MID 0x10000
-#define MOD_TYPE_DMF 0x20000
-#define MOD_TYPE_PTM 0x40000
-#define MOD_TYPE_DBM 0x80000
-#define MOD_TYPE_MT2 0x100000
-#define MOD_TYPE_AMF0 0x200000
-#define MOD_TYPE_PSM 0x400000
-#define MOD_TYPE_J2B 0x800000
-#define MOD_TYPE_ABC 0x1000000
-#define MOD_TYPE_PAT 0x2000000
-#define MOD_TYPE_UMX 0x80000000 // Fake type
-#define MAX_MODTYPE 24
-
-
-
-// Channel flags:
-// Bits 0-7: Sample Flags
-#define CHN_16BIT 0x01
-#define CHN_LOOP 0x02
-#define CHN_PINGPONGLOOP 0x04
-#define CHN_SUSTAINLOOP 0x08
-#define CHN_PINGPONGSUSTAIN 0x10
-#define CHN_PANNING 0x20
-#define CHN_STEREO 0x40
-#define CHN_PINGPONGFLAG 0x80
-// Bits 8-31: Channel Flags
-#define CHN_MUTE 0x100
-#define CHN_KEYOFF 0x200
-#define CHN_NOTEFADE 0x400
-#define CHN_SURROUND 0x800
-#define CHN_NOIDO 0x1000
-#define CHN_HQSRC 0x2000
-#define CHN_FILTER 0x4000
-#define CHN_VOLUMERAMP 0x8000
-#define CHN_VIBRATO 0x10000
-#define CHN_TREMOLO 0x20000
-#define CHN_PANBRELLO 0x40000
-#define CHN_PORTAMENTO 0x80000
-#define CHN_GLISSANDO 0x100000
-#define CHN_VOLENV 0x200000
-#define CHN_PANENV 0x400000
-#define CHN_PITCHENV 0x800000
-#define CHN_FASTVOLRAMP 0x1000000
-#define CHN_EXTRALOUD 0x2000000
-#define CHN_REVERB 0x4000000
-#define CHN_NOREVERB 0x8000000
-
-
-#define ENV_VOLUME 0x0001
-#define ENV_VOLSUSTAIN 0x0002
-#define ENV_VOLLOOP 0x0004
-#define ENV_PANNING 0x0008
-#define ENV_PANSUSTAIN 0x0010
-#define ENV_PANLOOP 0x0020
-#define ENV_PITCH 0x0040
-#define ENV_PITCHSUSTAIN 0x0080
-#define ENV_PITCHLOOP 0x0100
-#define ENV_SETPANNING 0x0200
-#define ENV_FILTER 0x0400
-#define ENV_VOLCARRY 0x0800
-#define ENV_PANCARRY 0x1000
-#define ENV_PITCHCARRY 0x2000
-
-#define CMD_NONE 0
-#define CMD_ARPEGGIO 1
-#define CMD_PORTAMENTOUP 2
-#define CMD_PORTAMENTODOWN 3
-#define CMD_TONEPORTAMENTO 4
-#define CMD_VIBRATO 5
-#define CMD_TONEPORTAVOL 6
-#define CMD_VIBRATOVOL 7
-#define CMD_TREMOLO 8
-#define CMD_PANNING8 9
-#define CMD_OFFSET 10
-#define CMD_VOLUMESLIDE 11
-#define CMD_POSITIONJUMP 12
-#define CMD_VOLUME 13
-#define CMD_PATTERNBREAK 14
-#define CMD_RETRIG 15
-#define CMD_SPEED 16
-#define CMD_TEMPO 17
-#define CMD_TREMOR 18
-#define CMD_MODCMDEX 19
-#define CMD_S3MCMDEX 20
-#define CMD_CHANNELVOLUME 21
-#define CMD_CHANNELVOLSLIDE 22
-#define CMD_GLOBALVOLUME 23
-#define CMD_GLOBALVOLSLIDE 24
-#define CMD_KEYOFF 25
-#define CMD_FINEVIBRATO 26
-#define CMD_PANBRELLO 27
-#define CMD_XFINEPORTAUPDOWN 28
-#define CMD_PANNINGSLIDE 29
-#define CMD_SETENVPOSITION 30
-#define CMD_MIDI 31
-
-
-// Volume Column commands
-#define VOLCMD_VOLUME 1
-#define VOLCMD_PANNING 2
-#define VOLCMD_VOLSLIDEUP 3
-#define VOLCMD_VOLSLIDEDOWN 4
-#define VOLCMD_FINEVOLUP 5
-#define VOLCMD_FINEVOLDOWN 6
-#define VOLCMD_VIBRATOSPEED 7
-#define VOLCMD_VIBRATO 8
-#define VOLCMD_PANSLIDELEFT 9
-#define VOLCMD_PANSLIDERIGHT 10
-#define VOLCMD_TONEPORTAMENTO 11
-#define VOLCMD_PORTAUP 12
-#define VOLCMD_PORTADOWN 13
-
-#define RSF_16BIT 0x04
-#define RSF_STEREO 0x08
-
-#define RS_PCM8S 0 // 8-bit signed
-#define RS_PCM8U 1 // 8-bit unsigned
-#define RS_PCM8D 2 // 8-bit delta values
-#define RS_ADPCM4 3 // 4-bit ADPCM-packed
-#define RS_PCM16D 4 // 16-bit delta values
-#define RS_PCM16S 5 // 16-bit signed
-#define RS_PCM16U 6 // 16-bit unsigned
-#define RS_PCM16M 7 // 16-bit motorola order
-#define RS_STPCM8S (RS_PCM8S|RSF_STEREO) // stereo 8-bit signed
-#define RS_STPCM8U (RS_PCM8U|RSF_STEREO) // stereo 8-bit unsigned
-#define RS_STPCM8D (RS_PCM8D|RSF_STEREO) // stereo 8-bit delta values
-#define RS_STPCM16S (RS_PCM16S|RSF_STEREO) // stereo 16-bit signed
-#define RS_STPCM16U (RS_PCM16U|RSF_STEREO) // stereo 16-bit unsigned
-#define RS_STPCM16D (RS_PCM16D|RSF_STEREO) // stereo 16-bit delta values
-#define RS_STPCM16M (RS_PCM16M|RSF_STEREO) // stereo 16-bit signed big endian
-// IT 2.14 compressed samples
-#define RS_IT2148 0x10
-#define RS_IT21416 0x14
-#define RS_IT2158 0x12
-#define RS_IT21516 0x16
-// AMS Packed Samples
-#define RS_AMS8 0x11
-#define RS_AMS16 0x15
-// DMF Huffman compression
-#define RS_DMF8 0x13
-#define RS_DMF16 0x17
-// MDL Huffman compression
-#define RS_MDL8 0x20
-#define RS_MDL16 0x24
-#define RS_PTM8DTO16 0x25
-// Stereo Interleaved Samples
-#define RS_STIPCM8S (RS_PCM8S|0x40|RSF_STEREO) // stereo 8-bit signed
-#define RS_STIPCM8U (RS_PCM8U|0x40|RSF_STEREO) // stereo 8-bit unsigned
-#define RS_STIPCM16S (RS_PCM16S|0x40|RSF_STEREO) // stereo 16-bit signed
-#define RS_STIPCM16U (RS_PCM16U|0x40|RSF_STEREO) // stereo 16-bit unsigned
-#define RS_STIPCM16M (RS_PCM16M|0x40|RSF_STEREO) // stereo 16-bit signed big endian
-// 24-bit signed
-#define RS_PCM24S (RS_PCM16S|0x80) // mono 24-bit signed
-#define RS_STIPCM24S (RS_PCM16S|0x80|RSF_STEREO) // stereo 24-bit signed
-#define RS_PCM32S (RS_PCM16S|0xC0) // mono 24-bit signed
-#define RS_STIPCM32S (RS_PCM16S|0xC0|RSF_STEREO) // stereo 24-bit signed
-
-// NNA types
-#define NNA_NOTECUT 0
-#define NNA_CONTINUE 1
-#define NNA_NOTEOFF 2
-#define NNA_NOTEFADE 3
-
-// DCT types
-#define DCT_NONE 0
-#define DCT_NOTE 1
-#define DCT_SAMPLE 2
-#define DCT_INSTRUMENT 3
-
-// DNA types
-#define DNA_NOTECUT 0
-#define DNA_NOTEOFF 1
-#define DNA_NOTEFADE 2
-
-// Mixer Hardware-Dependent features
-#define SYSMIX_ENABLEMMX 0x01
-#define SYSMIX_WINDOWSNT 0x02
-#define SYSMIX_SLOWCPU 0x04
-#define SYSMIX_FASTCPU 0x08
-
-// Module flags
-#define SONG_EMBEDMIDICFG 0x0001
-#define SONG_FASTVOLSLIDES 0x0002
-#define SONG_ITOLDEFFECTS 0x0004
-#define SONG_ITCOMPATMODE 0x0008
-#define SONG_LINEARSLIDES 0x0010
-#define SONG_PATTERNLOOP 0x0020
-#define SONG_STEP 0x0040
-#define SONG_PAUSED 0x0080
-#define SONG_FADINGSONG 0x0100
-#define SONG_ENDREACHED 0x0200
-#define SONG_GLOBALFADE 0x0400
-#define SONG_CPUVERYHIGH 0x0800
-#define SONG_FIRSTTICK 0x1000
-#define SONG_MPTFILTERMODE 0x2000
-#define SONG_SURROUNDPAN 0x4000
-#define SONG_EXFILTERRANGE 0x8000
-#define SONG_AMIGALIMITS 0x10000
-
-// Global Options (Renderer)
-#define SNDMIX_REVERSESTEREO 0x0001
-#define SNDMIX_NOISEREDUCTION 0x0002
-#define SNDMIX_AGC 0x0004
-#define SNDMIX_NORESAMPLING 0x0008
-#define SNDMIX_HQRESAMPLER 0x0010
-#define SNDMIX_MEGABASS 0x0020
-#define SNDMIX_SURROUND 0x0040
-#define SNDMIX_REVERB 0x0080
-#define SNDMIX_EQ 0x0100
-#define SNDMIX_SOFTPANNING 0x0200
-#define SNDMIX_ULTRAHQSRCMODE 0x0400
-// Misc Flags (can safely be turned on or off)
-#define SNDMIX_DIRECTTODISK 0x10000
-#define SNDMIX_ENABLEMMX 0x20000
-#define SNDMIX_NOBACKWARDJUMPS 0x40000
-#define SNDMIX_MAXDEFAULTPAN 0x80000 // Used by the MOD loader
-
-
-// Reverb Types (GM2 Presets)
-enum {
- REVERBTYPE_SMALLROOM,
- REVERBTYPE_MEDIUMROOM,
- REVERBTYPE_LARGEROOM,
- REVERBTYPE_SMALLHALL,
- REVERBTYPE_MEDIUMHALL,
- REVERBTYPE_LARGEHALL,
- NUM_REVERBTYPES
-};
-
-
-enum {
- SRCMODE_NEAREST,
- SRCMODE_LINEAR,
- SRCMODE_SPLINE,
- SRCMODE_POLYPHASE,
- NUM_SRC_MODES
-};
-
-
-// Sample Struct
-typedef struct _MODINSTRUMENT
-{
- UINT nLength,nLoopStart,nLoopEnd;
- UINT nSustainStart, nSustainEnd;
- signed char *pSample;
- UINT nC4Speed;
- WORD nPan;
- WORD nVolume;
- WORD nGlobalVol;
- WORD uFlags;
- signed char RelativeTone;
- signed char nFineTune;
- BYTE nVibType;
- BYTE nVibSweep;
- BYTE nVibDepth;
- BYTE nVibRate;
- CHAR name[22];
-} MODINSTRUMENT;
-
-
-// Instrument Struct
-typedef struct _INSTRUMENTHEADER
-{
- UINT nFadeOut;
- DWORD dwFlags;
- WORD nGlobalVol;
- WORD nPan;
- WORD VolPoints[MAX_ENVPOINTS];
- WORD PanPoints[MAX_ENVPOINTS];
- WORD PitchPoints[MAX_ENVPOINTS];
- BYTE VolEnv[MAX_ENVPOINTS];
- BYTE PanEnv[MAX_ENVPOINTS];
- BYTE PitchEnv[MAX_ENVPOINTS];
- BYTE Keyboard[128];
- BYTE NoteMap[128];
-
- BYTE nVolEnv;
- BYTE nPanEnv;
- BYTE nPitchEnv;
- BYTE nVolLoopStart;
- BYTE nVolLoopEnd;
- BYTE nVolSustainBegin;
- BYTE nVolSustainEnd;
- BYTE nPanLoopStart;
- BYTE nPanLoopEnd;
- BYTE nPanSustainBegin;
- BYTE nPanSustainEnd;
- BYTE nPitchLoopStart;
- BYTE nPitchLoopEnd;
- BYTE nPitchSustainBegin;
- BYTE nPitchSustainEnd;
- BYTE nNNA;
- BYTE nDCT;
- BYTE nDNA;
- BYTE nPanSwing;
- BYTE nVolSwing;
- BYTE nIFC;
- BYTE nIFR;
- WORD wMidiBank;
- BYTE nMidiProgram;
- BYTE nMidiChannel;
- BYTE nMidiDrumKey;
- signed char nPPS;
- unsigned char nPPC;
- CHAR name[32];
- CHAR filename[12];
-} INSTRUMENTHEADER;
-
-
-// Channel Struct
-typedef struct _MODCHANNEL
-{
- // First 32-bytes: Most used mixing information: don't change it
- signed char * pCurrentSample;
- DWORD nPos;
- DWORD nPosLo; // actually 16-bit
- LONG nInc; // 16.16
- LONG nRightVol;
- LONG nLeftVol;
- LONG nRightRamp;
- LONG nLeftRamp;
- // 2nd cache line
- DWORD nLength;
- DWORD dwFlags;
- DWORD nLoopStart;
- DWORD nLoopEnd;
- LONG nRampRightVol;
- LONG nRampLeftVol;
- LONG nFilter_Y1, nFilter_Y2, nFilter_Y3, nFilter_Y4;
- LONG nFilter_A0, nFilter_B0, nFilter_B1;
- LONG nROfs, nLOfs;
- LONG nRampLength;
- // Information not used in the mixer
- signed char * pSample;
- LONG nNewRightVol, nNewLeftVol;
- LONG nRealVolume, nRealPan;
- LONG nVolume, nPan, nFadeOutVol;
- LONG nPeriod, nC4Speed, nPortamentoDest;
- INSTRUMENTHEADER *pHeader;
- MODINSTRUMENT *pInstrument;
- DWORD nVolEnvPosition, nPanEnvPosition, nPitchEnvPosition;
- DWORD nMasterChn, nVUMeter;
- LONG nGlobalVol, nInsVol;
- LONG nFineTune, nTranspose;
- LONG nPortamentoSlide, nAutoVibDepth;
- UINT nAutoVibPos, nVibratoPos, nTremoloPos, nPanbrelloPos;
- // 16-bit members
- signed short nVolSwing, nPanSwing;
- // 8-bit members
- BYTE nNote, nNNA;
- BYTE nNewNote, nNewIns, nCommand, nArpeggio;
- BYTE nOldVolumeSlide, nOldFineVolUpDown;
- BYTE nOldPortaUpDown, nOldFinePortaUpDown;
- BYTE nOldPanSlide, nOldChnVolSlide;
- BYTE nVibratoType, nVibratoSpeed, nVibratoDepth;
- BYTE nTremoloType, nTremoloSpeed, nTremoloDepth;
- BYTE nPanbrelloType, nPanbrelloSpeed, nPanbrelloDepth;
- BYTE nOldCmdEx, nOldVolParam, nOldTempo;
- BYTE nOldOffset, nOldHiOffset;
- BYTE nCutOff, nResonance;
- BYTE nRetrigCount, nRetrigParam;
- BYTE nTremorCount, nTremorParam;
- BYTE nPatternLoop, nPatternLoopCount;
- BYTE nRowNote, nRowInstr;
- BYTE nRowVolCmd, nRowVolume;
- BYTE nRowCommand, nRowParam;
- BYTE nLeftVU, nRightVU;
- BYTE nActiveMacro, nPadding;
-} MODCHANNEL;
-
-
-typedef struct _MODCHANNELSETTINGS
-{
- UINT nPan;
- UINT nVolume;
- DWORD dwFlags;
- UINT nMixPlugin;
- char szName[MAX_CHANNELNAME]; // changed from CHAR
-} MODCHANNELSETTINGS;
-
-
-typedef struct _MODCOMMAND
-{
- BYTE note;
- BYTE instr;
- BYTE volcmd;
- BYTE command;
- BYTE vol;
- BYTE param;
-} MODCOMMAND, *LPMODCOMMAND;
-
-////////////////////////////////////////////////////////////////////
-// Mix Plugins
-#define MIXPLUG_MIXREADY 0x01 // Set when cleared
-
-class IMixPlugin
-{
-public:
- virtual ~IMixPlugin();
- virtual int AddRef() = 0;
- virtual int Release() = 0;
- virtual void SaveAllParameters() = 0;
- virtual void RestoreAllParameters() = 0;
- virtual void Process(float *pOutL, float *pOutR, unsigned long nSamples) = 0;
- virtual void Init(unsigned long nFreq, int bReset) = 0;
- virtual void MidiSend(DWORD dwMidiCode) = 0;
- virtual void MidiCommand(UINT nMidiCh, UINT nMidiProg, UINT note, UINT vol) = 0;
-};
-
-
-#define MIXPLUG_INPUTF_MASTEREFFECT 0x01 // Apply to master mix
-#define MIXPLUG_INPUTF_BYPASS 0x02 // Bypass effect
-#define MIXPLUG_INPUTF_WETMIX 0x04 // Wet Mix (dry added)
-
-typedef struct _SNDMIXPLUGINSTATE
-{
- DWORD dwFlags; // MIXPLUG_XXXX
- LONG nVolDecayL, nVolDecayR; // Buffer click removal
- int *pMixBuffer; // Stereo effect send buffer
- float *pOutBufferL; // Temp storage for int -> float conversion
- float *pOutBufferR;
-} SNDMIXPLUGINSTATE, *PSNDMIXPLUGINSTATE;
-
-typedef struct _SNDMIXPLUGININFO
-{
- DWORD dwPluginId1;
- DWORD dwPluginId2;
- DWORD dwInputRouting; // MIXPLUG_INPUTF_XXXX
- DWORD dwOutputRouting; // 0=mix 0x80+=fx
- DWORD dwReserved[4]; // Reserved for routing info
- CHAR szName[32];
- CHAR szLibraryName[64]; // original DLL name
-} SNDMIXPLUGININFO, *PSNDMIXPLUGININFO; // Size should be 128
-
-typedef struct _SNDMIXPLUGIN
-{
- IMixPlugin *pMixPlugin;
- PSNDMIXPLUGINSTATE pMixState;
- ULONG nPluginDataSize;
- PVOID pPluginData;
- SNDMIXPLUGININFO Info;
-} SNDMIXPLUGIN, *PSNDMIXPLUGIN;
-
-typedef BOOL (*PMIXPLUGINCREATEPROC)(PSNDMIXPLUGIN);
-
-////////////////////////////////////////////////////////////////////
-
-enum {
- MIDIOUT_START=0,
- MIDIOUT_STOP,
- MIDIOUT_TICK,
- MIDIOUT_NOTEON,
- MIDIOUT_NOTEOFF,
- MIDIOUT_VOLUME,
- MIDIOUT_PAN,
- MIDIOUT_BANKSEL,
- MIDIOUT_PROGRAM,
-};
-
-
-typedef struct MODMIDICFG
-{
- char szMidiGlb[9*32]; // changed from CHAR
- char szMidiSFXExt[16*32]; // changed from CHAR
- char szMidiZXXExt[128*32]; // changed from CHAR
-} MODMIDICFG, *LPMODMIDICFG;
-
-#define NOTE_MAX 120 //Defines maximum notevalue as well as maximum number of notes.
-
-typedef VOID (* LPSNDMIXHOOKPROC)(int *, unsigned long, unsigned long); // buffer, samples, channels
-
-
-
-//==============
-class CSoundFile
-//==============
-{
-public: // Static Members
- static UINT m_nXBassDepth, m_nXBassRange;
- static UINT m_nReverbDepth, m_nReverbDelay, gnReverbType;
- static UINT m_nProLogicDepth, m_nProLogicDelay;
- static UINT m_nStereoSeparation;
- static UINT m_nMaxMixChannels;
- static LONG m_nStreamVolume;
- static DWORD gdwSysInfo, gdwSoundSetup, gdwMixingFreq, gnBitsPerSample, gnChannels;
- static UINT gnAGC, gnVolumeRampSamples, gnVUMeter, gnCPUUsage;
- static LPSNDMIXHOOKPROC gpSndMixHook;
- static PMIXPLUGINCREATEPROC gpMixPluginCreateProc;
-
-public: // for Editing
- MODCHANNEL Chn[MAX_CHANNELS]; // Channels
- UINT ChnMix[MAX_CHANNELS]; // Channels to be mixed
- MODINSTRUMENT Ins[MAX_SAMPLES]; // Instruments
- INSTRUMENTHEADER *Headers[MAX_INSTRUMENTS]; // Instrument Headers
- MODCHANNELSETTINGS ChnSettings[MAX_BASECHANNELS]; // Channels settings
- MODCOMMAND *Patterns[MAX_PATTERNS]; // Patterns
- WORD PatternSize[MAX_PATTERNS]; // Patterns Lengths
- BYTE Order[MAX_ORDERS]; // Pattern Orders
- MODMIDICFG m_MidiCfg; // Midi macro config table
- SNDMIXPLUGIN m_MixPlugins[MAX_MIXPLUGINS]; // Mix plugins
- UINT m_nDefaultSpeed, m_nDefaultTempo, m_nDefaultGlobalVolume;
- DWORD m_dwSongFlags; // Song flags SONG_XXXX
- UINT m_nChannels, m_nMixChannels, m_nMixStat, m_nBufferCount;
- UINT m_nType, m_nSamples, m_nInstruments;
- UINT m_nTickCount, m_nTotalCount, m_nPatternDelay, m_nFrameDelay;
- UINT m_nMusicSpeed, m_nMusicTempo;
- UINT m_nNextRow, m_nRow;
- UINT m_nPattern,m_nCurrentPattern,m_nNextPattern,m_nRestartPos;
- UINT m_nMasterVolume, m_nGlobalVolume, m_nSongPreAmp;
- UINT m_nFreqFactor, m_nTempoFactor, m_nOldGlbVolSlide;
- LONG m_nMinPeriod, m_nMaxPeriod, m_nRepeatCount, m_nInitialRepeatCount;
- DWORD m_nGlobalFadeSamples, m_nGlobalFadeMaxSamples;
- UINT m_nMaxOrderPosition;
- UINT m_nPatternNames;
- LPSTR m_lpszSongComments, m_lpszPatternNames;
- char m_szNames[MAX_INSTRUMENTS][32]; // changed from CHAR
- CHAR CompressionTable[16];
-
-public:
- CSoundFile();
- ~CSoundFile();
-
-public:
- BOOL Create(LPCBYTE lpStream, DWORD dwMemLength=0);
- BOOL Destroy();
- UINT GetType() const { return m_nType; }
- UINT GetNumChannels() const;
- UINT GetLogicalChannels() const { return m_nChannels; }
- BOOL SetMasterVolume(UINT vol, BOOL bAdjustAGC=FALSE);
- UINT GetMasterVolume() const { return m_nMasterVolume; }
- UINT GetNumPatterns() const;
- UINT GetNumInstruments() const;
- UINT GetNumSamples() const { return m_nSamples; }
- UINT GetCurrentPos() const;
- UINT GetCurrentPattern() const { return m_nPattern; }
- UINT GetCurrentOrder() const { return m_nCurrentPattern; }
- UINT GetSongComments(LPSTR s, UINT cbsize, UINT linesize=32);
- UINT GetRawSongComments(LPSTR s, UINT cbsize, UINT linesize=32);
- UINT GetMaxPosition() const;
- void SetCurrentPos(UINT nPos);
- void SetCurrentOrder(UINT nOrder);
- void GetTitle(LPSTR s) const { lstrcpyn(s,m_szNames[0],32); }
- LPCSTR GetTitle() const { return m_szNames[0]; }
- UINT GetSampleName(UINT nSample,LPSTR s=NULL) const;
- UINT GetInstrumentName(UINT nInstr,LPSTR s=NULL) const;
- UINT GetMusicSpeed() const { return m_nMusicSpeed; }
- UINT GetMusicTempo() const { return m_nMusicTempo; }
- DWORD GetLength(BOOL bAdjust, BOOL bTotal=FALSE);
- DWORD GetSongTime() { return GetLength(FALSE, TRUE); }
- void SetRepeatCount(int n) { m_nRepeatCount = n; m_nInitialRepeatCount = n; }
- int GetRepeatCount() const { return m_nRepeatCount; }
- BOOL IsPaused() const { return (m_dwSongFlags & SONG_PAUSED) ? TRUE : FALSE; }
- void LoopPattern(int nPat, int nRow=0);
- void CheckCPUUsage(UINT nCPU);
- BOOL SetPatternName(UINT nPat, LPCSTR lpszName);
- BOOL GetPatternName(UINT nPat, LPSTR lpszName, UINT cbSize=MAX_PATTERNNAME) const;
- // Module Loaders
- BOOL ReadXM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadS3M(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMod(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMed(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMTM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadSTM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadIT(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL Read669(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadUlt(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadWav(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadDSM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadFAR(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadAMS(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadAMS2(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMDL(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadOKT(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadDMF(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadPTM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadDBM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadAMF(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMT2(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadPSM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadJ2B(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadUMX(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadABC(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL TestABC(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMID(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL TestMID(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadPAT(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL TestPAT(LPCBYTE lpStream, DWORD dwMemLength);
- // Save Functions
-#ifndef MODPLUG_NO_FILESAVE
- UINT WriteSample(FILE *f, MODINSTRUMENT *pins, UINT nFlags, UINT nMaxLen=0);
- BOOL SaveXM(LPCSTR lpszFileName, UINT nPacking=0);
- BOOL SaveS3M(LPCSTR lpszFileName, UINT nPacking=0);
- BOOL SaveMod(LPCSTR lpszFileName, UINT nPacking=0);
- BOOL SaveIT(LPCSTR lpszFileName, UINT nPacking=0);
-#endif // MODPLUG_NO_FILESAVE
- // MOD Convert function
- UINT GetBestSaveFormat() const;
- UINT GetSaveFormats() const;
- void ConvertModCommand(MODCOMMAND *) const;
- void S3MConvert(MODCOMMAND *m, BOOL bIT) const;
- void S3MSaveConvert(UINT *pcmd, UINT *pprm, BOOL bIT) const;
- WORD ModSaveCommand(const MODCOMMAND *m, BOOL bXM) const;
-
-public:
- // Real-time sound functions
- VOID ResetChannels();
-
- UINT Read(LPVOID lpBuffer, UINT cbBuffer);
- UINT CreateStereoMix(int count);
- BOOL FadeSong(UINT msec);
- BOOL GlobalFadeSong(UINT msec);
- UINT GetTotalTickCount() const { return m_nTotalCount; }
- VOID ResetTotalTickCount() { m_nTotalCount = 0; }
-
-public:
- // Mixer Config
- static BOOL InitPlayer(BOOL bReset=FALSE);
- static BOOL SetMixConfig(UINT nStereoSeparation, UINT nMaxMixChannels);
- static BOOL SetWaveConfig(UINT nRate,UINT nBits,UINT nChannels,BOOL bMMX=FALSE);
- static BOOL SetResamplingMode(UINT nMode); // SRCMODE_XXXX
- static BOOL IsStereo() { return (gnChannels > 1) ? TRUE : FALSE; }
- static DWORD GetSampleRate() { return gdwMixingFreq; }
- static DWORD GetBitsPerSample() { return gnBitsPerSample; }
- static DWORD InitSysInfo();
- static DWORD GetSysInfo() { return gdwSysInfo; }
- // AGC
- static BOOL GetAGC() { return (gdwSoundSetup & SNDMIX_AGC) ? TRUE : FALSE; }
- static void SetAGC(BOOL b);
- static void ResetAGC();
- static void ProcessAGC(int count);
-
- //GCCFIX -- added these functions back in!
- static BOOL SetWaveConfigEx(BOOL bSurround,BOOL bNoOverSampling,BOOL bReverb,BOOL hqido,BOOL bMegaBass,BOOL bNR,BOOL bEQ);
- // DSP Effects
- static void InitializeDSP(BOOL bReset);
- static void ProcessStereoDSP(int count);
- static void ProcessMonoDSP(int count);
- // [Reverb level 0(quiet)-100(loud)], [delay in ms, usually 40-200ms]
- static BOOL SetReverbParameters(UINT nDepth, UINT nDelay);
- // [XBass level 0(quiet)-100(loud)], [cutoff in Hz 10-100]
- static BOOL SetXBassParameters(UINT nDepth, UINT nRange);
- // [Surround level 0(quiet)-100(heavy)] [delay in ms, usually 5-40ms]
- static BOOL SetSurroundParameters(UINT nDepth, UINT nDelay);
-public:
- BOOL ReadNote();
- BOOL ProcessRow();
- BOOL ProcessEffects();
- UINT GetNNAChannel(UINT nChn) const;
- void CheckNNA(UINT nChn, UINT instr, int note, BOOL bForceCut);
- void NoteChange(UINT nChn, int note, BOOL bPorta=FALSE, BOOL bResetEnv=TRUE);
- void InstrumentChange(MODCHANNEL *pChn, UINT instr, BOOL bPorta=FALSE,BOOL bUpdVol=TRUE,BOOL bResetEnv=TRUE);
- // Channel Effects
- void PortamentoUp(MODCHANNEL *pChn, UINT param);
- void PortamentoDown(MODCHANNEL *pChn, UINT param);
- void FinePortamentoUp(MODCHANNEL *pChn, UINT param);
- void FinePortamentoDown(MODCHANNEL *pChn, UINT param);
- void ExtraFinePortamentoUp(MODCHANNEL *pChn, UINT param);
- void ExtraFinePortamentoDown(MODCHANNEL *pChn, UINT param);
- void TonePortamento(MODCHANNEL *pChn, UINT param);
- void Vibrato(MODCHANNEL *pChn, UINT param);
- void FineVibrato(MODCHANNEL *pChn, UINT param);
- void VolumeSlide(MODCHANNEL *pChn, UINT param);
- void PanningSlide(MODCHANNEL *pChn, UINT param);
- void ChannelVolSlide(MODCHANNEL *pChn, UINT param);
- void FineVolumeUp(MODCHANNEL *pChn, UINT param);
- void FineVolumeDown(MODCHANNEL *pChn, UINT param);
- void Tremolo(MODCHANNEL *pChn, UINT param);
- void Panbrello(MODCHANNEL *pChn, UINT param);
- void RetrigNote(UINT nChn, UINT param);
- void NoteCut(UINT nChn, UINT nTick);
- void KeyOff(UINT nChn);
- int PatternLoop(MODCHANNEL *, UINT param);
- void ExtendedMODCommands(UINT nChn, UINT param);
- void ExtendedS3MCommands(UINT nChn, UINT param);
- void ExtendedChannelEffect(MODCHANNEL *, UINT param);
- void ProcessMidiMacro(UINT nChn, LPCSTR pszMidiMacro, UINT param=0);
- void SetupChannelFilter(MODCHANNEL *pChn, BOOL bReset, int flt_modifier=256) const;
- // Low-Level effect processing
- void DoFreqSlide(MODCHANNEL *pChn, LONG nFreqSlide);
- // Global Effects
- void SetTempo(UINT param);
- void SetSpeed(UINT param);
- void GlobalVolSlide(UINT param);
- DWORD IsSongFinished(UINT nOrder, UINT nRow) const;
- BOOL IsValidBackwardJump(UINT nStartOrder, UINT nStartRow, UINT nJumpOrder, UINT nJumpRow) const;
- // Read/Write sample functions
- signed char GetDeltaValue(signed char prev, UINT n) const { return (signed char)(prev + CompressionTable[n & 0x0F]); }
- UINT PackSample(int &sample, int next);
- BOOL CanPackSample(LPSTR pSample, UINT nLen, UINT nPacking, BYTE *result=NULL);
- UINT ReadSample(MODINSTRUMENT *pIns, UINT nFlags, LPCSTR pMemFile, DWORD dwMemLength);
- BOOL DestroySample(UINT nSample);
- BOOL DestroyInstrument(UINT nInstr);
- BOOL IsSampleUsed(UINT nSample);
- BOOL IsInstrumentUsed(UINT nInstr);
- BOOL RemoveInstrumentSamples(UINT nInstr);
- UINT DetectUnusedSamples(BOOL *);
- BOOL RemoveSelectedSamples(BOOL *);
- void AdjustSampleLoop(MODINSTRUMENT *pIns);
- // I/O from another sound file
- BOOL ReadInstrumentFromSong(UINT nInstr, CSoundFile *, UINT nSrcInstrument);
- BOOL ReadSampleFromSong(UINT nSample, CSoundFile *, UINT nSrcSample);
- // Period/Note functions
- UINT GetNoteFromPeriod(UINT period) const;
- UINT GetPeriodFromNote(UINT note, int nFineTune, UINT nC4Speed) const;
- UINT GetFreqFromPeriod(UINT period, UINT nC4Speed, int nPeriodFrac=0) const;
- // Misc functions
- MODINSTRUMENT *GetSample(UINT n) { return Ins+n; }
- void ResetMidiCfg();
- UINT MapMidiInstrument(DWORD dwProgram, UINT nChannel, UINT nNote);
- BOOL ITInstrToMPT(const void *p, INSTRUMENTHEADER *penv, UINT trkvers);
- UINT SaveMixPlugins(FILE *f=NULL, BOOL bUpdate=TRUE);
- UINT LoadMixPlugins(const void *pData, UINT nLen);
-#ifndef NO_FILTER
- DWORD CutOffToFrequency(UINT nCutOff, int flt_modifier=256) const; // [0-255] => [1-10KHz]
-#endif
-
- // Static helper functions
-public:
- static DWORD TransposeToFrequency(int transp, int ftune=0);
- static int FrequencyToTranspose(DWORD freq);
- static void FrequencyToTranspose(MODINSTRUMENT *psmp);
-
- // System-Dependant functions
-public:
- static MODCOMMAND *AllocatePattern(UINT rows, UINT nchns);
- static signed char* AllocateSample(UINT nbytes);
- static void FreePattern(LPVOID pat);
- static void FreeSample(LPVOID p);
- static UINT Normalize24BitBuffer(LPBYTE pbuffer, UINT cbsizebytes, DWORD lmax24, DWORD dwByteInc);
-};
-
-
-// inline DWORD BigEndian(DWORD x) { return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | ((x & 0xFF0000) >> 8) | ((x & 0xFF000000) >> 24); }
-// inline WORD BigEndianW(WORD x) { return (WORD)(((x >> 8) & 0xFF) | ((x << 8) & 0xFF00)); }
-
-
-//////////////////////////////////////////////////////////
-// WAVE format information
-
-#pragma pack(1)
-
-// Standard IFF chunks IDs
-#define IFFID_FORM 0x4d524f46
-#define IFFID_RIFF 0x46464952
-#define IFFID_WAVE 0x45564157
-#define IFFID_LIST 0x5453494C
-#define IFFID_INFO 0x4F464E49
-
-// IFF Info fields
-#define IFFID_ICOP 0x504F4349
-#define IFFID_IART 0x54524149
-#define IFFID_IPRD 0x44525049
-#define IFFID_INAM 0x4D414E49
-#define IFFID_ICMT 0x544D4349
-#define IFFID_IENG 0x474E4549
-#define IFFID_ISFT 0x54465349
-#define IFFID_ISBJ 0x4A425349
-#define IFFID_IGNR 0x524E4749
-#define IFFID_ICRD 0x44524349
-
-// Wave IFF chunks IDs
-#define IFFID_wave 0x65766177
-#define IFFID_fmt 0x20746D66
-#define IFFID_wsmp 0x706D7377
-#define IFFID_pcm 0x206d6370
-#define IFFID_data 0x61746164
-#define IFFID_smpl 0x6C706D73
-#define IFFID_xtra 0x61727478
-
-typedef struct WAVEFILEHEADER
-{
- DWORD id_RIFF; // "RIFF"
- DWORD filesize; // file length-8
- DWORD id_WAVE;
-} WAVEFILEHEADER;
-
-
-typedef struct WAVEFORMATHEADER
-{
- DWORD id_fmt; // "fmt "
- DWORD hdrlen; // 16
- WORD format; // 1
- WORD channels; // 1:mono, 2:stereo
- DWORD freqHz; // sampling freq
- DWORD bytessec; // bytes/sec=freqHz*samplesize
- WORD samplesize; // sizeof(sample)
- WORD bitspersample; // bits per sample (8/16)
-} WAVEFORMATHEADER;
-
-
-typedef struct WAVEDATAHEADER
-{
- DWORD id_data; // "data"
- DWORD length; // length of data
-} WAVEDATAHEADER;
-
-
-typedef struct WAVESMPLHEADER
-{
- // SMPL
- DWORD smpl_id; // "smpl" -> 0x6C706D73
- DWORD smpl_len; // length of smpl: 3Ch (54h with sustain loop)
- DWORD dwManufacturer;
- DWORD dwProduct;
- DWORD dwSamplePeriod; // 1000000000/freqHz
- DWORD dwBaseNote; // 3Ch = C-4 -> 60 + RelativeTone
- DWORD dwPitchFraction;
- DWORD dwSMPTEFormat;
- DWORD dwSMPTEOffset;
- DWORD dwSampleLoops; // number of loops
- DWORD cbSamplerData;
-} WAVESMPLHEADER;
-
-
-typedef struct SAMPLELOOPSTRUCT
-{
- DWORD dwIdentifier;
- DWORD dwLoopType; // 0=normal, 1=bidi
- DWORD dwLoopStart;
- DWORD dwLoopEnd; // Byte offset ?
- DWORD dwFraction;
- DWORD dwPlayCount; // Loop Count, 0=infinite
-} SAMPLELOOPSTRUCT;
-
-
-typedef struct WAVESAMPLERINFO
-{
- WAVESMPLHEADER wsiHdr;
- SAMPLELOOPSTRUCT wsiLoops[2];
-} WAVESAMPLERINFO;
-
-
-typedef struct WAVELISTHEADER
-{
- DWORD list_id; // "LIST" -> 0x5453494C
- DWORD list_len;
- DWORD info; // "INFO"
-} WAVELISTHEADER;
-
-
-typedef struct WAVEEXTRAHEADER
-{
- DWORD xtra_id; // "xtra" -> 0x61727478
- DWORD xtra_len;
- DWORD dwFlags;
- WORD wPan;
- WORD wVolume;
- WORD wGlobalVol;
- WORD wReserved;
- BYTE nVibType;
- BYTE nVibSweep;
- BYTE nVibDepth;
- BYTE nVibRate;
-} WAVEEXTRAHEADER;
-
-#pragma pack()
-
-///////////////////////////////////////////////////////////
-// Low-level Mixing functions
-
-#define MIXBUFFERSIZE 512
-#define MIXING_ATTENUATION 4
-#define MIXING_CLIPMIN (-0x08000000)
-#define MIXING_CLIPMAX (0x07FFFFFF)
-#define VOLUMERAMPPRECISION 12
-#define FADESONGDELAY 100
-#define EQ_BUFFERSIZE (MIXBUFFERSIZE)
-#define AGC_PRECISION 9
-#define AGC_UNITY (1 << AGC_PRECISION)
-
-// Calling conventions
-#ifdef MSC_VER
-#define MPPASMCALL __cdecl
-#define MPPFASTCALL __fastcall
-#else
-#define MPPASMCALL
-#define MPPFASTCALL
-#endif
-
-#define MOD2XMFineTune(k) ((int)( (signed char)((k)<<4) ))
-#define XM2MODFineTune(k) ((int)( (k>>4)&0x0f ))
-
-int _muldiv(long a, long b, long c);
-int _muldivr(long a, long b, long c);
-
-
-// Byte swapping functions from the GNU C Library and libsdl
-
-/* Swap bytes in 16 bit value. */
-#ifdef __GNUC__
-# define bswap_16(x) \
- (__extension__ \
- ({ unsigned short int __bsx = (x); \
- ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); }))
-#else
-static __inline unsigned short int
-bswap_16 (unsigned short int __bsx)
-{
- return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8));
-}
-#endif
-
-/* Swap bytes in 32 bit value. */
-#ifdef __GNUC__
-# define bswap_32(x) \
- (__extension__ \
- ({ unsigned int __bsx = (x); \
- ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | \
- (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); }))
-#else
-static __inline unsigned int
-bswap_32 (unsigned int __bsx)
-{
- return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) |
- (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24));
-}
-#endif
-
-#if (defined ARM) && (defined _WIN32_WCE)
-static __inline unsigned short int
-ARM_get16(const void *data)
-{
- unsigned short int s;
- memcpy(&s,data,sizeof(s));
- return s;
-}
-
-static __inline unsigned int
-ARM_get32(const void *data)
-{
- unsigned int s;
- memcpy(&s,data,sizeof(s));
- return s;
-}
-
-#define bswapLE16(X) ARM_get16(&X)
-#define bswapLE32(X) ARM_get32(&X)
-#define bswapBE16(X) bswap_16(ARM_get16(&X))
-#define bswapBE32(X) bswap_32(ARM_get32(&X))
-
-// From libsdl
-#elif defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN
-#define bswapLE16(X) bswap_16(X)
-#define bswapLE32(X) bswap_32(X)
-#define bswapBE16(X) (X)
-#define bswapBE32(X) (X)
-#else
-#define bswapLE16(X) (X)
-#define bswapLE32(X) (X)
-#define bswapBE16(X) bswap_16(X)
-#define bswapBE32(X) bswap_32(X)
-#endif
-
-#endif
+++ /dev/null
-/*
- * This source code is public domain.
- *
- * Authors: Rani Assaf <rani@magic.metawire.com>,
- * Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
- */
-
-#ifndef _STDAFX_H_
-#define _STDAFX_H_
-
-/* Autoconf detection of stdint/inttypes */
-#if defined(HAVE_CONFIG_H) && !defined(CONFIG_H_INCLUDED)
-# include "config.h"
-# define CONFIG_H_INCLUDED 1
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-
-
-#ifdef _WIN32
-
-#ifdef MSC_VER
-#pragma warning (disable:4201)
-#pragma warning (disable:4514)
-#endif
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <windowsx.h>
-#include <mmsystem.h>
-#include <stdio.h>
-#include <malloc.h>
-#include <stdint.h>
-
-#define srandom(_seed) srand(_seed)
-#define random() rand()
-#define sleep(_ms) Sleep(_ms)
-
-inline void ProcessPlugins(int n) {}
-
-#define strncasecmp(a,b,c) strncmp(a,b,c)
-#define strcasecmp(a,b) strcmp(a,b)
-#define strnicmp(a,b,c) strncasecmp(a,b,c)
-#define HAVE_SINF 1
-
-#else
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#ifdef HAVE_MALLOC_H
-#include <malloc.h>
-#endif
-
-typedef int8_t CHAR;
-typedef uint8_t UCHAR;
-typedef uint8_t* PUCHAR;
-typedef uint16_t USHORT;
-typedef uint32_t ULONG;
-typedef uint32_t UINT;
-typedef uint32_t DWORD;
-typedef int32_t LONG;
-typedef int64_t LONGLONG;
-typedef int32_t* LPLONG;
-typedef uint32_t* LPDWORD;
-typedef uint16_t WORD;
-typedef uint8_t BYTE;
-typedef uint8_t* LPBYTE;
-typedef bool BOOL;
-typedef char* LPSTR;
-typedef void* LPVOID;
-typedef uint16_t* LPWORD;
-typedef const char* LPCSTR;
-typedef void* PVOID;
-typedef void VOID;
-
-inline LONG MulDiv (long a, long b, long c)
-{
- // if (!c) return 0;
- return ((uint64_t) a * (uint64_t) b ) / c;
-}
-
-#define MODPLUG_NO_FILESAVE
-#define NO_AGC
-#define LPCTSTR LPCSTR
-#define lstrcpyn strncpy
-#define lstrcpy strcpy
-#define lstrcmp strcmp
-#define WAVE_FORMAT_PCM 1
-//#define ENABLE_EQ
-
-#define GHND 0
-
-inline int8_t * GlobalAllocPtr(unsigned int, size_t size)
-{
- int8_t * p = (int8_t *) malloc(size);
-
- if (p != NULL) memset(p, 0, size);
- return p;
-}
-
-inline void ProcessPlugins(int n) {}
-
-#define GlobalFreePtr(p) free((void *)(p))
-
-#define strnicmp(a,b,c) strncasecmp(a,b,c)
-#define wsprintf sprintf
-
-#ifndef FALSE
-#define FALSE false
-#endif
-
-#ifndef TRUE
-#define TRUE true
-#endif
-
-#endif // _WIN32
-
-#endif
-
-
-
+++ /dev/null
-# libmodplug.la - a libtool library file
-# Generated by libtool (GNU libtool) 2.4
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname=''
-
-# Names of this library.
-library_names=''
-
-# The name of the static archive.
-old_library='libmodplug.a'
-
-# Linker flags that can not go in dependency_libs.
-inherited_linker_flags=''
-
-# Libraries that this one depends upon.
-dependency_libs=' -L/tmp/libmodplug-0.8.8.4.deps/lib/'
-
-# Names of additional weak libraries provided by this library
-weak_library_names=''
-
-# Version information for libmodplug.
-current=1
-age=0
-revision=0
-
-# Is this an already installed library?
-installed=yes
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=no
-
-# Files to dlopen/dlpreopen
-dlopen=''
-dlpreopen=''
-
-# Directory that this library needs to be installed in:
-libdir='/usr/local/lib'
+++ /dev/null
-prefix=/usr/local
-exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
-includedir=${prefix}/include
-
-Name: libmodplug
-Description: The ModPlug mod file playing library.
-Version: 0.8.8.4
-Requires:
-Libs: -L${libdir} -lmodplug
-Libs.private: -lstdc++ -lm
-Cflags: -I${includedir} -I${includedir}/libmodplug
+++ /dev/null
-libmodplug.1.dylib
\ No newline at end of file
release-engine-win32)
release_common
verbose "$SELF" release-compile win32 \
- 'STRIP=: DP_MAKE_TARGET=mingw UNAME=MINGW32 CC="i586-mingw32msvc-gcc -g1 -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DUSE_WSPIAPI_H -DSUPPORTIPV6" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= LIB_ODE= CFLAGS_ODE=-DUSEODE CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=1' \
+ 'STRIP=: DP_MAKE_TARGET=mingw UNAME=MINGW32 CC="i586-mingw32msvc-gcc -g1 -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DUSE_WSPIAPI_H -DSUPPORTIPV6" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=1' \
gmqcc.exe 'gmqcc.exe:Xonotic/gmqcc/gmqcc.exe' \
release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
;;
release-engine-win64)
release_common
verbose "$SELF" release-compile win64 \
- 'STRIP=: DP_MAKE_TARGET=mingw UNAME=MINGW32 CC="amd64-mingw32msvc-gcc -g1 -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DSUPPORTIPV6" WINDRES="amd64-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= LIB_ODE= CFLAGS_ODE=-DUSEODE WIN64RELEASE=1 D3D=1' \
+ 'STRIP=: DP_MAKE_TARGET=mingw UNAME=MINGW32 CC="amd64-mingw32msvc-gcc -g1 -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DSUPPORTIPV6" WINDRES="amd64-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN64RELEASE=1 D3D=1' \
gmqcc.exe 'gmqcc.exe:Xonotic/gmqcc/gmqcc-x64.exe' \
release 'darkplaces.exe:Xonotic/xonotic-x64.exe darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
;;
release_common
# gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
verbose "$SELF" release-compile osx \
- 'STRIP=: CC="gcc -g1 -arch i386 -arch ppc -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks -DSUPPORTIPV6" LIB_ODE= CFLAGS_ODE=-DUSEODE' \
+ 'STRIP=: CC="gcc -g1 -arch i386 -arch ppc -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks -DSUPPORTIPV6"' \
gmqcc 'gmqcc:Xonotic/gmqcc/gmqcc.osx' \
'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
;;
release-engine-linux32)
release_common
verbose "$SELF" release-compile linux32 \
- 'STRIP=: CC="gcc -m32 -march=i686 -g1 -I.deps/include -L.deps/lib -DSUPPORTIPV6" LIB_MODPLUG=.deps/lib/libmodplug.a LIB_JPEG=.deps/lib/libjpeg.a LIB_CRYPTO=".deps/lib/libd0_blind_id.a .deps/lib/libgmp.a" LIB_ODE= CFLAGS_ODE=-DUSEODE' \
+ 'STRIP=: CC="gcc -m32 -march=i686 -g1 -I.deps/include -L.deps/lib -DSUPPORTIPV6" LIB_JPEG=.deps/lib/libjpeg.a LIB_CRYPTO=".deps/lib/libd0_blind_id.a .deps/lib/libgmp.a"' \
gmqcc 'gmqcc:Xonotic/gmqcc/gmqcc.linux32' \
release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
;;
release-engine-linux64)
release_common
verbose "$SELF" release-compile linux64 \
- 'STRIP=: CC="gcc -m64 -g1 -I.deps/include -L.deps/lib -DSUPPORTIPV6" LIB_MODPLUG=.deps/lib/libmodplug.a LIB_JPEG=.deps/lib/libjpeg.a LIB_CRYPTO=".deps/lib/libd0_blind_id.a .deps/lib/libgmp.a" LIB_ODE= CFLAGS_ODE=-DUSEODE' \
+ 'STRIP=: CC="gcc -m64 -g1 -I.deps/include -L.deps/lib -DSUPPORTIPV6" LIB_JPEG=.deps/lib/libjpeg.a LIB_CRYPTO=".deps/lib/libd0_blind_id.a .deps/lib/libgmp.a"' \
gmqcc 'gmqcc:Xonotic/gmqcc/gmqcc.linux64' \
release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
;;