/* DSM.H * * Digital Sound Mixer, v1.24 * * Copyright 1995 Petteri Kangaslampi and Jarno Paananen * * This file is part of the MIDAS Sound System, and may only be * used, modified and distributed under the terms of the MIDAS * Sound System license, LICENSE.TXT. By continuing to use, * modify or distribute this file you indicate that you have * read the license and understand and accept it fully. */ #ifndef __DSM_H #define __DSM_H #define VOLLEVELS 33 #define VOLSHIFT 1 /****************************************************************************\ * struct dsmChannel * ----------------- * Description: DSM channel data \****************************************************************************/ typedef struct { ushort pos; /* mixing position */ ushort posl; /* mixing position fraction */ ulong rate; /* playing rate in Hz */ ushort inst; /* instrument number */ uchar *sample; /* current sample data */ uchar smpType; /* current sample type */ uchar smpPos; /* current sample position */ ushort slength; /* current sample length */ ushort loopStart; /* current sample loop start */ ushort loopEnd; /* current sample loop end */ uchar looping; /* 1 if current sample is looping */ uchar instChanged; /* 1 if instrument has been changed (Amiga Loop Emulation) */ char panning; /* panning information */ uchar volume; /* playing volume (0-64) */ uchar muted; /* 1 if channel muted, 0 if not */ uchar hasData; /* 1 if channel has data to be played, 0 if not */ } dsmChannel; /****************************************************************************\ * struct dsmInstrument * -------------------- * Description: DSM internal instrument structure \****************************************************************************/ typedef struct { void *sample; /* pointer to sample data */ uchar smpType; /* sample type */ uchar smpPos; /* sample position. see enum dsmSmpPos */ ushort slength; /* sample length */ ushort loopStart; /* sample loop start */ ushort loopEnd; /* sample loop end */ uchar volume; /* default playing volume */ uchar looping; /* 1 if looping sample, 0 if not */ uchar inuse; /* 1 if sample is in use, 0 if not (removed using dsmRemInstrument) */ uchar copied; /* 1 if a copied sample (should be deallocated), 0 if not */ } dsmInstrument; #ifdef __cplusplus extern "C" { #endif /****************************************************************************\ * DSM functions. See documentation on Sound Device member functions \****************************************************************************/ int CALLING dsmInit(unsigned mixRate, unsigned mode, uchar *mixBuffer, unsigned mixBufferSize); int CALLING dsmClose(void); int CALLING dsmOpenChannels(unsigned channels); int CALLING dsmCloseChannels(void); int CALLING dsmGetMixRate(ushort *mixRate); int CALLING dsmGetMode(ushort *mode); int CALLING dsmClearChannels(void); int CALLING dsmMute(int mute); int CALLING dsmPause(int pause); int CALLING dsmSetMasterVolume(uchar masterVolume); int CALLING dsmGetMasterVolume(uchar *masterVolume); int CALLING dsmSetAmplification(unsigned amplification); int CALLING dsmGetAmplification(unsigned *amplification); int CALLING dsmPlaySound(unsigned channel, ulong rate); int CALLING dsmStopSound(unsigned channel); int CALLING dsmSetRate(unsigned channel, ulong rate); int CALLING dsmGetRate(unsigned channel, ulong *rate); int CALLING dsmSetVolume(unsigned channel, uchar volume); int CALLING dsmGetVolume(unsigned channel, uchar *volume); int CALLING dsmSetInstrument(unsigned channel, ushort inst); int CALLING dsmGetInstrument(unsigned channel, ushort *inst); int CALLING dsmSetPosition(unsigned channel, ushort pos); int CALLING dsmGetPosition(unsigned channel, ushort *pos); int CALLING dsmSetPanning(unsigned channel, short panning); int CALLING dsmGetPanning(unsigned channel, short *panning); int CALLING dsmMuteChannel(unsigned channel, int mute); int CALLING dsmAddInstrument(void far *sample, int smpType, ushort length, ushort loopStart, ushort loopEnd, uchar volume, int loop, int copySample, ushort *instHandle); int CALLING dsmRemInstrument(ushort inst); int CALLING dsmSetUpdRate(ushort updRate); int CALLING dsmSetPlayPos(unsigned playPosition); int CALLING dsmPlay(int *callMP); int CALLING dsmCalcVolTable(ushort amplification); int CALLING dsmGetMainVU(ushort *leftVU, ushort *rightVU); #ifdef __cplusplus } #endif extern dmaBuffer dsmBuffer; /* mixing buffer */ extern ushort dsmDMAPos; /****************************************************************************\ * enum dsmFunctIDs * ---------------- * Description: ID numbers for DSM functions \****************************************************************************/ enum dsmFunctIDs { ID_dsmInit = ID_dsm, ID_dsmClose, ID_dsmOpenChannels, ID_dsmCloseChannels, ID_dsmGetMixRate, ID_dsmGetMode, ID_dsmClearChannels, ID_dsmMute, ID_dsmPause, ID_dsmSetMasterVolume, ID_dsmPlaySound, ID_dsmStopSound, ID_dsmSetRate, ID_dsmGetRate, ID_dsmSetVolume, ID_dsmSetInstrument, ID_dsmSetPosition, ID_dsmGetPosition, ID_dsmSetPanning, ID_dsmGetPanning, ID_dsmMuteChannel, ID_dsmAddInstrument, ID_dsmRemInstrument, ID_dsmSetUpdRate, ID_dsmPlay, ID_dsmMixData, ID_dsmCalcVolTable, ID_dsmGetMainVU, ID_dsmGetMasterVolume, ID_dsmGetVolume, ID_dsmGetInstrument, ID_dsmSetAmplification, ID_dsmGetAmplification, ID_dsmSetPlayPos }; #endif