Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/lib/FAudio/src/FACT3D.c
172 lines | 3.9 KiB | text/x-c | CLexer
172 lines | 3.9 KiB | text/x-c | CLexer
r0 | /* FAudio - XAudio Reimplementation for FNA | |||
* | ||||
* Copyright (c) 2011-2020 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> | ||||
* | ||||
*/ | ||||
#include "FACT3D.h" | ||||
uint32_t FACT3DInitialize( | ||||
FACTAudioEngine *pEngine, | ||||
F3DAUDIO_HANDLE F3DInstance | ||||
) { | ||||
float nSpeedOfSound; | ||||
FAudioWaveFormatExtensible wfxFinalMixFormat; | ||||
if (pEngine == NULL) | ||||
{ | ||||
return 0; | ||||
} | ||||
FACTAudioEngine_GetGlobalVariable( | ||||
pEngine, | ||||
FACTAudioEngine_GetGlobalVariableIndex( | ||||
pEngine, | ||||
"SpeedOfSound" | ||||
), | ||||
&nSpeedOfSound | ||||
); | ||||
FACTAudioEngine_GetFinalMixFormat( | ||||
pEngine, | ||||
&wfxFinalMixFormat | ||||
); | ||||
F3DAudioInitialize( | ||||
wfxFinalMixFormat.dwChannelMask, | ||||
nSpeedOfSound, | ||||
F3DInstance | ||||
); | ||||
return 0; | ||||
} | ||||
uint32_t FACT3DCalculate( | ||||
F3DAUDIO_HANDLE F3DInstance, | ||||
const F3DAUDIO_LISTENER *pListener, | ||||
F3DAUDIO_EMITTER *pEmitter, | ||||
F3DAUDIO_DSP_SETTINGS *pDSPSettings | ||||
) { | ||||
static F3DAUDIO_DISTANCE_CURVE_POINT DefaultCurvePoints[2] = | ||||
{ | ||||
{ 0.0f, 1.0f }, | ||||
{ 1.0f, 1.0f } | ||||
}; | ||||
static F3DAUDIO_DISTANCE_CURVE DefaultCurve = | ||||
{ | ||||
(F3DAUDIO_DISTANCE_CURVE_POINT*) &DefaultCurvePoints[0], 2 | ||||
}; | ||||
if (pListener == NULL || pEmitter == NULL || pDSPSettings == NULL) | ||||
{ | ||||
return 0; | ||||
} | ||||
if (pEmitter->ChannelCount > 1 && pEmitter->pChannelAzimuths == NULL) | ||||
{ | ||||
pEmitter->ChannelRadius = 1.0f; | ||||
if (pEmitter->ChannelCount == 2) | ||||
{ | ||||
pEmitter->pChannelAzimuths = (float*) &aStereoLayout[0]; | ||||
} | ||||
else if (pEmitter->ChannelCount == 3) | ||||
{ | ||||
pEmitter->pChannelAzimuths = (float*) &a2Point1Layout[0]; | ||||
} | ||||
else if (pEmitter->ChannelCount == 4) | ||||
{ | ||||
pEmitter->pChannelAzimuths = (float*) &aQuadLayout[0]; | ||||
} | ||||
else if (pEmitter->ChannelCount == 5) | ||||
{ | ||||
pEmitter->pChannelAzimuths = (float*) &a4Point1Layout[0]; | ||||
} | ||||
else if (pEmitter->ChannelCount == 6) | ||||
{ | ||||
pEmitter->pChannelAzimuths = (float*) &a5Point1Layout[0]; | ||||
} | ||||
else if (pEmitter->ChannelCount == 8) | ||||
{ | ||||
pEmitter->pChannelAzimuths = (float*) &a7Point1Layout[0]; | ||||
} | ||||
else | ||||
{ | ||||
return 0; | ||||
} | ||||
} | ||||
if (pEmitter->pVolumeCurve == NULL) | ||||
{ | ||||
pEmitter->pVolumeCurve = &DefaultCurve; | ||||
} | ||||
if (pEmitter->pLFECurve == NULL) | ||||
{ | ||||
pEmitter->pLFECurve = &DefaultCurve; | ||||
} | ||||
F3DAudioCalculate( | ||||
F3DInstance, | ||||
pListener, | ||||
pEmitter, | ||||
( | ||||
F3DAUDIO_CALCULATE_MATRIX | | ||||
F3DAUDIO_CALCULATE_DOPPLER | | ||||
F3DAUDIO_CALCULATE_EMITTER_ANGLE | ||||
), | ||||
pDSPSettings | ||||
); | ||||
return 0; | ||||
} | ||||
uint32_t FACT3DApply( | ||||
F3DAUDIO_DSP_SETTINGS *pDSPSettings, | ||||
FACTCue *pCue | ||||
) { | ||||
if (pDSPSettings == NULL || pCue == NULL) | ||||
{ | ||||
return 0; | ||||
} | ||||
FACTCue_SetMatrixCoefficients( | ||||
pCue, | ||||
pDSPSettings->SrcChannelCount, | ||||
pDSPSettings->DstChannelCount, | ||||
pDSPSettings->pMatrixCoefficients | ||||
); | ||||
FACTCue_SetVariable( | ||||
pCue, | ||||
FACTCue_GetVariableIndex(pCue, "Distance"), | ||||
pDSPSettings->EmitterToListenerDistance | ||||
); | ||||
FACTCue_SetVariable( | ||||
pCue, | ||||
FACTCue_GetVariableIndex(pCue, "DopplerPitchScalar"), | ||||
pDSPSettings->DopplerFactor | ||||
); | ||||
FACTCue_SetVariable( | ||||
pCue, | ||||
FACTCue_GetVariableIndex(pCue, "OrientationAngle"), | ||||
pDSPSettings->EmitterToListenerAngle * (180.0f / F3DAUDIO_PI) | ||||
); | ||||
return 0; | ||||
} | ||||
/* vim: set noexpandtab shiftwidth=8 tabstop=8: */ | ||||