Start phonon spatializer;

This commit is contained in:
bjorn 2021-02-10 13:18:12 -07:00 committed by Bjorn
parent 5d542eb2ea
commit 8bbb092497
7 changed files with 70 additions and 0 deletions

View File

@ -22,6 +22,7 @@ option(LOVR_USE_OCULUS "Enable the LibOVR backend for the headset module (be sur
option(LOVR_USE_VRAPI "Enable the VrApi backend for the headset module" OFF)
option(LOVR_USE_PICO "Enable the Pico backend for the headset module" OFF)
option(LOVR_USE_DESKTOP_HEADSET "Enable the keyboard/mouse backend for the headset module" ON)
option(LOVR_USE_STEAM_AUDIO "Enable the Steam Audio spatializer (be sure to also set LOVR_STEAM_AUDIO_PATH)" OFF)
option(LOVR_USE_OCULUS_AUDIO "Enable the Oculus Audio spatializer (be sure to also set LOVR_OCULUS_AUDIO_PATH)" OFF)
option(LOVR_USE_LINUX_EGL "Use the EGL graphics extension on Linux" OFF)
@ -249,6 +250,14 @@ if(LOVR_ENABLE_THREAD AND NOT (WIN32 OR EMSCRIPTEN))
set(LOVR_PTHREADS Threads::Threads)
endif()
# Steam Audio
if(LOVR_USE_STEAM_AUDIO)
if(NOT LOVR_STEAM_AUDIO_PATH)
message(FATAL_ERROR "LOVR_USE_STEAM_AUDIO requires the LOVR_STEAM_AUDIO_PATH to be set to the location of the Steam Audio folder")
endif()
include_directories("${STEAM_AUDIO_PATH}/include")
endif()
# Oculus Audio
if(LOVR_USE_OCULUS_AUDIO)
if(NOT LOVR_OCULUS_AUDIO_PATH)
@ -349,6 +358,10 @@ if(LOVR_ENABLE_AUDIO)
src/api/l_audio_source.c
)
if(LOVR_USE_STEAM_AUDIO)
target_compile_definitions(lovr PRIVATE LOVR_ENABLE_PHONON)
target_sources(lovr PRIVATE src/modules/audio/spatializer_phonon.c)
endif()
if(LOVR_USE_OCULUS_AUDIO)
target_compile_definitions(lovr PRIVATE LOVR_ENABLE_OCULUS_AUDIO)

View File

@ -13,6 +13,7 @@ SRC += src/core/zip.c
# modules
SRC_@(AUDIO) += src/modules/audio/audio.c
SRC_@(AUDIO) += src/modules/audio/spatializer_simple.c
SRC_@(AUDIO)@(STEAM_AUDIO) += src/modules/audio/spatializer_phonon.c
SRC_@(AUDIO)@(OCULUS_AUDIO) += src/modules/audio/spatializer_oculus.c
SRC_@(DATA) += src/modules/data/*.c
SRC_@(EVENT) += src/modules/event/*.c

View File

@ -51,6 +51,7 @@ CFLAGS_@(WEBXR) += -DLOVR_USE_WEBXR
## Spatializer backends
CFLAGS_@(OCULUS_AUDIO) += -DLOVR_ENABLE_OCULUS_AUDIO
CFLAGS_@(STEAM_AUDIO) += -DLOVR_ENABLE_PHONON
ifeq (@(PLATFORM),)
PLATFORM = @(TUP_PLATFORM)
@ -245,6 +246,12 @@ ifneq (@(CMAKE_DEPS),)
LIB_@(OCULUS_AUDIO)_$(win32) += @(OCULUS_AUDIO_PATH)/Lib/x64/ovraudio64.dll
LIB_@(OCULUS_AUDIO)_$(linux) += @(OCULUS_AUDIO_PATH)/Lib/Linux64/libovraudio64.so
LIB_@(OCULUS_AUDIO)_$(android) += @(OCULUS_AUDIO_PATH)/Lib/Android/arm64-v8a/libovraudio64.so
# Phonon
CFLAGS_@(STEAM_AUDIO) += -I@(STEAM_AUDIO_PATH)/include
LIBS_@(STEAM_AUDIO)_$(win32) += @(STEAM_AUDIO_PATH)/lib/Windows/x64/phonon.dll
LIBS_@(STEAM_AUDIO)_$(linux) += @(STEAM_AUDIO_PATH)/lib/Linux/x64/libphonon.so
LIBS_@(STEAM_AUDIO)_$(android) += @(STEAM_AUDIO_PATH)/lib/Android/x64/libphonon.so
endif
LIBS += $(LIBS_y) $(LIBS_y_y)

View File

@ -174,6 +174,9 @@ static void onCapture(ma_device* device, void* output, const void* input, uint32
static const ma_device_callback_proc callbacks[] = { onPlayback, onCapture };
static Spatializer* spatializers[] = {
#ifdef LOVR_ENABLE_PHONON
&phononSpatializer,
#endif
#ifdef LOVR_ENABLE_OCULUS_AUDIO
&oculusSpatializer,
#endif

View File

@ -24,6 +24,9 @@ typedef struct {
const char* name;
} Spatializer;
#ifdef LOVR_ENABLE_PHONON
extern Spatializer phononSpatializer;
#endif
#ifdef LOVR_ENABLE_OCULUS_AUDIO
extern Spatializer oculusSpatializer;
#endif

View File

@ -0,0 +1,41 @@
#include "spatializer.h"
#include <phonon.h>
bool phonon_init(SpatializerConfig config) {
return false;
}
void phonon_destroy() {
//
}
uint32_t phonon_apply(Source* source, const float* input, float* output, uint32_t frames, uint32_t _frames) {
return 0;
}
uint32_t phonon_tail(float* scratch, float* output, uint32_t frames) {
return 0;
}
void phonon_setListenerPose(float position[4], float orientation[4]) {
//
}
void phonon_sourceCreate(Source* source) {
//
}
void phonon_sourceDestroy(Source* source) {
//
}
Spatializer phononSpatializer = {
.init = phonon_init,
.destroy = phonon_destroy,
.apply = phonon_apply,
.tail = phonon_tail,
.setListenerPose = phonon_setListenerPose,
.sourceCreate = phonon_sourceCreate,
.sourceDestroy = phonon_sourceDestroy,
.name = "phonon"
};

View File

@ -49,6 +49,8 @@ CONFIG_WEBXR=n
CONFIG_OCULUS_PATH=
## Spatializer backends
CONFIG_STEAM_AUDIO=n
CONFIG_STEAM_AUDIO_PATH=
CONFIG_OCULUS_AUDIO=n
CONFIG_OCULUS_AUDIO_PATH=