// Part of SAASound copyright 1998-2018 Dave Hooper // // SAASound.h: interface for the CSAASound class. // // This corresponds to the public (exported) DLL interface, so all // APIs and client factory methods belong here. // // Compatibility notes : the intention is for this to be fully backwards // compatible across minor and patch versions. Any backwards breaking changes // should be reflected as a major version increment. New functionality can be added // in minor versions so long as backwards compatiblity is maintained // // Version 3.3.0 (4th Dec 2018) // ////////////////////////////////////////////////////////////////////// #ifndef SAASOUND_H_INCLUDED #define SAASOUND_H_INCLUDED // define this if you want to output diagnostic text and PCM files //#define DEBUGSAA // Parameters for use with SetSoundParameters, for example, // SetSoundParameters(SAAP_NOFILTER | SAAP_44100 | SAA_16BIT | SAA_STEREO); // SAAP_FILTER_HIGHPASS_SIMPLE can be ORd with SAAP_FILTER_OVERSAMPLE64x/2x #define SAAP_FILTER_HIGHPASS_SIMPLE 0x00000400 #define SAAP_FILTER_OVERSAMPLE64x 0x00000300 #define SAAP_FILTER_OVERSAMPLE2x 0x00000200 #define SAAP_FILTER SAAP_FILTER_OVERSAMPLE2x #define SAAP_NOFILTER 0x00000100 #define SAAP_44100 0x00000030 #define SAAP_22050 0x00000020 #define SAAP_11025 0x00000010 #define SAAP_16BIT 0x0000000c #define SAAP_8BIT 0x00000004 #define SAAP_STEREO 0x00000003 #define SAAP_MONO 0x00000001 // Bitmasks for use with GetCurrentSoundParameters, for example, // unsigned long CurrentSampleRateParameter = GetCurrentSoundParameters() #define SAAP_MASK_FILTER 0x00000f00 #define SAAP_MASK_FILTER_HIGHPASS 0x00000c00 #define SAAP_MASK_FILTER_OVERSAMPLE 0x00000300 #define SAAP_MASK_SAMPLERATE 0x000000030 #define SAAP_MASK_BITDEPTH 0x0000000c #define SAAP_MASK_CHANNELS 0x00000003 typedef unsigned long SAAPARAM; #ifndef BYTE #define BYTE unsigned char #endif #ifdef _WIN32 #define SAAAPI __stdcall #else #define SAAAPI #endif #ifdef __cplusplus #include "../../src/engine/dispatch.h" class CSAASound { public: virtual ~CSAASound() { } virtual void SetSoundParameters (SAAPARAM uParam) = 0; virtual void WriteAddress (BYTE nReg) = 0; virtual void WriteData (BYTE nData) = 0; virtual void WriteAddressData (BYTE nReg, BYTE nData) = 0; virtual void Clear () = 0; virtual BYTE ReadAddress () = 0; virtual SAAPARAM GetCurrentSoundParameters () = 0; virtual unsigned long GetCurrentSampleRate () = 0; static unsigned long GetSampleRate (SAAPARAM uParam); virtual unsigned short GetCurrentBytesPerSample () = 0; static unsigned short GetBytesPerSample (SAAPARAM uParam); virtual void GenerateMany (BYTE * pBuffer, unsigned long nSamples, DivDispatchOscBuffer** oscBuf) = 0; virtual void SetClockRate(unsigned int nClockRate) = 0; virtual void SetSampleRate(unsigned int nSampleRate) = 0; virtual void SetOversample(unsigned int nOversample) = 0; }; typedef class CSAASound * LPCSAASOUND; LPCSAASOUND SAAAPI CreateCSAASound(void); void SAAAPI DestroyCSAASound(LPCSAASOUND object); #endif // __cplusplus #ifdef __cplusplus extern "C" { #endif typedef void * SAASND; // "C-style" interface for the CSAASound class SAASND SAAAPI newSAASND(void); void SAAAPI deleteSAASND(SAASND object); void SAAAPI SAASNDSetSoundParameters(SAASND object, SAAPARAM uParam); void SAAAPI SAASNDWriteAddress(SAASND object, BYTE nReg); void SAAAPI SAASNDWriteData(SAASND object, BYTE nData); void SAAAPI SAASNDWriteAddressData(SAASND object, BYTE nReg, BYTE nData); void SAAAPI SAASNDClear(SAASND object); SAAPARAM SAAAPI SAASNDGetCurrentSoundParameters(SAASND object); unsigned short SAAAPI SAASNDGetCurrentBytesPerSample(SAASND object); unsigned short SAAAPI SAASNDGetBytesPerSample(SAAPARAM uParam); unsigned long SAAAPI SAASNDGetCurrentSampleRate(SAASND object); unsigned long SAAAPI SAASNDGetSampleRate(SAAPARAM uParam); void SAAAPI SAASNDGenerateMany(SAASND object, BYTE * pBuffer, unsigned long nSamples); void SAAAPI SAASNDSetClockRate(SAASND object, unsigned int nClockRate); void SAAAPI SAASNDSetSampleRate(SAASND object, unsigned int nSampleRate); void SAAAPI SAASNDSetOversample(SAASND object, unsigned int nOversample); #ifdef __cplusplus }; // extern "C" #endif #endif // SAASOUND_H_INCLUDED