123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- /* FAudio - XAudio Reimplementation for FNA
- *
- * Copyright (c) 2011-2021 Ethan Lee, Luigi Auriemma, and the MonoGame Team
- *
- * This software is provided 'as-is', without any express or implied warranty.
- * In no event will the authors be held liable for any damages arising from
- * the use of this software.
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- * claim that you wrote the original software. If you use this software in a
- * product, an acknowledgment in the product documentation would be
- * appreciated but is not required.
- *
- * 2. Altered source versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.
- *
- * 3. This notice may not be removed or altered from any source distribution.
- *
- * Ethan "flibitijibibo" Lee <flibitijibibo@flibitijibibo.com>
- *
- */
- /* This file has no documentation since the MSDN docs are still perfectly fine:
- * https://docs.microsoft.com/en-us/windows/desktop/api/x3daudio/
- */
- #ifndef F3DAUDIO_H
- #define F3DAUDIO_H
- #ifdef _WIN32
- #define F3DAUDIOAPI
- #else
- #define F3DAUDIOAPI
- #endif
- #include <stdint.h>
- #ifdef __cplusplus
- extern "C" {
- #endif /* __cplusplus */
- /* Constants */
- #ifndef _SPEAKER_POSITIONS_
- #define SPEAKER_FRONT_LEFT 0x00000001
- #define SPEAKER_FRONT_RIGHT 0x00000002
- #define SPEAKER_FRONT_CENTER 0x00000004
- #define SPEAKER_LOW_FREQUENCY 0x00000008
- #define SPEAKER_BACK_LEFT 0x00000010
- #define SPEAKER_BACK_RIGHT 0x00000020
- #define SPEAKER_FRONT_LEFT_OF_CENTER 0x00000040
- #define SPEAKER_FRONT_RIGHT_OF_CENTER 0x00000080
- #define SPEAKER_BACK_CENTER 0x00000100
- #define SPEAKER_SIDE_LEFT 0x00000200
- #define SPEAKER_SIDE_RIGHT 0x00000400
- #define SPEAKER_TOP_CENTER 0x00000800
- #define SPEAKER_TOP_FRONT_LEFT 0x00001000
- #define SPEAKER_TOP_FRONT_CENTER 0x00002000
- #define SPEAKER_TOP_FRONT_RIGHT 0x00004000
- #define SPEAKER_TOP_BACK_LEFT 0x00008000
- #define SPEAKER_TOP_BACK_CENTER 0x00010000
- #define SPEAKER_TOP_BACK_RIGHT 0x00020000
- #define _SPEAKER_POSITIONS_
- #endif
- #ifndef SPEAKER_MONO
- #define SPEAKER_MONO SPEAKER_FRONT_CENTER
- #define SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)
- #define SPEAKER_2POINT1 \
- ( SPEAKER_FRONT_LEFT | \
- SPEAKER_FRONT_RIGHT | \
- SPEAKER_LOW_FREQUENCY )
- #define SPEAKER_SURROUND \
- ( SPEAKER_FRONT_LEFT | \
- SPEAKER_FRONT_RIGHT | \
- SPEAKER_FRONT_CENTER | \
- SPEAKER_BACK_CENTER )
- #define SPEAKER_QUAD \
- ( SPEAKER_FRONT_LEFT | \
- SPEAKER_FRONT_RIGHT | \
- SPEAKER_BACK_LEFT | \
- SPEAKER_BACK_RIGHT )
- #define SPEAKER_4POINT1 \
- ( SPEAKER_FRONT_LEFT | \
- SPEAKER_FRONT_RIGHT | \
- SPEAKER_LOW_FREQUENCY | \
- SPEAKER_BACK_LEFT | \
- SPEAKER_BACK_RIGHT )
- #define SPEAKER_5POINT1 \
- ( SPEAKER_FRONT_LEFT | \
- SPEAKER_FRONT_RIGHT | \
- SPEAKER_FRONT_CENTER | \
- SPEAKER_LOW_FREQUENCY | \
- SPEAKER_BACK_LEFT | \
- SPEAKER_BACK_RIGHT )
- #define SPEAKER_7POINT1 \
- ( SPEAKER_FRONT_LEFT | \
- SPEAKER_FRONT_RIGHT | \
- SPEAKER_FRONT_CENTER | \
- SPEAKER_LOW_FREQUENCY | \
- SPEAKER_BACK_LEFT | \
- SPEAKER_BACK_RIGHT | \
- SPEAKER_FRONT_LEFT_OF_CENTER | \
- SPEAKER_FRONT_RIGHT_OF_CENTER )
- #define SPEAKER_5POINT1_SURROUND \
- ( SPEAKER_FRONT_LEFT | \
- SPEAKER_FRONT_RIGHT | \
- SPEAKER_FRONT_CENTER | \
- SPEAKER_LOW_FREQUENCY | \
- SPEAKER_SIDE_LEFT | \
- SPEAKER_SIDE_RIGHT )
- #define SPEAKER_7POINT1_SURROUND \
- ( SPEAKER_FRONT_LEFT | \
- SPEAKER_FRONT_RIGHT | \
- SPEAKER_FRONT_CENTER | \
- SPEAKER_LOW_FREQUENCY | \
- SPEAKER_BACK_LEFT | \
- SPEAKER_BACK_RIGHT | \
- SPEAKER_SIDE_LEFT | \
- SPEAKER_SIDE_RIGHT )
- #define SPEAKER_XBOX SPEAKER_5POINT1
- #endif
- #define F3DAUDIO_PI 3.141592654f
- #define F3DAUDIO_2PI 6.283185307f
- #define F3DAUDIO_CALCULATE_MATRIX 0x00000001
- #define F3DAUDIO_CALCULATE_DELAY 0x00000002
- #define F3DAUDIO_CALCULATE_LPF_DIRECT 0x00000004
- #define F3DAUDIO_CALCULATE_LPF_REVERB 0x00000008
- #define F3DAUDIO_CALCULATE_REVERB 0x00000010
- #define F3DAUDIO_CALCULATE_DOPPLER 0x00000020
- #define F3DAUDIO_CALCULATE_EMITTER_ANGLE 0x00000040
- #define F3DAUDIO_CALCULATE_ZEROCENTER 0x00010000
- #define F3DAUDIO_CALCULATE_REDIRECT_TO_LFE 0x00020000
- /* Type Declarations */
- #define F3DAUDIO_HANDLE_BYTESIZE 20
- typedef uint8_t F3DAUDIO_HANDLE[F3DAUDIO_HANDLE_BYTESIZE];
- /* Structures */
- #pragma pack(push, 1)
- typedef struct F3DAUDIO_VECTOR
- {
- float x;
- float y;
- float z;
- } F3DAUDIO_VECTOR;
- typedef struct F3DAUDIO_DISTANCE_CURVE_POINT
- {
- float Distance;
- float DSPSetting;
- } F3DAUDIO_DISTANCE_CURVE_POINT;
- typedef struct F3DAUDIO_DISTANCE_CURVE
- {
- F3DAUDIO_DISTANCE_CURVE_POINT *pPoints;
- uint32_t PointCount;
- } F3DAUDIO_DISTANCE_CURVE;
- typedef struct F3DAUDIO_CONE
- {
- float InnerAngle;
- float OuterAngle;
- float InnerVolume;
- float OuterVolume;
- float InnerLPF;
- float OuterLPF;
- float InnerReverb;
- float OuterReverb;
- } F3DAUDIO_CONE;
- typedef struct F3DAUDIO_LISTENER
- {
- F3DAUDIO_VECTOR OrientFront;
- F3DAUDIO_VECTOR OrientTop;
- F3DAUDIO_VECTOR Position;
- F3DAUDIO_VECTOR Velocity;
- F3DAUDIO_CONE *pCone;
- } F3DAUDIO_LISTENER;
- typedef struct F3DAUDIO_EMITTER
- {
- F3DAUDIO_CONE *pCone;
- F3DAUDIO_VECTOR OrientFront;
- F3DAUDIO_VECTOR OrientTop;
- F3DAUDIO_VECTOR Position;
- F3DAUDIO_VECTOR Velocity;
- float InnerRadius;
- float InnerRadiusAngle;
- uint32_t ChannelCount;
- float ChannelRadius;
- float *pChannelAzimuths;
- F3DAUDIO_DISTANCE_CURVE *pVolumeCurve;
- F3DAUDIO_DISTANCE_CURVE *pLFECurve;
- F3DAUDIO_DISTANCE_CURVE *pLPFDirectCurve;
- F3DAUDIO_DISTANCE_CURVE *pLPFReverbCurve;
- F3DAUDIO_DISTANCE_CURVE *pReverbCurve;
- float CurveDistanceScaler;
- float DopplerScaler;
- } F3DAUDIO_EMITTER;
- #ifndef F3DAUDIO_DSP_SETTINGS_DECL
- #define F3DAUDIO_DSP_SETTINGS_DECL
- typedef struct F3DAUDIO_DSP_SETTINGS F3DAUDIO_DSP_SETTINGS;
- #endif /* F3DAUDIO_DSP_SETTINGS_DECL */
- struct F3DAUDIO_DSP_SETTINGS
- {
- float *pMatrixCoefficients;
- float *pDelayTimes;
- uint32_t SrcChannelCount;
- uint32_t DstChannelCount;
- float LPFDirectCoefficient;
- float LPFReverbCoefficient;
- float ReverbLevel;
- float DopplerFactor;
- float EmitterToListenerAngle;
- float EmitterToListenerDistance;
- float EmitterVelocityComponent;
- float ListenerVelocityComponent;
- };
- #pragma pack(pop)
- /* Functions */
- F3DAUDIOAPI void F3DAudioInitialize(
- uint32_t SpeakerChannelMask,
- float SpeedOfSound,
- F3DAUDIO_HANDLE Instance
- );
- F3DAUDIOAPI uint32_t F3DAudioInitialize8(
- uint32_t SpeakerChannelMask,
- float SpeedOfSound,
- F3DAUDIO_HANDLE Instance
- );
- F3DAUDIOAPI void F3DAudioCalculate(
- const F3DAUDIO_HANDLE Instance,
- const F3DAUDIO_LISTENER *pListener,
- const F3DAUDIO_EMITTER *pEmitter,
- uint32_t Flags,
- F3DAUDIO_DSP_SETTINGS *pDSPSettings
- );
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
- #endif /* F3DAUDIO_H */
- /* vim: set noexpandtab shiftwidth=8 tabstop=8: */
|