mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-16 09:21:12 +00:00
7b0104e9a1
git-svn-id: https://svn.eduke32.com/eduke32@452 1a8010ca-5511-0410-912e-c29ae57300e0
159 lines
6 KiB
C++
Executable file
159 lines
6 KiB
C++
Executable file
#ifndef __jfaud_hpp__
|
|
#define __jfaud_hpp__
|
|
|
|
#include "file.hpp"
|
|
#include "mixer.hpp"
|
|
#include "cda.hpp"
|
|
|
|
#ifdef JFAUD_INTERNAL
|
|
struct _wavechan {
|
|
JFAudMixerChannel *h;
|
|
int priority;
|
|
unsigned age;
|
|
};
|
|
#endif
|
|
|
|
class JFAud {
|
|
private:
|
|
JFAudFile* (*useropenfunc)(const char *, const char *);
|
|
|
|
JFAudMixer *wavemixer;
|
|
|
|
int numwavechans;
|
|
JFAudCDA *cddev;
|
|
|
|
#ifdef JFAUD_INTERNAL
|
|
struct _wavechan *wavechans, *musicchan;
|
|
WaveOut *waveout;
|
|
SoundCache *cache;
|
|
JFAudMidiSynth *midisynth;
|
|
#else
|
|
void *wavechans, *musicchan;
|
|
void *waveout, *cache, *midisynth;
|
|
#endif
|
|
|
|
struct _wavechan * FindFreeWaveChan(int priority);
|
|
|
|
void *winhnd;
|
|
|
|
protected:
|
|
public:
|
|
JFAud();
|
|
~JFAud();
|
|
|
|
// Initialisation and general control
|
|
void SetUserOpenFunc(JFAudFile* (*func)(const char *, const char *)) { useropenfunc = func; }
|
|
// Pass NULL to use conventional stdio file services, otherwise pass
|
|
// a suitable pointer to a function that will handle opening files.
|
|
// The function must return a JFAudFile object or NULL, which means
|
|
// it must return an object of a class derived from JFAudFile.
|
|
|
|
bool InitWave(const char *name, int numvoices = 32, int frequency = 44100);
|
|
// 'name' may be a string of the format
|
|
// driver[:device id]
|
|
// The only valid driver is currently "openal".
|
|
// If no device id is specified the default for the driver will be used.
|
|
// If 'name' is NULL, the default driver will be used.
|
|
// The numvoices and frequency parameters are only used for drivers that accept them.
|
|
|
|
bool SetWindowHandle(void *hwnd);
|
|
// WIN32: 'hwnd' is the window handle cast to a void*
|
|
// Other: function does nothing
|
|
|
|
bool SetCacheSize(unsigned cache, unsigned object);
|
|
// Sets the total cache and per-object size limits
|
|
|
|
bool SetCacheItemAge(unsigned age);
|
|
// Sets the maximum age of an unused cache item
|
|
|
|
bool InitMIDI(const char *name);
|
|
// 'name' may be a string naming the device to use.
|
|
// If 'name' is NULL, the default device will be used.
|
|
// WIN32: give the MIDI device name
|
|
// etc: no MIDI supported
|
|
|
|
bool InitCDA(const char *name);
|
|
// 'name' may be a string naming the device to use.
|
|
// If 'name' is NULL, the default device will be used.
|
|
// WIN32: give the drive letter to use for playback
|
|
// LINUX,BSD: give the drive number that SDL would use for playback
|
|
|
|
bool Uninit(void);
|
|
// Perform system uninitialisation
|
|
|
|
bool Update(bool agecache = false);
|
|
// Update streams, etc.
|
|
|
|
bool AgeCache(void);
|
|
// Ages the cache
|
|
|
|
// Device enumeration
|
|
static char **EnumerateWaveDevices(const char *name, char **def);
|
|
// 'name' may be NULL to return a list of valid drivers, or the name of a driver
|
|
// to return a list of valid device ids.
|
|
// The return value is a dynamically allocated array of strings, terminated by a NULL pointer,
|
|
// that you must free.
|
|
|
|
static char **EnumerateMIDIDevices(char **def);
|
|
// Returns a list of legal device names for InitMIDI().
|
|
// The return value is a dynamically allocated array of strings, terminated by a NULL pointer,
|
|
// that you must free.
|
|
|
|
static char **EnumerateCDADevices(char **def);
|
|
// Returns a list of legal device names for InitCDA().
|
|
// The return value is a dynamically allocated array of strings, terminated by a NULL pointer,
|
|
// that you must free.
|
|
|
|
// Sound effect playback
|
|
// Hint: if you want to play from a file in memory, use the MemoryFile class in memfile.hpp to wrap
|
|
// the pointer you have in a JFAudFile class which you can then pass to PlaySoundFile.
|
|
JFAudMixerChannel *PlaySound(const char *filename, const char *subfilename = (const char*)0, int priority = 1);
|
|
JFAudMixerChannel *PlaySoundFile(JFAudFile **file, int priority = 1);
|
|
// Prepares a channel for playing the named sound. The channel is paused ready
|
|
// for set up and play. You can call any of the methods of JFAudMixerChannel, but don't
|
|
// delete the handle yourself--pass it to FreeSound() instead.
|
|
//
|
|
// When passing a JFAudFile object, you have to pass a pointer to a file object. If the
|
|
// function returns a valid handle, *file will be set to NULL. If the function returns
|
|
// a NULL handle, *file might also be set to NULL if the file was properly identified and
|
|
// an error occurred while attempting to set up the mixer channel, otherwise it will be
|
|
// untouched and you are responsible for disposing of it. In the event everything succeeds,
|
|
// don't touch the file object ever again. The mixer will dispose of it when it's no longer
|
|
// needed.
|
|
|
|
JFAudMixerChannel *PlayRawSound(const char *filename, const char *subfilename = (const char*)0, int priority = 1, int samplerate = 11025, int channels = 1, int bytespersample = 2, bool bigendian = false);
|
|
JFAudMixerChannel *PlayRawSoundFile(JFAudFile **file, int priority = 1, int samplerate = 11025, int channels = 2, int bytespersample = 2, bool bigendian = false);
|
|
// Like PlaySound(), only these play headerless PCM of the format you specify.
|
|
|
|
bool FreeSound(JFAudMixerChannel *chan);
|
|
// Releases a channel. Pass a channel object to this function to dispose of it rather
|
|
// than deleting it yourself.
|
|
|
|
bool IsValidSound(JFAudMixerChannel *chan) const;
|
|
// Checks to see if a the passed channel is still valid. Because of the priority system, a call
|
|
// to PlaySound or PlayMusic might kick out a channel, which leaves you with a pointer that's no
|
|
// longer valid, so verify that it's still safe before working with the channel.
|
|
|
|
JFAudMixer * GetWave(void) const { return wavemixer; }
|
|
// Don't try deleting the object you get from this function or bad thing will happen. Just
|
|
// ignore it when you're done with it.
|
|
|
|
// Music playback
|
|
bool PlayMusic(const char *filename, const char *subfilename = (const char*)0);
|
|
bool PlayMusicFile(JFAudFile **file);
|
|
bool PauseMusic(bool onf);
|
|
bool StopMusic(void);
|
|
|
|
// CD audio playback
|
|
JFAudCDA * GetCDA(void) const { return cddev; }
|
|
// Don't try deleting the object you get from this function or bad things will happen. Just
|
|
// ignore it when you're done with it.
|
|
|
|
bool SetWaveVolume(float vol);
|
|
bool SetMIDIVolume(float vol);
|
|
bool SetCDAVolume(float vol);
|
|
};
|
|
|
|
void JFAud_SetLogFunc(void (*func)(const char *));
|
|
|
|
#endif
|