mirror of
https://github.com/geode-sdk/geode.git
synced 2024-11-23 16:07:52 -05:00
130 lines
7.7 KiB
C
130 lines
7.7 KiB
C
|
/* ======================================================================================== */
|
||
|
/* FMOD Core API - output development header file. */
|
||
|
/* Copyright (c), Firelight Technologies Pty, Ltd. 2004-2020. */
|
||
|
/* */
|
||
|
/* Use this header if you are wanting to develop your own output plugin to use with */
|
||
|
/* FMOD's output system. With this header you can make your own output plugin that FMOD */
|
||
|
/* can register and use. See the documentation and examples on how to make a working */
|
||
|
/* plugin. */
|
||
|
/* */
|
||
|
/* For more detail visit: */
|
||
|
/* https://fmod.com/resources/documentation-api?version=2.0&page=plugin-api-output.html */
|
||
|
/* ======================================================================================== */
|
||
|
#ifndef _FMOD_OUTPUT_H
|
||
|
#define _FMOD_OUTPUT_H
|
||
|
|
||
|
typedef struct FMOD_OUTPUT_STATE FMOD_OUTPUT_STATE;
|
||
|
typedef struct FMOD_OUTPUT_OBJECT3DINFO FMOD_OUTPUT_OBJECT3DINFO;
|
||
|
|
||
|
/*
|
||
|
Output constants
|
||
|
*/
|
||
|
#define FMOD_OUTPUT_PLUGIN_VERSION 4
|
||
|
|
||
|
typedef unsigned int FMOD_OUTPUT_METHOD;
|
||
|
#define FMOD_OUTPUT_METHOD_MIX_DIRECT 0
|
||
|
#define FMOD_OUTPUT_METHOD_POLLING 1
|
||
|
#define FMOD_OUTPUT_METHOD_MIX_BUFFERED 2
|
||
|
|
||
|
/*
|
||
|
Output callbacks
|
||
|
*/
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_GETNUMDRIVERS_CALLBACK) (FMOD_OUTPUT_STATE *output_state, int *numdrivers);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_GETDRIVERINFO_CALLBACK) (FMOD_OUTPUT_STATE *output_state, int id, char *name, int namelen, FMOD_GUID *guid, int *systemrate, FMOD_SPEAKERMODE *speakermode, int *speakermodechannels);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_INIT_CALLBACK) (FMOD_OUTPUT_STATE *output_state, int selecteddriver, FMOD_INITFLAGS flags, int *outputrate, FMOD_SPEAKERMODE *speakermode, int *speakermodechannels, FMOD_SOUND_FORMAT *outputformat, int dspbufferlength, int dspnumbuffers, void *extradriverdata);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_START_CALLBACK) (FMOD_OUTPUT_STATE *output_state);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_STOP_CALLBACK) (FMOD_OUTPUT_STATE *output_state);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_CLOSE_CALLBACK) (FMOD_OUTPUT_STATE *output_state);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_UPDATE_CALLBACK) (FMOD_OUTPUT_STATE *output_state);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_GETHANDLE_CALLBACK) (FMOD_OUTPUT_STATE *output_state, void **handle);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_GETPOSITION_CALLBACK) (FMOD_OUTPUT_STATE *output_state, unsigned int *pcm);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_LOCK_CALLBACK) (FMOD_OUTPUT_STATE *output_state, unsigned int offset, unsigned int length, void **ptr1, void **ptr2, unsigned int *len1, unsigned int *len2);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_UNLOCK_CALLBACK) (FMOD_OUTPUT_STATE *output_state, void *ptr1, void *ptr2, unsigned int len1, unsigned int len2);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_MIXER_CALLBACK) (FMOD_OUTPUT_STATE *output_state);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_OBJECT3DGETINFO_CALLBACK) (FMOD_OUTPUT_STATE *output_state, int *maxhardwareobjects);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK) (FMOD_OUTPUT_STATE *output_state, void **object3d);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_OBJECT3DFREE_CALLBACK) (FMOD_OUTPUT_STATE *output_state, void *object3d);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK) (FMOD_OUTPUT_STATE *output_state, void *object3d, const FMOD_OUTPUT_OBJECT3DINFO *info);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_OPENPORT_CALLBACK) (FMOD_OUTPUT_STATE *output_state, FMOD_PORT_TYPE portType, FMOD_PORT_INDEX portIndex, int *portId, int *portRate, int *portChannels, FMOD_SOUND_FORMAT *portFormat);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_CLOSEPORT_CALLBACK) (FMOD_OUTPUT_STATE *output_state, int portId);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_DEVICELISTCHANGED_CALLBACK)(FMOD_OUTPUT_STATE *output_state);
|
||
|
|
||
|
/*
|
||
|
Output functions
|
||
|
*/
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_READFROMMIXER_FUNC) (FMOD_OUTPUT_STATE *output_state, void *buffer, unsigned int length);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_COPYPORT_FUNC) (FMOD_OUTPUT_STATE *output_state, int portId, void *buffer, unsigned int length);
|
||
|
typedef FMOD_RESULT (F_CALL *FMOD_OUTPUT_REQUESTRESET_FUNC) (FMOD_OUTPUT_STATE *output_state);
|
||
|
typedef void * (F_CALL *FMOD_OUTPUT_ALLOC_FUNC) (unsigned int size, unsigned int align, const char *file, int line);
|
||
|
typedef void (F_CALL *FMOD_OUTPUT_FREE_FUNC) (void *ptr, const char *file, int line);
|
||
|
typedef void (F_CALL *FMOD_OUTPUT_LOG_FUNC) (FMOD_DEBUG_FLAGS level, const char *file, int line, const char *function, const char *string, ...);
|
||
|
|
||
|
/*
|
||
|
Output structures
|
||
|
*/
|
||
|
typedef struct FMOD_OUTPUT_DESCRIPTION
|
||
|
{
|
||
|
unsigned int apiversion;
|
||
|
const char *name;
|
||
|
unsigned int version;
|
||
|
FMOD_OUTPUT_METHOD polling; /* This will become "method" on the next major version */
|
||
|
FMOD_OUTPUT_GETNUMDRIVERS_CALLBACK getnumdrivers;
|
||
|
FMOD_OUTPUT_GETDRIVERINFO_CALLBACK getdriverinfo;
|
||
|
FMOD_OUTPUT_INIT_CALLBACK init;
|
||
|
FMOD_OUTPUT_START_CALLBACK start;
|
||
|
FMOD_OUTPUT_STOP_CALLBACK stop;
|
||
|
FMOD_OUTPUT_CLOSE_CALLBACK close;
|
||
|
FMOD_OUTPUT_UPDATE_CALLBACK update;
|
||
|
FMOD_OUTPUT_GETHANDLE_CALLBACK gethandle;
|
||
|
FMOD_OUTPUT_GETPOSITION_CALLBACK getposition;
|
||
|
FMOD_OUTPUT_LOCK_CALLBACK lock;
|
||
|
FMOD_OUTPUT_UNLOCK_CALLBACK unlock;
|
||
|
FMOD_OUTPUT_MIXER_CALLBACK mixer;
|
||
|
FMOD_OUTPUT_OBJECT3DGETINFO_CALLBACK object3dgetinfo;
|
||
|
FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK object3dalloc;
|
||
|
FMOD_OUTPUT_OBJECT3DFREE_CALLBACK object3dfree;
|
||
|
FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK object3dupdate;
|
||
|
FMOD_OUTPUT_OPENPORT_CALLBACK openport;
|
||
|
FMOD_OUTPUT_CLOSEPORT_CALLBACK closeport;
|
||
|
FMOD_OUTPUT_DEVICELISTCHANGED_CALLBACK devicelistchanged;
|
||
|
} FMOD_OUTPUT_DESCRIPTION;
|
||
|
|
||
|
struct FMOD_OUTPUT_STATE
|
||
|
{
|
||
|
void *plugindata;
|
||
|
FMOD_OUTPUT_READFROMMIXER_FUNC readfrommixer;
|
||
|
FMOD_OUTPUT_ALLOC_FUNC alloc;
|
||
|
FMOD_OUTPUT_FREE_FUNC free;
|
||
|
FMOD_OUTPUT_LOG_FUNC log;
|
||
|
FMOD_OUTPUT_COPYPORT_FUNC copyport;
|
||
|
FMOD_OUTPUT_REQUESTRESET_FUNC requestreset;
|
||
|
};
|
||
|
|
||
|
struct FMOD_OUTPUT_OBJECT3DINFO
|
||
|
{
|
||
|
float *buffer;
|
||
|
unsigned int bufferlength;
|
||
|
FMOD_VECTOR position;
|
||
|
float gain;
|
||
|
float spread;
|
||
|
float priority;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Output macros
|
||
|
*/
|
||
|
#define FMOD_OUTPUT_READFROMMIXER(_state, _buffer, _length) \
|
||
|
(_state)->readfrommixer(_state, _buffer, _length)
|
||
|
#define FMOD_OUTPUT_ALLOC(_state, _size, _align) \
|
||
|
(_state)->alloc(_size, _align, __FILE__, __LINE__)
|
||
|
#define FMOD_OUTPUT_FREE(_state, _ptr) \
|
||
|
(_state)->free(_ptr, __FILE__, __LINE__)
|
||
|
#define FMOD_OUTPUT_LOG(_state, _level, _location, _format, ...) \
|
||
|
(_state)->log(_level, __FILE__, __LINE__, _location, _format, __VA_ARGS__)
|
||
|
#define FMOD_OUTPUT_COPYPORT(_state, _id, _buffer, _length) \
|
||
|
(_state)->copyport(_state, _id, _buffer, _length)
|
||
|
#define FMOD_OUTPUT_REQUESTRESET(_state) \
|
||
|
(_state)->requestreset(_state)
|
||
|
|
||
|
#endif /* _FMOD_OUTPUT_H */
|