24#if defined(_WINDOWS) || defined(_XBOX_XS)
26 class GxVoiceCallback :
public IXAudio2VoiceCallback
39 ~GxVoiceCallback(
void) { }
48 GX_FORCE_INLINE
void OnStreamEnd(
void) { _pOwner->stop(); }
51 void OnVoiceProcessingPassStart(u32 )
override {}
53 void OnVoiceProcessingPassEnd(
void)
override {}
55 void OnBufferStart(
void* )
override {}
58 void OnBufferEnd(
void* )
override {}
60 void OnLoopEnd(
void* )
override {}
66 void OnVoiceError(
void* , HRESULT error)
override { GX_ERROR(
false,
"GxUnitSound error(0x%x)", error); }
81 static constexpr u32 DST_CHANNEL_MAX = SRC_CHANNEL_MAX;
82 static constexpr f32 PAN_INVALID_VALUE = -1.1f;
108 void cleanup(
void)
override;
110#if defined(_WINDOWS) || defined(_XBOX_XS)
112 b32 initializeX3dAudio(u32 channelCount);
122 void asyncUpdate(
void)
override;
124 void render(
void)
override;
128 void stop(f32 duration = 0);
129#if defined(_WINDOWS) || defined(_XBOX_XS)
131 void setEffect(
const EFFECT* pEffects,
void** ppEffectParameters, u32 count);
133 void setEffectEnable(u32 index,
b32 enable)
const;
135 FXECHO_PARAMETERS getDefaultEchoParameters(
void)
const;
137 FXEQ_PARAMETERS getDefaultEqParameters(
void)
const;
139 FXMASTERINGLIMITER_PARAMETERS getDefaultMasteringLimiterParameters(
void)
const;
141 FXREVERB_PARAMETERS getDefaultReverbParameters(
void)
const;
151 f32 getVolume(
void)
const;
153 void setVolume(f32 volume);
155 f32 getPitch(
void)
const;
157 void setPitch(f32 pitch);
159 void set3dConeParameter(f32 innerAngle, f32 outerAngle, f32 outerVolume);
161 void set3dMinMaxAttenuationDistance(f32 min, f32 max);
165 constexpr f32
getPan(
void)
const {
return _pan; }
167 GX_FORCE_INLINE
void setPan(f32 pan) { _is3D = (pan == PAN_INVALID_VALUE); _pan = pan; }
177 f32 _matrixCoefficients[SRC_CHANNEL_MAX * DST_CHANNEL_MAX];
178 f32 _channelAzimuths[SRC_CHANNEL_MAX];
180 u32 _streamingSetSize;
186#if defined(_WINDOWS) || defined(_XBOX_XS)
187 GxVoiceCallback _callback;
188 IXAudio2SourceVoice* _pXAudio2SourceVoice;
189 X3DAUDIO_EMITTER _x3dAudioEmitter;
190 X3DAUDIO_CONE _x3dAudioCone;
191 X3DAUDIO_DISTANCE_CURVE _x3dAudioDistanceCurve;
192 X3DAUDIO_DISTANCE_CURVE_POINT _x3dAudioDistanceCurvePoint[2];
193 X3DAUDIO_DSP_SETTINGS _x3dAudioDspSettings;