Skip to content

Commit 550f146

Browse files
Feature/fix stereo headphone disambiguation (#356)
* Readd automatic global HRTF setting for FMOD and Unity plugins * Improve variable name consistency (#356)
1 parent 1660d9f commit 550f146

18 files changed

+67
-10
lines changed

fmod/src/mix_return_effect.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ FMOD_RESULT F_CALL process(FMOD_DSP_STATE* state,
373373
ambisonicsParams.order = gSimulationSettings.maxOrder;
374374
ambisonicsParams.hrtf = gHRTF[0];
375375
ambisonicsParams.orientation = listenerCoordinates;
376-
ambisonicsParams.binaural = numChannelsOut == 2 && (effect->binaural) ? IPL_TRUE : IPL_FALSE;
376+
ambisonicsParams.binaural = numChannelsOut == 2 && !gHRTFDisabled && (effect->binaural) ? IPL_TRUE : IPL_FALSE;
377377

378378
iplAmbisonicsDecodeEffectApply(effect->ambisonicsEffect, &ambisonicsParams, &effect->reflectionsBuffer, &effect->outBuffer);
379379

fmod/src/reverb_effect.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ FMOD_RESULT F_CALL process(FMOD_DSP_STATE* state,
403403
ambisonicsParams.order = gSimulationSettings.maxOrder;
404404
ambisonicsParams.hrtf = gHRTF[0];
405405
ambisonicsParams.orientation = listenerCoordinates;
406-
ambisonicsParams.binaural = numChannelsOut == 2 && (effect->binaural) ? IPL_TRUE : IPL_FALSE;
406+
ambisonicsParams.binaural = numChannelsOut == 2 && !gHRTFDisabled && (effect->binaural) ? IPL_TRUE : IPL_FALSE;
407407

408408
iplAmbisonicsDecodeEffectApply(effect->ambisonicsEffect, &ambisonicsParams, &effect->reflectionsBuffer, &effect->outBuffer);
409409

fmod/src/spatialize_effect.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,7 +1432,7 @@ FMOD_RESULT F_CALL process(FMOD_DSP_STATE* state,
14321432

14331433
iplDirectEffectApply(effect->directEffect, &directParams, &effect->inBuffer, &effect->directBuffer);
14341434

1435-
bool directBinaural = numChannelsOut == 2 && effect->directBinaural;
1435+
bool directBinaural = numChannelsOut == 2 && effect->directBinaural && !gHRTFDisabled;
14361436
if (directBinaural)
14371437
{
14381438
IPLBinauralEffectParams binauralParams{};
@@ -1494,7 +1494,7 @@ FMOD_RESULT F_CALL process(FMOD_DSP_STATE* state,
14941494
ambisonicsParams.order = gSimulationSettings.maxOrder;
14951495
ambisonicsParams.hrtf = gHRTF[0];
14961496
ambisonicsParams.orientation = listenerCoordinates;
1497-
ambisonicsParams.binaural = numChannelsOut == 2 && (effect->reflectionsBinaural) ? IPL_TRUE : IPL_FALSE;
1497+
ambisonicsParams.binaural = numChannelsOut == 2 && !gHRTFDisabled && (effect->reflectionsBinaural) ? IPL_TRUE : IPL_FALSE;
14981498

14991499
iplAmbisonicsDecodeEffectApply(effect->ambisonicsEffect, &ambisonicsParams, &effect->reflectionsBuffer, &effect->reflectionsSpatializedBuffer);
15001500

@@ -1512,7 +1512,7 @@ FMOD_RESULT F_CALL process(FMOD_DSP_STATE* state,
15121512

15131513
IPLPathEffectParams pathParams = simulationOutputs.pathing;
15141514
pathParams.order = gSimulationSettings.maxOrder;
1515-
pathParams.binaural = numChannelsOut == 2 && (effect->pathingBinaural) ? IPL_TRUE : IPL_FALSE;
1515+
pathParams.binaural = numChannelsOut == 2 && !gHRTFDisabled && (effect->pathingBinaural) ? IPL_TRUE : IPL_FALSE;
15161516
pathParams.hrtf = gHRTF[0];
15171517
pathParams.listener = listenerCoordinates;
15181518

fmod/src/steamaudio_fmod.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ std::atomic<bool> gNewHRTFWritten{ false };
4242
std::atomic<bool> gIsSimulationSettingsValid{ false };
4343
std::atomic<bool> gNewReverbSourceWritten{ false };
4444
std::atomic<bool> gNewReflectionMixerWritten{ false };
45+
std::atomic<bool> gHRTFDisabled{ false };
4546

4647
std::shared_ptr<SourceManager> gSourceManager;
4748

@@ -512,3 +513,8 @@ void F_CALL iplFMODRemoveSource(IPLint32 handle)
512513

513514
gSourceManager->removeSource(handle);
514515
}
516+
517+
void F_CALL iplFMODSetHRTFDisabled(bool disabled)
518+
{
519+
gHRTFDisabled = disabled;
520+
}

fmod/src/steamaudio_fmod.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ extern std::atomic<bool> gNewHRTFWritten;
7474
extern std::atomic<bool> gIsSimulationSettingsValid;
7575
extern std::atomic<bool> gNewReverbSourceWritten;
7676
extern std::atomic<bool> gNewReflectionMixerWritten;
77+
extern std::atomic<bool> gHRTFDisabled;
7778

7879

7980
// --------------------------------------------------------------------------------------------------------------------
@@ -247,4 +248,7 @@ F_EXPORT void F_CALL iplFMODSetReverbSource(IPLSource reverbSource);
247248
F_EXPORT IPLint32 F_CALL iplFMODAddSource(IPLSource source);
248249

249250
F_EXPORT void F_CALL iplFMODRemoveSource(IPLint32 handle);
251+
252+
F_EXPORT void F_CALL iplFMODSetHRTFDisabled(bool disabled);
253+
250254
}

unity/src/native/mix_return_effect.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK process(UnityAudioEffectState* sta
298298
ambisonicsParams.order = gSimulationSettings.maxOrder;
299299
ambisonicsParams.hrtf = gHRTF[0];
300300
ambisonicsParams.orientation = listenerCoordinates;
301-
ambisonicsParams.binaural = numChannelsOut == 2 && (effect->binaural) ? IPL_TRUE : IPL_FALSE;
301+
ambisonicsParams.binaural = numChannelsOut == 2 && !gHRTFDisabled && (effect->binaural) ? IPL_TRUE : IPL_FALSE;
302302

303303
iplAmbisonicsDecodeEffectApply(effect->ambisonicsEffect, &ambisonicsParams, &effect->reflectionsBuffer, &effect->outBuffer);
304304

unity/src/native/reverb_effect.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK process(UnityAudioEffectState* sta
319319
ambisonicsParams.order = gSimulationSettings.maxOrder;
320320
ambisonicsParams.hrtf = gHRTF[0];
321321
ambisonicsParams.orientation = listenerCoordinates;
322-
ambisonicsParams.binaural = numChannelsOut == 2 && (effect->binaural) ? IPL_TRUE : IPL_FALSE;
322+
ambisonicsParams.binaural = numChannelsOut == 2 && !gHRTFDisabled && (effect->binaural) ? IPL_TRUE : IPL_FALSE;
323323

324324
iplAmbisonicsDecodeEffectApply(effect->ambisonicsEffect, &ambisonicsParams, &effect->reflectionsBuffer, &effect->outBuffer);
325325

unity/src/native/spatialize_effect.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -863,7 +863,7 @@ UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK process(UnityAudioEffectState* sta
863863
if (dot(direction, direction) < 1e-6f)
864864
direction = IPLVector3{ 0.0f, 1.0f, 0.0f };
865865

866-
bool directBinaural = numChannelsOut == 2 && effect->directBinaural;
866+
bool directBinaural = numChannelsOut == 2 && effect->directBinaural && !gHRTFDisabled;
867867
if (directBinaural)
868868
{
869869
IPLBinauralEffectParams binauralParams{};
@@ -925,7 +925,7 @@ UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK process(UnityAudioEffectState* sta
925925
ambisonicsParams.order = gSimulationSettings.maxOrder;
926926
ambisonicsParams.hrtf = gHRTF[0];
927927
ambisonicsParams.orientation = listenerCoordinates;
928-
ambisonicsParams.binaural = numChannelsOut == 2 && (effect->reflectionsBinaural) ? IPL_TRUE : IPL_FALSE;
928+
ambisonicsParams.binaural = numChannelsOut == 2 && !gHRTFDisabled && (effect->reflectionsBinaural) ? IPL_TRUE : IPL_FALSE;
929929

930930
iplAmbisonicsDecodeEffectApply(effect->ambisonicsEffect, &ambisonicsParams, &effect->reflectionsBuffer, &effect->reflectionsSpatializedBuffer);
931931

@@ -943,7 +943,7 @@ UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK process(UnityAudioEffectState* sta
943943

944944
IPLPathEffectParams pathParams = simulationOutputs.pathing;
945945
pathParams.order = gSimulationSettings.maxOrder;
946-
pathParams.binaural = numChannelsOut == 2 && (effect->pathingBinaural) ? IPL_TRUE : IPL_FALSE;
946+
pathParams.binaural = numChannelsOut == 2 && !gHRTFDisabled && (effect->pathingBinaural) ? IPL_TRUE : IPL_FALSE;
947947
pathParams.hrtf = gHRTF[0];
948948
pathParams.listener = listenerCoordinates;
949949

unity/src/native/steamaudio_unity_native.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ std::atomic<bool> gNewPerspectiveCorrectionWritten{ false };
4545
std::atomic<bool> gIsSimulationSettingsValid{ false };
4646
std::atomic<bool> gNewReverbSourceWritten{ false };
4747
std::atomic<bool> gNewReflectionMixerWritten{ false };
48+
std::atomic<bool> gHRTFDisabled{ false };
4849

4950
std::shared_ptr<SourceManager> gSourceManager;
5051

@@ -183,6 +184,11 @@ void UNITY_AUDIODSP_CALLBACK iplUnityRemoveSource(IPLint32 handle)
183184
SteamAudioUnity::gSourceManager->removeSource(handle);
184185
}
185186

187+
void UNITY_AUDIODSP_CALLBACK iplUnitySetHRTFDisabled(bool disabled)
188+
{
189+
SteamAudioUnity::gHRTFDisabled = disabled;
190+
}
191+
186192

187193
namespace SteamAudioUnity {
188194

unity/src/native/steamaudio_unity_native.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ UNITY_AUDIODSP_EXPORT_API IPLint32 UNITY_AUDIODSP_CALLBACK iplUnityAddSource(IPL
7878

7979
UNITY_AUDIODSP_EXPORT_API void UNITY_AUDIODSP_CALLBACK iplUnityRemoveSource(IPLint32 handle);
8080

81+
UNITY_AUDIODSP_EXPORT_API void UNITY_AUDIODSP_CALLBACK iplUnitySetHRTFDisabled(bool disabled);
82+
8183
#endif
8284

8385
}
@@ -102,6 +104,7 @@ extern std::atomic<bool> gNewPerspectiveCorrectionWritten;
102104
extern std::atomic<bool> gIsSimulationSettingsValid;
103105
extern std::atomic<bool> gNewReverbSourceWritten;
104106
extern std::atomic<bool> gNewReflectionMixerWritten;
107+
extern std::atomic<bool> gHRTFDisabled;
105108

106109

107110
// --------------------------------------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)