From 960283cea2c724b73f7cd26ee972a3e5d92c82d0 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Wed, 29 Mar 2023 13:54:33 -0500 Subject: [PATCH 01/38] converted to cmake type build --- .gitignore | 3 +++ CMakeLists.txt | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 CMakeLists.txt diff --git a/.gitignore b/.gitignore index 8cfdfce..ba42bd3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ audio solo.dbg solo.opt + +cmake-* +.idea diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..0badc2a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.16) +set(CMAKE_VERBOSE_MAKEFILE True) +set(CMAKE_BUILD_TYPE RelWithDebInfo) + +project(audio_pipeline VERSION 1.0 LANGUAGES CXX) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +option(ILLIXR_INTEGRATION "" ON) + +set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") +set(CMAKE_CXX_FLAGE_RELEASE "-O3 -DNDEBUG -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb -O3 -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") + +add_executable(solo.opt.exe src/main.cpp) +add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) +include_directories(${CMAKE_INSTALL_PREFIX}/include "${PROJECT_SOURCE_DIR}/include") +include(ExternalProject) +pkg_check_modules(PORTAUDIO portaudio>19) + +if (NOT PORTAUDIO_FOUND) + EXTERNALPROJECT_ADD(PORTAUDIO + GIT_REPOSITORY https://github.com/PortAudio/portaudio.git + GIT_TAG 7e2a33c875c6b2b53a8925959496cc698765621f + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + ) + target_link_libraries(plugin.audio_pipeline portaudio) +else() + target_include_directories(plugin.audio_pipeline ${PORTAUDIO_INCLUDE_DIR}) + target_link_libraries(plugin.audio_pipeline ${PORTAUDIO_LIBRARIES}) +endif() + +EXTERNALPROJECT_ADD(SPATIALAUDIO + GIT_REPOSITORY https://github.com/ILLIXR/libspatialaudio.git + GIT_TAG 77a901e337a63aa981745ab369ccf597834a37a5 + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION} + ) + +target_link_libraries(plugin.audio_pipeline spatialaudio) +target_link_libraries(solo.opt.exe plugin.audio_pipeline pthread) \ No newline at end of file From 42b293625af3cf9685c3cd8a01d4428905cb04fe Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Fri, 14 Apr 2023 12:32:23 -0500 Subject: [PATCH 02/38] added missing include --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0badc2a..e0fe3bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) option(ILLIXR_INTEGRATION "" ON) - +include(FindPkgConfig) set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") set(CMAKE_CXX_FLAGE_RELEASE "-O3 -DNDEBUG -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb -O3 -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") From 74d20a8e6e0667199c4b98ce5f8cf9b1be4d356d Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 18 Apr 2023 14:13:38 -0500 Subject: [PATCH 03/38] moved dependency checking to mail illixr build --- CMakeLists.txt | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e0fe3bf..d8a6482 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) option(ILLIXR_INTEGRATION "" ON) include(FindPkgConfig) + set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") set(CMAKE_CXX_FLAGE_RELEASE "-O3 -DNDEBUG -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb -O3 -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") @@ -15,26 +16,12 @@ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb -O3 -Wall -fPIC -Wno-overloaded-virtua add_executable(solo.opt.exe src/main.cpp) add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include "${PROJECT_SOURCE_DIR}/include") -include(ExternalProject) + pkg_check_modules(PORTAUDIO portaudio>19) -if (NOT PORTAUDIO_FOUND) - EXTERNALPROJECT_ADD(PORTAUDIO - GIT_REPOSITORY https://github.com/PortAudio/portaudio.git - GIT_TAG 7e2a33c875c6b2b53a8925959496cc698765621f - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - ) - target_link_libraries(plugin.audio_pipeline portaudio) -else() - target_include_directories(plugin.audio_pipeline ${PORTAUDIO_INCLUDE_DIR}) - target_link_libraries(plugin.audio_pipeline ${PORTAUDIO_LIBRARIES}) -endif() - -EXTERNALPROJECT_ADD(SPATIALAUDIO - GIT_REPOSITORY https://github.com/ILLIXR/libspatialaudio.git - GIT_TAG 77a901e337a63aa981745ab369ccf597834a37a5 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION} - ) +target_include_directories(plugin.audio_pipeline ${PORTAUDIO_INCLUDE_DIR}) +target_link_libraries(plugin.audio_pipeline ${PORTAUDIO_LIBRARIES}) + target_link_libraries(plugin.audio_pipeline spatialaudio) target_link_libraries(solo.opt.exe plugin.audio_pipeline pthread) \ No newline at end of file From 42a96db3cf9ddc4b3c7cfde3078ce69d56396034 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 18 Apr 2023 14:47:34 -0500 Subject: [PATCH 04/38] better handling of dependencies --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d8a6482..96ca69a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ project(audio_pipeline VERSION 1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -option(ILLIXR_INTEGRATION "" ON) +set(ILLIXR_INTEGRATION ON) include(FindPkgConfig) set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") @@ -22,6 +22,8 @@ pkg_check_modules(PORTAUDIO portaudio>19) target_include_directories(plugin.audio_pipeline ${PORTAUDIO_INCLUDE_DIR}) target_link_libraries(plugin.audio_pipeline ${PORTAUDIO_LIBRARIES}) +pkg_check_modules(SPATIALAUDIO spatialaudio) -target_link_libraries(plugin.audio_pipeline spatialaudio) +target_include_directories(plugin.audio_pipeline ${SPATIAL_INCLUDE_DIR}) +target_link_libraries(plugin.audio_pipeline ${SPATIALAUDIO_LIBRARY}) target_link_libraries(solo.opt.exe plugin.audio_pipeline pthread) \ No newline at end of file From 6e1031e3e9dd9b3b8dc4cbe7c2ee9a82dff680f4 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 18 Apr 2023 14:52:41 -0500 Subject: [PATCH 05/38] fixed package name --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 96ca69a..18d4d8f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ add_executable(solo.opt.exe src/main.cpp) add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include "${PROJECT_SOURCE_DIR}/include") -pkg_check_modules(PORTAUDIO portaudio>19) +pkg_check_modules(PORTAUDIO portaudio-2.0>19) target_include_directories(plugin.audio_pipeline ${PORTAUDIO_INCLUDE_DIR}) target_link_libraries(plugin.audio_pipeline ${PORTAUDIO_LIBRARIES}) From 10981b5436c7da8f5e45f4abba89c2317a0aab54 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 18 Apr 2023 14:53:39 -0500 Subject: [PATCH 06/38] another version update --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 18d4d8f..f72373f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ add_executable(solo.opt.exe src/main.cpp) add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include "${PROJECT_SOURCE_DIR}/include") -pkg_check_modules(PORTAUDIO portaudio-2.0>19) +pkg_check_modules(PORTAUDIO portaudio-2.0>=19) target_include_directories(plugin.audio_pipeline ${PORTAUDIO_INCLUDE_DIR}) target_link_libraries(plugin.audio_pipeline ${PORTAUDIO_LIBRARIES}) From ff3c430f36c5bd8fd89b9f90804a695eedc773d0 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 18 Apr 2023 15:47:21 -0500 Subject: [PATCH 07/38] fixed scope issue in cmake --- CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f72373f..0f3e6b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,11 +19,11 @@ include_directories(${CMAKE_INSTALL_PREFIX}/include "${PROJECT_SOURCE_DIR}/inclu pkg_check_modules(PORTAUDIO portaudio-2.0>=19) -target_include_directories(plugin.audio_pipeline ${PORTAUDIO_INCLUDE_DIR}) -target_link_libraries(plugin.audio_pipeline ${PORTAUDIO_LIBRARIES}) +target_include_directories(plugin.audio_pipeline PRIVATE ${PORTAUDIO_INCLUDE_DIRS}) +target_link_libraries(plugin.audio_pipeline PRIVATE ${PORTAUDIO_LIBRARIES}) pkg_check_modules(SPATIALAUDIO spatialaudio) -target_include_directories(plugin.audio_pipeline ${SPATIAL_INCLUDE_DIR}) -target_link_libraries(plugin.audio_pipeline ${SPATIALAUDIO_LIBRARY}) -target_link_libraries(solo.opt.exe plugin.audio_pipeline pthread) \ No newline at end of file +target_include_directories(plugin.audio_pipeline PRIVATE ${SPATIAL_INCLUDE_DIRS}) +target_link_libraries(plugin.audio_pipeline PRIVATE ${SPATIALAUDIO_LIBRARY}) +target_link_libraries(solo.opt.exe PUBLIC plugin.audio_pipeline pthread) From 6ee5a23a61bbe93b7e3a99adc03fc49bbad7c054 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 18 Apr 2023 15:48:46 -0500 Subject: [PATCH 08/38] fixed include paths --- src/audio.cpp | 2 +- src/sound.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/audio.cpp b/src/audio.cpp index 93985b1..dd505fc 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -4,7 +4,7 @@ #include "audio.h" #ifdef ILLIXR_INTEGRATION -#include "../common/error_util.hpp" +#include "common/error_util.hpp" #endif /// ILLIXR_INTEGRATION std::string get_path() { diff --git a/src/sound.cpp b/src/sound.cpp index f8bf196..8659ccc 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -5,7 +5,7 @@ #include "sound.h" #ifdef ILLIXR_INTEGRATION -#include "../common/error_util.hpp" +#include "common/error_util.hpp" #endif /// ILLIXR_INTEGRATION From f5ae99339c44ddd0a37826d8ccb3c2418e63d39f Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 18 Apr 2023 15:55:29 -0500 Subject: [PATCH 09/38] added ILLIXR root variable for headers --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f3e6b0..0c13296 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,12 +7,13 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(ILLIXR_INTEGRATION ON) +set(ILLIXR_ROOT "" CACHE PATH "Path to ILLIXR headers") include(FindPkgConfig) set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") set(CMAKE_CXX_FLAGE_RELEASE "-O3 -DNDEBUG -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb -O3 -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") - +include_directories(${ILLIXR_ROOT}) add_executable(solo.opt.exe src/main.cpp) add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include "${PROJECT_SOURCE_DIR}/include") From d08ee891dfd99c5c30570aa1c45e5a6dc5db95bc Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 18 Apr 2023 16:00:35 -0500 Subject: [PATCH 10/38] added missing dependency --- CMakeLists.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0c13296..4b6b7d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,18 +13,18 @@ include(FindPkgConfig) set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") set(CMAKE_CXX_FLAGE_RELEASE "-O3 -DNDEBUG -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb -O3 -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") -include_directories(${ILLIXR_ROOT}) -add_executable(solo.opt.exe src/main.cpp) -add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) -include_directories(${CMAKE_INSTALL_PREFIX}/include "${PROJECT_SOURCE_DIR}/include") pkg_check_modules(PORTAUDIO portaudio-2.0>=19) +pkg_check_modules(SPATIALAUDIO spatialaudio) +if(NOT OpenCV_FOUND) + find_package(OpenCV REQUIRED) +endif() -target_include_directories(plugin.audio_pipeline PRIVATE ${PORTAUDIO_INCLUDE_DIRS}) -target_link_libraries(plugin.audio_pipeline PRIVATE ${PORTAUDIO_LIBRARIES}) +add_executable(solo.opt.exe src/main.cpp) +add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) +include_directories(${CMAKE_INSTALL_PREFIX}/include "${PROJECT_SOURCE_DIR}/include" ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}) -pkg_check_modules(SPATIALAUDIO spatialaudio) +target_include_directories(plugin.audio_pipeline PRIVATE ${PORTAUDIO_INCLUDE_DIRS} ${SPATIAL_INCLUDE_DIRS}) +target_link_libraries(plugin.audio_pipeline PRIVATE ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARY} ${OpenCV_LIBRARIES}) -target_include_directories(plugin.audio_pipeline PRIVATE ${SPATIAL_INCLUDE_DIRS}) -target_link_libraries(plugin.audio_pipeline PRIVATE ${SPATIALAUDIO_LIBRARY}) target_link_libraries(solo.opt.exe PUBLIC plugin.audio_pipeline pthread) From 4839681ae773f7eeec1c9b85a080aa8b7b2080fd Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 18 Apr 2023 16:20:56 -0500 Subject: [PATCH 11/38] fixed include paths --- CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b6b7d1..c51372c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,13 +6,13 @@ project(audio_pipeline VERSION 1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(ILLIXR_INTEGRATION ON) -set(ILLIXR_ROOT "" CACHE PATH "Path to ILLIXR headers") include(FindPkgConfig) set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") set(CMAKE_CXX_FLAGE_RELEASE "-O3 -DNDEBUG -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb -O3 -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") +set(ILLIXR_INTEGRATION ON) +set(ILLIXR_ROOT "" CACHE PATH "Path to ILLIXR headers") pkg_check_modules(PORTAUDIO portaudio-2.0>=19) pkg_check_modules(SPATIALAUDIO spatialaudio) @@ -22,9 +22,9 @@ endif() add_executable(solo.opt.exe src/main.cpp) add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) -include_directories(${CMAKE_INSTALL_PREFIX}/include "${PROJECT_SOURCE_DIR}/include" ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}) - -target_include_directories(plugin.audio_pipeline PRIVATE ${PORTAUDIO_INCLUDE_DIRS} ${SPATIAL_INCLUDE_DIRS}) +include_directories("${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}") +message("${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}") +target_include_directories(plugin.audio_pipeline PRIVATE ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) target_link_libraries(plugin.audio_pipeline PRIVATE ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARY} ${OpenCV_LIBRARIES}) target_link_libraries(solo.opt.exe PUBLIC plugin.audio_pipeline pthread) From 40c51b4878485c993d51062fb8ccaaca4698fbd0 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 18 Apr 2023 16:32:41 -0500 Subject: [PATCH 12/38] fixed typo in dirs --- CMakeLists.txt | 4 ++-- include/common | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 120000 include/common diff --git a/CMakeLists.txt b/CMakeLists.txt index c51372c..e9c14c8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,8 +22,8 @@ endif() add_executable(solo.opt.exe src/main.cpp) add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) -include_directories("${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}") -message("${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}") +include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}) + target_include_directories(plugin.audio_pipeline PRIVATE ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) target_link_libraries(plugin.audio_pipeline PRIVATE ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARY} ${OpenCV_LIBRARIES}) diff --git a/include/common b/include/common deleted file mode 120000 index 60d3b0a..0000000 --- a/include/common +++ /dev/null @@ -1 +0,0 @@ -../common \ No newline at end of file From a6f419c6290fb2e5de4789bf62dabe3143b494d6 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Wed, 19 Apr 2023 13:06:39 -0500 Subject: [PATCH 13/38] fixed scope issue and variable name --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e9c14c8..40f26ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,7 @@ add_executable(solo.opt.exe src/main.cpp) add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}) -target_include_directories(plugin.audio_pipeline PRIVATE ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) -target_link_libraries(plugin.audio_pipeline PRIVATE ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARY} ${OpenCV_LIBRARIES}) +target_include_directories(plugin.audio_pipeline PUBLIC ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) +target_link_libraries(plugin.audio_pipeline PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} ${OpenCV_LIBRARIES}) target_link_libraries(solo.opt.exe PUBLIC plugin.audio_pipeline pthread) From 61032abb8a2e9e75cb1e1bb16e236c106a42db51 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Thu, 20 Apr 2023 13:25:19 -0500 Subject: [PATCH 14/38] added install tagets --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 40f26ad..2b52a59 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,3 +28,6 @@ target_include_directories(plugin.audio_pipeline PUBLIC ${PORTAUDIO_INCLUDE_DIRS target_link_libraries(plugin.audio_pipeline PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} ${OpenCV_LIBRARIES}) target_link_libraries(solo.opt.exe PUBLIC plugin.audio_pipeline pthread) + +install(TARGETS plugin.audio_pipeline DESTINATION lib) +install(TARGETS solo.opt.exe DESTINATION bin) From bcdd8bf1bcd661775f3395f2f7500e86e59fcfff Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Mon, 1 May 2023 14:20:36 -0500 Subject: [PATCH 15/38] updates for centos --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b52a59..7565f4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,10 +16,12 @@ set(ILLIXR_ROOT "" CACHE PATH "Path to ILLIXR headers") pkg_check_modules(PORTAUDIO portaudio-2.0>=19) pkg_check_modules(SPATIALAUDIO spatialaudio) -if(NOT OpenCV_FOUND) + +if(DEFINED INTERNAL_OPENCV) + find_package(OpenCV REQUIRED PATHS ${INTERNAL_OPENCV} NO_DEFAULT_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_PACKAGE_REGISTRY NO_CMAKE_SYSTEM_PATH NO_CMAKE_SYSTEM_PACKAGE_REGISTRY) +else() find_package(OpenCV REQUIRED) endif() - add_executable(solo.opt.exe src/main.cpp) add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}) From 147989c54391a4320c6b779d5df0aaa747ad348c Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Tue, 2 May 2023 10:05:26 -0500 Subject: [PATCH 16/38] check --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7565f4c..b9cc196 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,7 @@ pkg_check_modules(PORTAUDIO portaudio-2.0>=19) pkg_check_modules(SPATIALAUDIO spatialaudio) if(DEFINED INTERNAL_OPENCV) + message("USING INTERNAL ${INTERNAL_OPENCV}") find_package(OpenCV REQUIRED PATHS ${INTERNAL_OPENCV} NO_DEFAULT_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_PACKAGE_REGISTRY NO_CMAKE_SYSTEM_PATH NO_CMAKE_SYSTEM_PACKAGE_REGISTRY) else() find_package(OpenCV REQUIRED) From 604c6ec9fedb715fa7014347a6b3a1cbcb121d8f Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Thu, 4 May 2023 17:04:37 -0500 Subject: [PATCH 17/38] added build suffix to library name --- CMakeLists.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b9cc196..12f25f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,14 +23,14 @@ if(DEFINED INTERNAL_OPENCV) else() find_package(OpenCV REQUIRED) endif() -add_executable(solo.opt.exe src/main.cpp) -add_library(plugin.audio_pipeline SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) +add_executable(solo${ILLIXR_BUILD_SUFFIX}.exe src/main.cpp) +add_library(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}) -target_include_directories(plugin.audio_pipeline PUBLIC ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) -target_link_libraries(plugin.audio_pipeline PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} ${OpenCV_LIBRARIES}) +target_include_directories(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) +target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} ${OpenCV_LIBRARIES}) -target_link_libraries(solo.opt.exe PUBLIC plugin.audio_pipeline pthread) +target_link_libraries(solo${ILLIXR_BUILD_SUFFIX}.exe PUBLIC plugin.audio_pipeline pthread) -install(TARGETS plugin.audio_pipeline DESTINATION lib) -install(TARGETS solo.opt.exe DESTINATION bin) +install(TARGETS plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} DESTINATION lib) +install(TARGETS solo${ILLIXR_BUILD_SUFFIX}.exe DESTINATION bin) From ca8f56f2e4c77d07aa9afd0fc6c38f21e0fb7416 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Fri, 5 May 2023 14:10:49 -0500 Subject: [PATCH 18/38] fixed incorrect naming --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 12f25f6..2c6298a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/includ target_include_directories(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} ${OpenCV_LIBRARIES}) -target_link_libraries(solo${ILLIXR_BUILD_SUFFIX}.exe PUBLIC plugin.audio_pipeline pthread) +target_link_libraries(solo${ILLIXR_BUILD_SUFFIX}.exe PUBLIC plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} pthread) install(TARGETS plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} DESTINATION lib) install(TARGETS solo${ILLIXR_BUILD_SUFFIX}.exe DESTINATION bin) From f76ccfb934709c246660de8244f8a91ad1064ef4 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Thu, 11 May 2023 14:52:30 -0500 Subject: [PATCH 19/38] removed un-needed code, added install of sample files --- CMakeLists.txt | 7 +++++-- libspatialaudio | 1 - portaudio | 1 - src/audio.cpp | 15 +++++++++------ 4 files changed, 14 insertions(+), 10 deletions(-) delete mode 160000 libspatialaudio delete mode 160000 portaudio diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c6298a..ccc16ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,5 @@ cmake_minimum_required(VERSION 3.16) set(CMAKE_VERBOSE_MAKEFILE True) -set(CMAKE_BUILD_TYPE RelWithDebInfo) project(audio_pipeline VERSION 1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) @@ -26,7 +25,9 @@ endif() add_executable(solo${ILLIXR_BUILD_SUFFIX}.exe src/main.cpp) add_library(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}) - +if(ILLIXR_INTEGRATION) + target_compile_definitions(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC -DAUDIO_SAMPLES=\"${CMAKE_INSTALL_PREFIX}/etc/audio_pipeline\") +endif() target_include_directories(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} ${OpenCV_LIBRARIES}) @@ -34,3 +35,5 @@ target_link_libraries(solo${ILLIXR_BUILD_SUFFIX}.exe PUBLIC plugin.audio_pipelin install(TARGETS plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} DESTINATION lib) install(TARGETS solo${ILLIXR_BUILD_SUFFIX}.exe DESTINATION bin) +install(DIRECTORY ${CMAKE_SOURCE_DIR}/samples + DESTINATION etc/audio_pipeline) diff --git a/libspatialaudio b/libspatialaudio deleted file mode 160000 index 77a901e..0000000 --- a/libspatialaudio +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 77a901e337a63aa981745ab369ccf597834a37a5 diff --git a/portaudio b/portaudio deleted file mode 160000 index 7e2a33c..0000000 --- a/portaudio +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7e2a33c875c6b2b53a8925959496cc698765621f diff --git a/src/audio.cpp b/src/audio.cpp index dd505fc..2edc6d6 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -5,16 +5,19 @@ #ifdef ILLIXR_INTEGRATION #include "common/error_util.hpp" +#include #endif /// ILLIXR_INTEGRATION std::string get_path() { #ifdef ILLIXR_INTEGRATION - const char* AUDIO_ROOT_c_str = std::getenv("AUDIO_ROOT"); - if (!AUDIO_ROOT_c_str) { - ILLIXR::abort("Please define AUDIO_ROOT"); - } - std::string AUDIO_ROOT = std::string{AUDIO_ROOT_c_str}; - return AUDIO_ROOT + "samples/"; + std::string path = std::string{AUDIO_SAMPLES} + "/samples"; + if(std::filesystem::is_directory(path)) + return path; + const char* AUDIO_ROOT = std::getenv("AUDIO_ROOT"); + if (!AUDIO_ROOT) + ILLIXR::abort("Ausio samples not found, please define AUDIO_ROOT"); + + return std::string{AUDIO_ROOT} + "/samples/"; #else return "samples/"; #endif /// ILLIXR_INTEGRATION From bb3e4a7d85e47ae71db05deb9d4d38ea4bb15eeb Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Thu, 11 May 2023 15:16:42 -0500 Subject: [PATCH 20/38] updated compile definitions --- CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ccc16ec..83d1bb2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,10 +7,11 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) include(FindPkgConfig) -set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") -set(CMAKE_CXX_FLAGE_RELEASE "-O3 -DNDEBUG -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb -O3 -Wall -fPIC -Wno-overloaded-virtual -DILLIXR_INTEGRATION=${ILLIXR_INTEGRATION}") +set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -Wall -fPIC -Wno-overloaded-virtual") +set(CMAKE_CXX_FLAGE_RELEASE "-O3 -DNDEBUG -Wall -fPIC -Wno-overloaded-virtual") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb -O3 -Wall -fPIC -Wno-overloaded-virtual") set(ILLIXR_INTEGRATION ON) +add_definitions(-DILLIXR_INTEGRATION) set(ILLIXR_ROOT "" CACHE PATH "Path to ILLIXR headers") pkg_check_modules(PORTAUDIO portaudio-2.0>=19) From 714c3541378ece7b481804e4a504e23b49c2bdbe Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Wed, 17 May 2023 09:30:06 -0500 Subject: [PATCH 21/38] updated ILLIXR code structure --- src/audio.cpp | 2 +- src/audio_component.cpp | 10 +++++----- src/sound.cpp | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/audio.cpp b/src/audio.cpp index 2edc6d6..f57d5c6 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -4,7 +4,7 @@ #include "audio.h" #ifdef ILLIXR_INTEGRATION -#include "common/error_util.hpp" +#include "illixr/error_util.hpp" #include #endif /// ILLIXR_INTEGRATION diff --git a/src/audio_component.cpp b/src/audio_component.cpp index 78e34cf..e0b9bcc 100644 --- a/src/audio_component.cpp +++ b/src/audio_component.cpp @@ -1,11 +1,11 @@ #include #include -#include "common/data_format.hpp" -#include "common/phonebook.hpp" -#include "common/relative_clock.hpp" -#include "common/switchboard.hpp" -#include "common/threadloop.hpp" +#include "illixr/data_format.hpp" +#include "illixr/phonebook.hpp" +#include "illixr/relative_clock.hpp" +#include "illixr/switchboard.hpp" +#include "illixr/threadloop.hpp" #include diff --git a/src/sound.cpp b/src/sound.cpp index 8659ccc..36bd071 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -5,7 +5,7 @@ #include "sound.h" #ifdef ILLIXR_INTEGRATION -#include "common/error_util.hpp" +#include "illixr/error_util.hpp" #endif /// ILLIXR_INTEGRATION From 0aad861a29371b1464d6c9415593187208942049 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Wed, 23 Aug 2023 13:11:55 -0500 Subject: [PATCH 22/38] removed un-needed openCV dependency --- CMakeLists.txt | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 83d1bb2..fedad20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,20 +17,14 @@ set(ILLIXR_ROOT "" CACHE PATH "Path to ILLIXR headers") pkg_check_modules(PORTAUDIO portaudio-2.0>=19) pkg_check_modules(SPATIALAUDIO spatialaudio) -if(DEFINED INTERNAL_OPENCV) - message("USING INTERNAL ${INTERNAL_OPENCV}") - find_package(OpenCV REQUIRED PATHS ${INTERNAL_OPENCV} NO_DEFAULT_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_PACKAGE_REGISTRY NO_CMAKE_SYSTEM_PATH NO_CMAKE_SYSTEM_PACKAGE_REGISTRY) -else() - find_package(OpenCV REQUIRED) -endif() add_executable(solo${ILLIXR_BUILD_SUFFIX}.exe src/main.cpp) add_library(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) -include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT} ${OpenCV_INCLUDE_DIRS}) +include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT}) if(ILLIXR_INTEGRATION) target_compile_definitions(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC -DAUDIO_SAMPLES=\"${CMAKE_INSTALL_PREFIX}/etc/audio_pipeline\") endif() target_include_directories(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) -target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} ${OpenCV_LIBRARIES}) +target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES}) target_link_libraries(solo${ILLIXR_BUILD_SUFFIX}.exe PUBLIC plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} pthread) From ebc2f04d0eca0792795db2c675c58fbdae42ab5f Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Thu, 14 Sep 2023 10:13:09 -0500 Subject: [PATCH 23/38] added spdlog dependency --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fedad20..b4110d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ set(ILLIXR_ROOT "" CACHE PATH "Path to ILLIXR headers") pkg_check_modules(PORTAUDIO portaudio-2.0>=19) pkg_check_modules(SPATIALAUDIO spatialaudio) - +find_package(spdlog REQUIRED) add_executable(solo${ILLIXR_BUILD_SUFFIX}.exe src/main.cpp) add_library(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT}) @@ -24,9 +24,9 @@ if(ILLIXR_INTEGRATION) target_compile_definitions(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC -DAUDIO_SAMPLES=\"${CMAKE_INSTALL_PREFIX}/etc/audio_pipeline\") endif() target_include_directories(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) -target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES}) +target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} spdlog::spdlog) -target_link_libraries(solo${ILLIXR_BUILD_SUFFIX}.exe PUBLIC plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} pthread) +target_link_libraries(solo${ILLIXR_BUILD_SUFFIX}.exe PUBLIC plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} pthread spdlog::spdlog) install(TARGETS plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} DESTINATION lib) install(TARGETS solo${ILLIXR_BUILD_SUFFIX}.exe DESTINATION bin) From ec108fc0471663f7f8bba47fe00deb7d708f5e3a Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Wed, 27 Mar 2024 12:31:06 -0500 Subject: [PATCH 24/38] added sqlite3 library to link --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b4110d5..e87a969 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,8 @@ set(ILLIXR_ROOT "" CACHE PATH "Path to ILLIXR headers") pkg_check_modules(PORTAUDIO portaudio-2.0>=19) pkg_check_modules(SPATIALAUDIO spatialaudio) find_package(spdlog REQUIRED) +find_package(SQLite3 REQUIRED) + add_executable(solo${ILLIXR_BUILD_SUFFIX}.exe src/main.cpp) add_library(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT}) @@ -24,7 +26,7 @@ if(ILLIXR_INTEGRATION) target_compile_definitions(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC -DAUDIO_SAMPLES=\"${CMAKE_INSTALL_PREFIX}/etc/audio_pipeline\") endif() target_include_directories(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) -target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} spdlog::spdlog) +target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} spdlog::spdlog sqlite3) target_link_libraries(solo${ILLIXR_BUILD_SUFFIX}.exe PUBLIC plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} pthread spdlog::spdlog) From c6ee970a66e834ef7c57d675dbcd30b5dcc21259 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Fri, 22 Nov 2024 13:17:50 -0600 Subject: [PATCH 25/38] converted to switchboard interface for env vars --- src/audio.cpp | 12 ++++++++++-- src/audio_component.cpp | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/audio.cpp b/src/audio.cpp index f57d5c6..fdc2634 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -5,11 +5,12 @@ #ifdef ILLIXR_INTEGRATION #include "illixr/error_util.hpp" +#include "illixr/switchboard.hpp" #include #endif /// ILLIXR_INTEGRATION -std::string get_path() { #ifdef ILLIXR_INTEGRATION +std::string get_path(const std::shared_ptr sb) { std::string path = std::string{AUDIO_SAMPLES} + "/samples"; if(std::filesystem::is_directory(path)) return path; @@ -19,6 +20,7 @@ std::string get_path() { return std::string{AUDIO_ROOT} + "/samples/"; #else +std::string get_path() { return "samples/"; #endif /// ILLIXR_INTEGRATION } @@ -56,8 +58,11 @@ ILLIXR_AUDIO::ABAudio::ABAudio(std::string outputFilePath, ProcessType procTypeI num_blocks_left = 0; } - +#ifdef ILLIXR_INTEGRATION +void ILLIXR_AUDIO::ABAudio::loadSource(const std::shared_ptr sb){ +#else void ILLIXR_AUDIO::ABAudio::loadSource(){ +#endif #ifndef NDEBUG /// Temporarily clear errno here if set (until merged with #225) if (errno > 0) { @@ -66,6 +71,9 @@ void ILLIXR_AUDIO::ABAudio::loadSource(){ #endif /// NDEBUG /// Add a bunch of sound sources +#ifdef ILLIXR_INTEGRATION + const std::string samples_folder{get_path(sb)}; +#else const std::string samples_folder{get_path()}; if (processType == ILLIXR_AUDIO::ABAudio::ProcessType::FULL) { soundSrcs.emplace_back(samples_folder + "lectureSample.wav", NORDER, true); diff --git a/src/audio_component.cpp b/src/audio_component.cpp index e0b9bcc..2ba3bee 100644 --- a/src/audio_component.cpp +++ b/src/audio_component.cpp @@ -22,7 +22,7 @@ class audio_xcoding : public threadloop , xcoder{"", encoding ? ILLIXR_AUDIO::ABAudio::ProcessType::ENCODE : ILLIXR_AUDIO::ABAudio::ProcessType::DECODE} , encoding_{encoding} { - xcoder.loadSource(); + xcoder.loadSource(_m_sb); } virtual void _p_thread_setup() override { From a152baa7d046e6b3bfed9e783e423da0b3f8dc8e Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Fri, 22 Nov 2024 13:41:39 -0600 Subject: [PATCH 26/38] fixed unclosed endif --- src/audio.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/audio.cpp b/src/audio.cpp index fdc2634..2bb66fe 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -75,6 +75,7 @@ void ILLIXR_AUDIO::ABAudio::loadSource(){ const std::string samples_folder{get_path(sb)}; #else const std::string samples_folder{get_path()}; +#endif if (processType == ILLIXR_AUDIO::ABAudio::ProcessType::FULL) { soundSrcs.emplace_back(samples_folder + "lectureSample.wav", NORDER, true); soundSrcs.back().setSrcPos({ From e1302d1d55c4c20c87221b458cd198e36c6ad3e9 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Fri, 22 Nov 2024 13:45:07 -0600 Subject: [PATCH 27/38] added missing namespace --- src/audio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/audio.cpp b/src/audio.cpp index 2bb66fe..1336620 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -10,7 +10,7 @@ #endif /// ILLIXR_INTEGRATION #ifdef ILLIXR_INTEGRATION -std::string get_path(const std::shared_ptr sb) { +std::string get_path(const std::shared_ptr sb) { std::string path = std::string{AUDIO_SAMPLES} + "/samples"; if(std::filesystem::is_directory(path)) return path; From b22643c2e102add5c87e452a0406b066dfe6e103 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Fri, 22 Nov 2024 13:48:28 -0600 Subject: [PATCH 28/38] another namespace issue --- src/audio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/audio.cpp b/src/audio.cpp index 1336620..ce89966 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -59,7 +59,7 @@ ILLIXR_AUDIO::ABAudio::ABAudio(std::string outputFilePath, ProcessType procTypeI } #ifdef ILLIXR_INTEGRATION -void ILLIXR_AUDIO::ABAudio::loadSource(const std::shared_ptr sb){ +void ILLIXR_AUDIO::ABAudio::loadSource(const std::shared_ptr sb){ #else void ILLIXR_AUDIO::ABAudio::loadSource(){ #endif From 42bb6efa9ea295f2487c789ec5e2b17647bc77f4 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Fri, 22 Nov 2024 13:51:10 -0600 Subject: [PATCH 29/38] fixed signature issue --- include/audio.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/audio.h b/include/audio.h index d40fd1d..2818588 100644 --- a/include/audio.h +++ b/include/audio.h @@ -6,6 +6,9 @@ #include #include #include +#ifdef ILLIXR_INTEGRATION +#include "illixr/switchboard.hpp" +#endif namespace ILLIXR_AUDIO{ class ABAudio{ @@ -21,7 +24,11 @@ namespace ILLIXR_AUDIO{ // Process a block (1024) samples of sound void processBlock(); // Load sound source files (predefined) +#ifdef ILLIXR_INTEGRATION + void loadSource(const std::shared_ptr sb); +#else void loadSource(); +#endif // Buffer of most recent processed block for fast copying to audio buffer short mostRecentBlockL[BLOCK_SIZE]; From 89b2c8c558ea336efabd54c4f91007c77f1fb839 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Fri, 22 Nov 2024 14:03:01 -0600 Subject: [PATCH 30/38] fixed up some errors --- CMakeLists.txt | 4 ++-- include/audio.h | 2 +- src/audio.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e87a969..bc37d14 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,8 +14,8 @@ set(ILLIXR_INTEGRATION ON) add_definitions(-DILLIXR_INTEGRATION) set(ILLIXR_ROOT "" CACHE PATH "Path to ILLIXR headers") -pkg_check_modules(PORTAUDIO portaudio-2.0>=19) -pkg_check_modules(SPATIALAUDIO spatialaudio) +pkg_check_modules(PORTAUDIO REQUIRED portaudio-2.0>=19) +pkg_check_modules(SPATIALAUDIO REQUIRED spatialaudio) find_package(spdlog REQUIRED) find_package(SQLite3 REQUIRED) diff --git a/include/audio.h b/include/audio.h index 2818588..1cb4a9e 100644 --- a/include/audio.h +++ b/include/audio.h @@ -25,7 +25,7 @@ namespace ILLIXR_AUDIO{ void processBlock(); // Load sound source files (predefined) #ifdef ILLIXR_INTEGRATION - void loadSource(const std::shared_ptr sb); + void loadSource(const std::shared_ptr& sb); #else void loadSource(); #endif diff --git a/src/audio.cpp b/src/audio.cpp index ce89966..2c54c99 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -10,7 +10,7 @@ #endif /// ILLIXR_INTEGRATION #ifdef ILLIXR_INTEGRATION -std::string get_path(const std::shared_ptr sb) { +std::string get_path(const std::shared_ptr& sb) { std::string path = std::string{AUDIO_SAMPLES} + "/samples"; if(std::filesystem::is_directory(path)) return path; @@ -59,7 +59,7 @@ ILLIXR_AUDIO::ABAudio::ABAudio(std::string outputFilePath, ProcessType procTypeI } #ifdef ILLIXR_INTEGRATION -void ILLIXR_AUDIO::ABAudio::loadSource(const std::shared_ptr sb){ +void ILLIXR_AUDIO::ABAudio::loadSource(const std::shared_ptr& sb){ #else void ILLIXR_AUDIO::ABAudio::loadSource(){ #endif From b832dc019ae31993842218dd3c3a70c677307491 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Fri, 22 Nov 2024 14:12:37 -0600 Subject: [PATCH 31/38] bug fixes --- src/audio.cpp | 27 ++++++++++++++++----------- src/main.cpp | 3 ++- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/audio.cpp b/src/audio.cpp index 2c54c99..a4802d3 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -11,18 +11,23 @@ #ifdef ILLIXR_INTEGRATION std::string get_path(const std::shared_ptr& sb) { - std::string path = std::string{AUDIO_SAMPLES} + "/samples"; - if(std::filesystem::is_directory(path)) - return path; - const char* AUDIO_ROOT = std::getenv("AUDIO_ROOT"); - if (!AUDIO_ROOT) - ILLIXR::abort("Ausio samples not found, please define AUDIO_ROOT"); - - return std::string{AUDIO_ROOT} + "/samples/"; + if(sb) { + std::string path = std::string{AUDIO_SAMPLES} + "/samples"; + if (std::filesystem::is_directory(path)) + return path; + const char *AUDIO_ROOT = std::getenv("AUDIO_ROOT"); + if (!AUDIO_ROOT) + ILLIXR::abort("Ausio samples not found, please define AUDIO_ROOT"); + + return std::string{AUDIO_ROOT} + "/samples/"; + } else { #else -std::string get_path() { - return "samples/"; -#endif /// ILLIXR_INTEGRATION + std::string get_path() { +#endif + return "samples/"; +#ifdef ILLIXR_INTEGRATION + } +#endif } ILLIXR_AUDIO::ABAudio::ABAudio(std::string outputFilePath, ProcessType procTypeIn) diff --git a/src/main.cpp b/src/main.cpp index 3318bf8..7169ba3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include "illixr/switchboard.hpp" int main(int argc, char const *argv[]) { @@ -24,7 +25,7 @@ int main(int argc, char const *argv[]) } ABAudio audio("output.wav", procType); - audio.loadSource(); + audio.loadSource(std::make_shared(nullptr)); audio.num_blocks_left = numBlocks; // Launch realtime audio thread for audio processing From 5aaf2e73b0cb3bca76dee3c1fff83686b7c37910 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Fri, 31 Jan 2025 14:31:48 -0600 Subject: [PATCH 32/38] remove submodules and removed ifdef --- .gitmodules | 6 ------ src/audio.cpp | 2 -- 2 files changed, 8 deletions(-) delete mode 100644 .gitmodules diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index f06b4b4..0000000 --- a/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "libspatialaudio"] - path = libspatialaudio - url = https://github.com/ILLIXR/libspatialaudio.git -[submodule "portaudio"] - path = portaudio - url = https://github.com/PortAudio/portaudio.git diff --git a/src/audio.cpp b/src/audio.cpp index a4802d3..25abf06 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -68,12 +68,10 @@ void ILLIXR_AUDIO::ABAudio::loadSource(const std::shared_ptr 0) { errno = 0; } -#endif /// NDEBUG /// Add a bunch of sound sources #ifdef ILLIXR_INTEGRATION From e83f2428d3565fcdbb64a20957959c4e6c136b5f Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Mon, 3 Feb 2025 18:00:40 -0600 Subject: [PATCH 33/38] updated for changes in switchboard --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bc37d14..c083a1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,12 @@ pkg_check_modules(SPATIALAUDIO REQUIRED spatialaudio) find_package(spdlog REQUIRED) find_package(SQLite3 REQUIRED) +if (CMAKE_VERSION VERSION_LESS "3.30.0") + find_package(Boost REQUIRED COMPONENTS filesystem serialization iostreams) +else() + find_package(Boost REQUIRED COMPONENTS filesystem serialization iostreams CONFIG) +endif() + add_executable(solo${ILLIXR_BUILD_SUFFIX}.exe src/main.cpp) add_library(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT}) @@ -28,7 +34,7 @@ endif() target_include_directories(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} spdlog::spdlog sqlite3) -target_link_libraries(solo${ILLIXR_BUILD_SUFFIX}.exe PUBLIC plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} pthread spdlog::spdlog) +target_link_libraries(solo${ILLIXR_BUILD_SUFFIX}.exe PUBLIC plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} pthread spdlog::spdlog Boost::serialization) install(TARGETS plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} DESTINATION lib) install(TARGETS solo${ILLIXR_BUILD_SUFFIX}.exe DESTINATION bin) From d7ffea367caf6c0644cc3d33cf68ce4090a2e7a5 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Wed, 5 Feb 2025 15:49:24 -0600 Subject: [PATCH 34/38] fix for updates from ILLIXR --- src/audio_component.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/audio_component.cpp b/src/audio_component.cpp index 2ba3bee..e236d20 100644 --- a/src/audio_component.cpp +++ b/src/audio_component.cpp @@ -16,8 +16,8 @@ class audio_xcoding : public threadloop public: audio_xcoding(phonebook *pb_, bool encoding) : threadloop{encoding ? "audio_encoding" : "audio_decoding", pb_} - , _m_sb{pb->lookup_impl()} - , _m_clock{pb->lookup_impl()} + , _m_sb{pb_->lookup_impl()} + , _m_clock{pb_->lookup_impl()} , _m_pose{_m_sb->get_reader("slow_pose")} , xcoder{"", encoding ? ILLIXR_AUDIO::ABAudio::ProcessType::ENCODE : ILLIXR_AUDIO::ABAudio::ProcessType::DECODE} , encoding_{encoding} @@ -44,11 +44,11 @@ class audio_xcoding : public threadloop private: const std::shared_ptr _m_sb; - const std::shared_ptr _m_clock; + const std::shared_ptr _m_clock; switchboard::reader _m_pose; ILLIXR_AUDIO::ABAudio xcoder; time_point last_time; - static constexpr duration audio_period{freq2period(static_cast(SAMPLERATE) / static_cast(BLOCK_SIZE))}; + static constexpr duration audio_period{freq_to_period(static_cast(SAMPLERATE) / static_cast(BLOCK_SIZE))}; bool encoding_; }; From b8a91f41866d9ed65f065cf2f45c78ddc929167f Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Mon, 17 Feb 2025 09:24:00 -0600 Subject: [PATCH 35/38] updated to match guidelines --- .gitignore | 2 + CMakeLists.txt | 13 ++- include/audio.h | 71 -------------- include/audio.hpp | 75 +++++++++++++++ include/plugin.hpp | 47 +++++++++ include/{realtime.h => realtime.hpp} | 9 +- include/sound.h | 42 --------- include/sound.hpp | 39 ++++++++ src/audio.cpp | 136 ++++++++++++++------------- src/audio_component.cpp | 80 ---------------- src/main.cpp | 28 +++--- src/plugin.cpp | 51 ++++++++++ src/realtime.cpp | 97 ++++++++++--------- src/sound.cpp | 80 ++++++++-------- 14 files changed, 401 insertions(+), 369 deletions(-) delete mode 100644 include/audio.h create mode 100644 include/audio.hpp create mode 100644 include/plugin.hpp rename include/{realtime.h => realtime.hpp} (86%) delete mode 100644 include/sound.h create mode 100644 include/sound.hpp delete mode 100644 src/audio_component.cpp create mode 100644 src/plugin.cpp diff --git a/.gitignore b/.gitignore index ba42bd3..6e26e55 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ solo.opt cmake-* .idea + +build/ diff --git a/CMakeLists.txt b/CMakeLists.txt index c083a1d..994e9fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,11 +26,22 @@ else() endif() add_executable(solo${ILLIXR_BUILD_SUFFIX}.exe src/main.cpp) -add_library(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} SHARED src/audio.cpp src/audio_component.cpp src/sound.cpp src/realtime.cpp) +add_library(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} SHARED + src/audio.cpp + include/audio.hpp + src/plugin.cpp + include/plugin.hpp + src/sound.cpp + include/sound.hpp + src/realtime.cpp + include/realtime.hpp +) include_directories(${CMAKE_INSTALL_PREFIX}/include ${PROJECT_SOURCE_DIR}/include ${ILLIXR_ROOT}) + if(ILLIXR_INTEGRATION) target_compile_definitions(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC -DAUDIO_SAMPLES=\"${CMAKE_INSTALL_PREFIX}/etc/audio_pipeline\") endif() + target_include_directories(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_INCLUDE_DIRS} ${SPATIALAUDIO_INCLUDE_DIRS}) target_link_libraries(plugin.audio_pipeline${ILLIXR_BUILD_SUFFIX} PUBLIC ${PORTAUDIO_LIBRARIES} ${SPATIALAUDIO_LIBRARIES} spdlog::spdlog sqlite3) diff --git a/include/audio.h b/include/audio.h deleted file mode 100644 index 1cb4a9e..0000000 --- a/include/audio.h +++ /dev/null @@ -1,71 +0,0 @@ -#pragma once - -#include "sound.h" -#include -#include -#include -#include -#include -#ifdef ILLIXR_INTEGRATION -#include "illixr/switchboard.hpp" -#endif - -namespace ILLIXR_AUDIO{ - class ABAudio{ - - public: - // Process types - enum class ProcessType { - FULL, // FULL for output wav file - ENCODE, // For profiling, do file reading and encoding without file output - DECODE // For profiling, do ambisonics decoding without file output - }; - ABAudio(std::string outputFilePath, ProcessType processType); - // Process a block (1024) samples of sound - void processBlock(); - // Load sound source files (predefined) -#ifdef ILLIXR_INTEGRATION - void loadSource(const std::shared_ptr& sb); -#else - void loadSource(); -#endif - - // Buffer of most recent processed block for fast copying to audio buffer - short mostRecentBlockL[BLOCK_SIZE]; - short mostRecentBlockR[BLOCK_SIZE]; - bool buffer_ready; - - // Number of blocks left to process before this stream is complete - unsigned long num_blocks_left; - - private: - ProcessType processType; - // a list of sound sources in this audio - std::vector soundSrcs; - // target output file - std::optional outputFile; - // decoder associated with this audio - CAmbisonicBinauralizer decoder; - // ambisonics rotator associated with this audio - CAmbisonicProcessor rotator; - // ambisonics zoomer associated with this audio - CAmbisonicZoomer zoomer; - - int frame = 0; - - // Generate dummy WAV output file header - void generateWAVHeader(); - // Read in data from WAV files and encode into ambisonics - void readNEncode(CBFormat& sumBF); - // Apply rotation and zoom effects to the ambisonics sound field - void rotateNZoom(CBFormat& sumBF); - // Write out a block of samples to the output file - void writeFile(float** resultSample); - - // Abort failed configuration - void configAbort(const std::string_view& compName) const; - - void updateRotation(); - void updateZoom(); - }; -} diff --git a/include/audio.hpp b/include/audio.hpp new file mode 100644 index 0000000..9e3cbcc --- /dev/null +++ b/include/audio.hpp @@ -0,0 +1,75 @@ +#pragma once + +#ifdef ILLIXR_INTEGRATION + +#include "illixr/switchboard.hpp" + +#endif + +#include "sound.hpp" + +#include +#include +#include +#include +#include + +namespace ILLIXR::audio { +class ab_audio { +public: + // Process types + enum class process_type { + FULL, // FULL for output wav file + ENCODE, // For profiling, do file reading and encoding without file output + DECODE // For profiling, do ambisonics decoding without file output + }; + + ab_audio(std::string output_file_path, process_type proc_type_in); + + // Process a block (1024) samples of sound + void process_block(); + + // Load sound source files (predefined) +#ifdef ILLIXR_INTEGRATION + void load_source(const std::shared_ptr &sb); +#else + void load_source(); +#endif + + // Buffer of most recent processed block for fast copying to audio buffer + short most_recent_block_L[BLOCK_SIZE]; + short most_recent_block_R[BLOCK_SIZE]; + bool buffer_ready; + + // Number of blocks left to process before this stream is complete + unsigned long num_blocks_left; + +private: + // Generate dummy WAV output file header + void generate_wav_header(); + + // Read in data from WAV files and encode into ambisonics + void read_and_encode(CBFormat &sum_bf); + + // Apply rotation and zoom effects to the ambisonics sound field + void rotate_and_zoom(CBFormat &sum_bf); + + // Write out a block of samples to the output file + void write_file(float **result_sample); + + // Abort failed configuration + void config_abort(const std::string_view &comp_name) const; + + void update_rotation(); + + void update_zoom(); + + process_type process_type_; + std::vector sound_srcs_; //!< a list of sound sources in this audio + std::optional output_file_; //!< target output file + CAmbisonicBinauralizer decoder_; //!< decoder associated with this audio + CAmbisonicProcessor rotator_; //!< ambisonics rotator associated with this audio + CAmbisonicZoomer zoomer_; //!< ambisonics zoomer associated with this audio + int frame_ = 0; +}; +} diff --git a/include/plugin.hpp b/include/plugin.hpp new file mode 100644 index 0000000..95aa0ba --- /dev/null +++ b/include/plugin.hpp @@ -0,0 +1,47 @@ +#pragma once +#include "audio.hpp" + +#include "illixr/data_format/pose.hpp" +#include "illixr/phonebook.hpp" +#include "illixr/relative_clock.hpp" +#include "illixr/switchboard.hpp" +#include "illixr/threadloop.hpp" + + +namespace ILLIXR { + +class audio_xcoding : public threadloop { +public: + audio_xcoding(phonebook *pb_, bool encoding); + + void _p_thread_setup() override; + + skip_option _p_should_skip() override; + + void _p_one_iteration() override; + +private: + const std::shared_ptr switchboard_; + const std::shared_ptr clock_; + switchboard::reader pose_; + ILLIXR::audio::ab_audio xcoder_; + time_point last_time_; + static constexpr duration audio_period_{ + freq_to_period(static_cast(SAMPLERATE) / static_cast(BLOCK_SIZE))}; + bool encoding_; +}; + +class audio_pipeline : public plugin { +public: + [[maybe_unused]] audio_pipeline(const std::string &name_, phonebook *pb_) + : plugin{name_, pb_}, audio_encoding{pb_, true}, audio_decoding{pb_, false} {} + + void start() override; + + void stop() override; + +private: + audio_xcoding audio_encoding; + audio_xcoding audio_decoding; +}; +} diff --git a/include/realtime.h b/include/realtime.hpp similarity index 86% rename from include/realtime.h rename to include/realtime.hpp index 1f31d40..73002b6 100644 --- a/include/realtime.h +++ b/include/realtime.hpp @@ -3,10 +3,7 @@ * * The realtime audio support requires the PortAudio library. */ - -#ifndef REALTIME_H -#define REALTIME_H - +#pragma once /* * illixr_rt_init * @@ -23,6 +20,4 @@ * This function is blocking and will not return until the audio source is exhausted. * Launch this in an independent thread! */ -void *illixr_rt_init(void *audioObj); - -#endif // REALTIME_H +void *illixr_rt_init(void *audio_obj); diff --git a/include/sound.h b/include/sound.h deleted file mode 100644 index 69797ab..0000000 --- a/include/sound.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -constexpr std::size_t SAMPLERATE {48000U}; -constexpr std::size_t BLOCK_SIZE {512U}; -constexpr std::size_t NORDER {3U}; -constexpr std::size_t NUM_SRCS {16U}; - -#define NUM_CHANNELS (OrderToComponents(NORDER, true)) - -namespace ILLIXR_AUDIO{ - class Sound{ - public: - Sound(std::string srcFile, unsigned nOrder, bool b3D); - // set sound src position - void setSrcPos(const PolarPoint& pos); - // set sound amplitude scale - void setSrcAmp(float ampScale); - // read sound samples from mono 16bit WAV file and encode into ambisonics format - std::weak_ptr readInBFormat(); - private: - // corresponding sound src file - std::fstream srcFile; - // sample buffer HARDCODE - float sample[BLOCK_SIZE]; - // ambisonics format sound buffer - std::shared_ptr BFormat; - // ambisonics encoder, containing format info, position info, etc. - CAmbisonicEncoderDist BEncoder; - // ambisonics position - PolarPoint srcPos; - // amplitude scale to avoid clipping - float amp; - - // Abort failed configuration - void configAbort(const std::string_view& compName) const; - }; -} diff --git a/include/sound.hpp b/include/sound.hpp new file mode 100644 index 0000000..b02a185 --- /dev/null +++ b/include/sound.hpp @@ -0,0 +1,39 @@ +#pragma once + +#include +#include +#include +#include + +constexpr std::size_t SAMPLERATE {48000U}; +constexpr std::size_t BLOCK_SIZE {512U}; +constexpr std::size_t NORDER {3U}; +constexpr std::size_t NUM_SRCS {16U}; + +#define NUM_CHANNELS (OrderToComponents(NORDER, true)) + +namespace ILLIXR::audio{ +class sound{ +public: + sound(std::string src_filename, unsigned n_order, bool b3D); + + // set sound src position + void set_src_pos(const PolarPoint& pos); + + // set sound amplitude scale + [[maybe_unused]] void set_src_amp(float amp_scale); + + // read sound samples from mono 16bit WAV file and encode into ambisonics format + std::weak_ptr read_in_b_format(); +private: + // Abort failed configuration + void config_abort(const std::string_view& comp_name) const; + + std::fstream src_file_; //!< corresponding sound src file + float sample_[BLOCK_SIZE]; //!< sample buffer HARDCODE + std::shared_ptr b_format_; //!< ambisonics format sound buffer + CAmbisonicEncoderDist b_encoder_; //!< ambisonics encoder, containing format info, position info, etc. + PolarPoint src_pos_; //!< ambisonics position + float amp_; //!< amplitude scale to avoid clipping +}; +} diff --git a/src/audio.cpp b/src/audio.cpp index 25abf06..8ba6dab 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -1,14 +1,19 @@ +#include "audio.hpp" + +#ifdef ILLIXR_INTEGRATION +#include "illixr/error_util.hpp" +#include "illixr/switchboard.hpp" +#endif /// ILLIXR_INTEGRATION + #include #include #include -#include "audio.h" #ifdef ILLIXR_INTEGRATION -#include "illixr/error_util.hpp" -#include "illixr/switchboard.hpp" #include #endif /// ILLIXR_INTEGRATION + #ifdef ILLIXR_INTEGRATION std::string get_path(const std::shared_ptr& sb) { if(sb) { @@ -30,33 +35,32 @@ std::string get_path(const std::shared_ptr& sb) { #endif } -ILLIXR_AUDIO::ABAudio::ABAudio(std::string outputFilePath, ProcessType procTypeIn) - : processType {procTypeIn} - , outputFile { - processType == ILLIXR_AUDIO::ABAudio::ProcessType::FULL - ? std::make_optional(outputFilePath, std::ios_base::out | std::ios_base::binary) +ILLIXR::audio::ab_audio::ab_audio(std::string output_file_path, process_type proc_type_in) + : process_type_ {proc_type_in} + , output_file_ { + process_type_ == ILLIXR::audio::ab_audio::process_type::FULL + ? std::make_optional(output_file_path, std::ios_base::out | std::ios_base::binary) : std::nullopt - } -{ - if (processType == ILLIXR_AUDIO::ABAudio::ProcessType::FULL) { - generateWAVHeader(); + } { + if (process_type_ == ILLIXR::audio::ab_audio::process_type::FULL) { + generate_wav_header(); } unsigned int tailLength {0U}; /// Binauralizer as ambisonics decoder - if (!decoder.Configure(NORDER, true, SAMPLERATE, BLOCK_SIZE, tailLength)) { - configAbort("decoder"); + if (!decoder_.Configure(NORDER, true, SAMPLERATE, BLOCK_SIZE, tailLength)) { + config_abort("decoder"); } /// Processor to rotate - if (!rotator.Configure(NORDER, true, BLOCK_SIZE, tailLength)) { - configAbort("rotator"); + if (!rotator_.Configure(NORDER, true, BLOCK_SIZE, tailLength)) { + config_abort("rotator"); } /// Processor to zoom - if (!zoomer.Configure(NORDER, true, tailLength)) { - configAbort("zoomer"); + if (!zoomer_.Configure(NORDER, true, tailLength)) { + config_abort("zoomer"); } buffer_ready = false; @@ -64,9 +68,9 @@ ILLIXR_AUDIO::ABAudio::ABAudio(std::string outputFilePath, ProcessType procTypeI } #ifdef ILLIXR_INTEGRATION -void ILLIXR_AUDIO::ABAudio::loadSource(const std::shared_ptr& sb){ +void ILLIXR::audio::ab_audio::load_source(const std::shared_ptr& sb){ #else -void ILLIXR_AUDIO::ABAudio::loadSource(){ +void ILLIXR::audio::ab_audio::loadSource(){ #endif /// Temporarily clear errno here if set (until merged with #225) if (errno > 0) { @@ -79,16 +83,16 @@ void ILLIXR_AUDIO::ABAudio::loadSource(){ #else const std::string samples_folder{get_path()}; #endif - if (processType == ILLIXR_AUDIO::ABAudio::ProcessType::FULL) { - soundSrcs.emplace_back(samples_folder + "lectureSample.wav", NORDER, true); - soundSrcs.back().setSrcPos({ + if (process_type_ == ILLIXR::audio::ab_audio::process_type::FULL) { + sound_srcs_.emplace_back(samples_folder + "lectureSample.wav", NORDER, true); + sound_srcs_.back().set_src_pos({ .fAzimuth = -0.1f, .fElevation = 3.14f/2, .fDistance = 1 }); - soundSrcs.emplace_back(samples_folder + "radioMusicSample.wav", NORDER, true); - soundSrcs.back().setSrcPos({ + sound_srcs_.emplace_back(samples_folder + "radioMusicSample.wav", NORDER, true); + sound_srcs_.back().set_src_pos({ .fAzimuth = 1.0f, .fElevation = 0.0f, .fDistance = 5 @@ -101,12 +105,12 @@ void ILLIXR_AUDIO::ABAudio::loadSource(){ /// it has not been set /// The path here is broken, we need to specify a relative path like we do in kimera assert(errno == 0); - soundSrcs.emplace_back(samples_folder + "lectureSample.wav", NORDER, true); + sound_srcs_.emplace_back(samples_folder + "lectureSample.wav", NORDER, true); assert(errno == 0); - soundSrcs.back().setSrcPos({ + sound_srcs_.back().set_src_pos({ .fAzimuth = i * -0.1f, - .fElevation = i * 3.14f/2, + .fElevation = i * 3.14f / 2, .fDistance = i * 1.0f }); } @@ -114,7 +118,7 @@ void ILLIXR_AUDIO::ABAudio::loadSource(){ } -void ILLIXR_AUDIO::ABAudio::processBlock() { +void ILLIXR::audio::ab_audio::process_block() { float** resultSample = new float*[2]; resultSample[0] = new float[BLOCK_SIZE]; resultSample[1] = new float[BLOCK_SIZE]; @@ -123,18 +127,18 @@ void ILLIXR_AUDIO::ABAudio::processBlock() { CBFormat sumBF; sumBF.Configure(NORDER, true, BLOCK_SIZE); - if (processType != ILLIXR_AUDIO::ABAudio::ProcessType::DECODE) { - readNEncode(sumBF); + if (process_type_ != ILLIXR::audio::ab_audio::process_type::DECODE) { + read_and_encode(sumBF); } - if (processType != ILLIXR_AUDIO::ABAudio::ProcessType::ENCODE) { + if (process_type_ != ILLIXR::audio::ab_audio::process_type::ENCODE) { /// Processing garbage data if just decoding - rotateNZoom(sumBF); - decoder.Process(&sumBF, resultSample); + rotate_and_zoom(sumBF); + decoder_.Process(&sumBF, resultSample); } - if (processType == ILLIXR_AUDIO::ABAudio::ProcessType::FULL) { - writeFile(resultSample); + if (process_type_ == ILLIXR::audio::ab_audio::process_type::FULL) { + write_file(resultSample); if (num_blocks_left > 0) { num_blocks_left--; } @@ -147,11 +151,11 @@ void ILLIXR_AUDIO::ABAudio::processBlock() { /// Read from WAV files and encode into ambisonics format -void ILLIXR_AUDIO::ABAudio::readNEncode(CBFormat& sumBF) { - for (unsigned int soundIdx = 0U; soundIdx < soundSrcs.size(); ++soundIdx) { +void ILLIXR::audio::ab_audio::read_and_encode(CBFormat& sumBF) { + for (unsigned int soundIdx = 0U; soundIdx < sound_srcs_.size(); ++soundIdx) { /// 'readInBFormat' now returns a weak_ptr, ensuring that we don't access /// or destruct a freed resource - std::weak_ptr tempBF_weak {soundSrcs[soundIdx].readInBFormat()}; + std::weak_ptr tempBF_weak {sound_srcs_[soundIdx].read_in_b_format()}; std::shared_ptr tempBF{tempBF_weak.lock()}; if (tempBF != nullptr) { @@ -162,7 +166,7 @@ void ILLIXR_AUDIO::ABAudio::readNEncode(CBFormat& sumBF) { } } else { static constexpr std::string_view read_fail_msg{ - "[ABAudio] Failed to read/encode. Sound has expired or been destroyed." + "[ab_audio] Failed to read/encode. Sound has expired or been destroyed." }; #ifdef ILLIXR_INTEGRATION ILLIXR::abort(std::string{read_fail_msg}); @@ -176,49 +180,49 @@ void ILLIXR_AUDIO::ABAudio::readNEncode(CBFormat& sumBF) { /// Simple rotation -void ILLIXR_AUDIO::ABAudio::updateRotation() { - frame++; - Orientation head(0,0,1.0*frame/1500*3.14*2); - rotator.SetOrientation(head); - rotator.Refresh(); +void ILLIXR::audio::ab_audio::update_rotation() { + frame_++; + Orientation head(0, 0, 1.0 * frame_ / 1500 * 3.14 * 2); + rotator_.SetOrientation(head); + rotator_.Refresh(); } /// Simple zoom -void ILLIXR_AUDIO::ABAudio::updateZoom() { - frame++; - zoomer.SetZoom(sinf(frame/100)); - zoomer.Refresh(); +void ILLIXR::audio::ab_audio::update_zoom() { + frame_++; + zoomer_.SetZoom(sinf(frame_/100)); + zoomer_.Refresh(); } /// Process some rotation and zoom effects -void ILLIXR_AUDIO::ABAudio::rotateNZoom(CBFormat& sumBF) { - updateRotation(); - rotator.Process(&sumBF, BLOCK_SIZE); - updateZoom(); - zoomer.Process(&sumBF, BLOCK_SIZE); +void ILLIXR::audio::ab_audio::rotate_and_zoom(CBFormat& sumBF) { + update_rotation(); + rotator_.Process(&sumBF, BLOCK_SIZE); + update_zoom(); + zoomer_.Process(&sumBF, BLOCK_SIZE); } -void ILLIXR_AUDIO::ABAudio::writeFile(float** resultSample) { +void ILLIXR::audio::ab_audio::write_file(float** resultSample) { /// Normalize(Clipping), then write into file for (std::size_t sampleIdx = 0U; sampleIdx < BLOCK_SIZE; ++sampleIdx) { resultSample[0][sampleIdx] = std::max(std::min(resultSample[0][sampleIdx], +1.0f), -1.0f); resultSample[1][sampleIdx] = std::max(std::min(resultSample[1][sampleIdx], +1.0f), -1.0f); int16_t tempSample0 = (int16_t)(resultSample[0][sampleIdx]/1.0 * 32767); int16_t tempSample1 = (int16_t)(resultSample[1][sampleIdx]/1.0 * 32767); - outputFile->write((char*)&tempSample0,sizeof(short)); - outputFile->write((char*)&tempSample1,sizeof(short)); + output_file_->write((char*)&tempSample0,sizeof(short)); + output_file_->write((char*)&tempSample1,sizeof(short)); /// Cache written block in object buffer until needed by realtime audio thread - mostRecentBlockL[sampleIdx] = tempSample0; - mostRecentBlockR[sampleIdx] = tempSample1; + most_recent_block_L[sampleIdx] = tempSample0; + most_recent_block_R[sampleIdx] = tempSample1; } } -namespace ILLIXR_AUDIO +namespace ILLIXR::audio { /// NOTE: WAV FILE SIZE is not correct typedef struct __attribute__ ((packed)) WAVHeader_t @@ -240,20 +244,20 @@ namespace ILLIXR_AUDIO } -void ILLIXR_AUDIO::ABAudio::generateWAVHeader() { +void ILLIXR::audio::ab_audio::generate_wav_header() { /// Brute force wav header WAVHeader wavh; - outputFile->write((char*)&wavh, sizeof(WAVHeader)); + output_file_->write((char*)&wavh, sizeof(WAVHeader)); } -void ILLIXR_AUDIO::ABAudio::configAbort(const std::string_view& compName) const +void ILLIXR::audio::ab_audio::config_abort(const std::string_view& comp_name) const { - static constexpr std::string_view cfg_fail_msg{"[ABAudio] Failed to configure "}; + static constexpr std::string_view cfg_fail_msg{"[ab_audio] Failed to configure "}; #ifdef ILLIXR_INTEGRATION - ILLIXR::abort(std::string{cfg_fail_msg} + std::string{compName}); + ILLIXR::abort(std::string{cfg_fail_msg} + std::string{comp_name}); #else - std::cerr << cfg_fail_msg << compName << std::endl; + std::cerr << cfg_fail_msg << comp_name << std::endl; std::abort(); #endif /// ILLIXR_INTEGRATION } diff --git a/src/audio_component.cpp b/src/audio_component.cpp deleted file mode 100644 index e236d20..0000000 --- a/src/audio_component.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include -#include - -#include "illixr/data_format.hpp" -#include "illixr/phonebook.hpp" -#include "illixr/relative_clock.hpp" -#include "illixr/switchboard.hpp" -#include "illixr/threadloop.hpp" - -#include - -using namespace ILLIXR; - -class audio_xcoding : public threadloop -{ -public: - audio_xcoding(phonebook *pb_, bool encoding) - : threadloop{encoding ? "audio_encoding" : "audio_decoding", pb_} - , _m_sb{pb_->lookup_impl()} - , _m_clock{pb_->lookup_impl()} - , _m_pose{_m_sb->get_reader("slow_pose")} - , xcoder{"", encoding ? ILLIXR_AUDIO::ABAudio::ProcessType::ENCODE : ILLIXR_AUDIO::ABAudio::ProcessType::DECODE} - , encoding_{encoding} - { - xcoder.loadSource(_m_sb); - } - - virtual void _p_thread_setup() override { - last_time = _m_clock->now(); - } - - virtual skip_option _p_should_skip() override { - last_time += audio_period; - std::this_thread::sleep_for(last_time - _m_clock->now()); - return skip_option::run; - } - - virtual void _p_one_iteration() override { - if (!encoding_) { - [[maybe_unused]] auto most_recent_pose = _m_pose.get_ro_nullable(); - } - xcoder.processBlock(); - } - -private: - const std::shared_ptr _m_sb; - const std::shared_ptr _m_clock; - switchboard::reader _m_pose; - ILLIXR_AUDIO::ABAudio xcoder; - time_point last_time; - static constexpr duration audio_period{freq_to_period(static_cast(SAMPLERATE) / static_cast(BLOCK_SIZE))}; - bool encoding_; -}; - -class audio_pipeline : public plugin { -public: - audio_pipeline(std::string name_, phonebook *pb_) - : plugin{name_, pb_} - , audio_encoding{pb_, true } - , audio_decoding{pb_, false} - { } - - virtual void start() override { - audio_encoding.start(); - audio_decoding.start(); - plugin::start(); - } - - virtual void stop() override { - audio_encoding.stop(); - audio_decoding.stop(); - plugin::stop(); - } - -private: - audio_xcoding audio_encoding; - audio_xcoding audio_decoding; -}; - -PLUGIN_MAIN(audio_pipeline) diff --git a/src/main.cpp b/src/main.cpp index 7169ba3..1dce50f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,12 +1,14 @@ -#include +#include "illixr/switchboard.hpp" + +#include "audio.hpp" +#include "realtime.hpp" + #include -#include #include -#include "illixr/switchboard.hpp" int main(int argc, char const *argv[]) { - using namespace ILLIXR_AUDIO; + using namespace ILLIXR::audio; if (argc < 2) { std::cout << "Usage: " << argv[0] << " "; @@ -16,27 +18,27 @@ int main(int argc, char const *argv[]) } const int numBlocks = atoi(argv[1]); - ABAudio::ProcessType procType(ABAudio::ProcessType::FULL); + ab_audio::process_type procType(ab_audio::process_type::FULL); if (argc > 2){ if (!strcmp(argv[2], "encode")) - procType = ABAudio::ProcessType::ENCODE; + procType = ab_audio::process_type::ENCODE; else - procType = ABAudio::ProcessType::DECODE; + procType = ab_audio::process_type::DECODE; } - ABAudio audio("output.wav", procType); - audio.loadSource(std::make_shared(nullptr)); + ab_audio audio("output.wav", procType); + audio.load_source(std::make_shared(nullptr)); audio.num_blocks_left = numBlocks; // Launch realtime audio thread for audio processing - if (procType == ABAudio::ProcessType::FULL) { + if (procType == ab_audio::process_type::FULL) { pthread_t rt_audio_thread; - pthread_create(&rt_audio_thread, NULL, illixr_rt_init, (void *)&audio); - pthread_join(rt_audio_thread, NULL); + pthread_create(&rt_audio_thread, nullptr, illixr_rt_init, (void *)&audio); + pthread_join(rt_audio_thread, nullptr); } else { for (int i = 0; i < numBlocks; ++i) { - audio.processBlock(); + audio.process_block(); } } diff --git a/src/plugin.cpp b/src/plugin.cpp new file mode 100644 index 0000000..d952ec4 --- /dev/null +++ b/src/plugin.cpp @@ -0,0 +1,51 @@ +#include "../include/plugin.hpp" + +#include +#include + + +using namespace ILLIXR; + + +audio_xcoding::audio_xcoding(phonebook *pb_, bool encoding) + : threadloop{encoding ? "audio_encoding" : "audio_decoding", pb_}, + switchboard_{pb_->lookup_impl()}, clock_{pb_->lookup_impl()}, + pose_{switchboard_->get_reader("slow_pose")}, xcoder_{"", encoding + ? ILLIXR::audio::ab_audio::process_type::ENCODE + : ILLIXR::audio::ab_audio::process_type::DECODE}, + encoding_{encoding} { + xcoder_.load_source(switchboard_); +} + +void audio_xcoding::_p_thread_setup() { + last_time_ = clock_->now(); +} + +threadloop::skip_option audio_xcoding::_p_should_skip() { + last_time_ += audio_period_; + std::this_thread::sleep_for(last_time_ - clock_->now()); + return skip_option::run; +} + +void audio_xcoding::_p_one_iteration() { + if (!encoding_) { + [[maybe_unused]] auto most_recent_pose = pose_.get_ro_nullable(); + } + xcoder_.process_block(); +} + + +void audio_pipeline::start() { + audio_encoding.start(); + audio_decoding.start(); + plugin::start(); +} + +void audio_pipeline::stop() { + audio_encoding.stop(); + audio_decoding.stop(); + plugin::stop(); +} + + +PLUGIN_MAIN(audio_pipeline) diff --git a/src/realtime.cpp b/src/realtime.cpp index be29188..59c84f5 100644 --- a/src/realtime.cpp +++ b/src/realtime.cpp @@ -1,16 +1,16 @@ -#include -#include -#include -#include -#include -#include "portaudio.h" +#include "sound.hpp" +#include "audio.hpp" + +#include +#include +#include #define SAMPLE_RATE ((SAMPLERATE)) #define AUDIO_FORMAT paInt16 typedef unsigned short sample_t; #define SILENCE ((sample_t)0x00) -using namespace ILLIXR_AUDIO; +using namespace ILLIXR::audio; /* * illixr_rt_cb @@ -20,25 +20,27 @@ using namespace ILLIXR_AUDIO; * When the realtime audio driver requires more buffered data, this callback * method is called. This is where ILLIXR feeds more audio data to the realtime audio engine. */ -static int illixr_rt_cb( const void *inputBuffer, void *outputBuffer, - unsigned long framesPerBuffer, - const PaStreamCallbackTimeInfo* timeInfo, - PaStreamCallbackFlags statusFlags, - void *userData ) { - - sample_t *out = (sample_t*)outputBuffer; - ABAudio *audioObj = (ABAudio *)userData; +static int illixr_rt_cb(const void *input_buffer, void *output_buffer, + unsigned long frames_per_buffer, + const PaStreamCallbackTimeInfo* time_info, + PaStreamCallbackFlags status_flags, + void *user_data ) { + (void) frames_per_buffer; + (void) time_info; + (void) status_flags; + auto *out = (sample_t*)output_buffer; + auto *audio_obj = (ab_audio *)user_data; int i; - (void) inputBuffer; /* Prevent unused variable warnings. */ + (void) input_buffer; /* Prevent unused variable warnings. */ // As this is an interrupt context, lots of data processing is ill-advised. // In future iterations, all processing will be handled in a separate thread with proper // synchronization primatives. - audioObj->processBlock(); + audio_obj->process_block(); for (i = 0; i < BLOCK_SIZE; i++) { - *out++ = audioObj->mostRecentBlockL[i]; - *out++ = audioObj->mostRecentBlockR[i]; + *out++ = audio_obj->most_recent_block_L[i]; + *out++ = audio_obj->most_recent_block_R[i]; } return 0; @@ -46,6 +48,15 @@ static int illixr_rt_cb( const void *inputBuffer, void *outputBuffer, /*******************************************************************/ +void* print_err(const PaError err) { + Pa_Terminate(); + fprintf( stderr, "An error occured while using the portaudio stream\n" ); + fprintf( stderr, "Error number: %d\n", err ); + fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) ); + return (void *)err; + +} + /* * illixr_rt_init * @@ -62,64 +73,56 @@ static int illixr_rt_cb( const void *inputBuffer, void *outputBuffer, * This function is blocking and will not return until the audio source is exhausted. * Launch this in an independent thread! */ -void *illixr_rt_init(void *audioObj) -{ - PaStreamParameters outputParameters; +void *illixr_rt_init(void *audio_obj) { + PaStreamParameters output_parameters; PaStream* stream; PaError err; - PaTime streamOpened; - int i, totalSamps; + PaTime stream_opened; printf("Initializing audio hardware...\n"); err = Pa_Initialize(); if( err != paNoError ) - goto error; + return print_err(err); - outputParameters.device = Pa_GetDefaultOutputDevice(); /* Default output device. */ - if (outputParameters.device == paNoDevice) { - fprintf(stderr,"Error: No default output device.\n"); - goto error; + output_parameters.device = Pa_GetDefaultOutputDevice(); /* Default output device. */ + if (output_parameters.device == paNoDevice) { + fprintf(stderr,"Error: No default output device.\n"); + return print_err(err); } - outputParameters.channelCount = 2; /* Stereo output. */ - outputParameters.sampleFormat = AUDIO_FORMAT; - outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency; - outputParameters.hostApiSpecificStreamInfo = NULL; + output_parameters.channelCount = 2; /* Stereo output. */ + output_parameters.sampleFormat = AUDIO_FORMAT; + output_parameters.suggestedLatency = Pa_GetDeviceInfo( output_parameters.device )->defaultLowOutputLatency; + output_parameters.hostApiSpecificStreamInfo = NULL; err = Pa_OpenStream( &stream, NULL, /* No input. */ - &outputParameters, + &output_parameters, SAMPLE_RATE, BLOCK_SIZE, /* Frames per buffer. */ paClipOff, /* We won't output out of range samples so don't bother clipping them. */ illixr_rt_cb, - audioObj ); + audio_obj); if( err != paNoError ) - goto error; + return print_err(err); - streamOpened = Pa_GetStreamTime( stream ); /* Time in seconds when stream was opened (approx). */ + stream_opened = Pa_GetStreamTime( stream ); /* Time in seconds when stream was opened (approx). */ printf("Launching stream!\n"); err = Pa_StartStream( stream ); if( err != paNoError ) - goto error; + return print_err(err); // Spin until the audio marks itself as being complete - while( ((ABAudio *)audioObj)->num_blocks_left > 0) { - Pa_Sleep(0.25f); + while( ((ab_audio *)audio_obj)->num_blocks_left > 0) { + Pa_Sleep(25); } printf("Stopping stream\n"); err = Pa_CloseStream( stream ); if( err != paNoError ) - goto error; + return print_err(err); Pa_Terminate(); return (void *)err; -error: - Pa_Terminate(); - fprintf( stderr, "An error occured while using the portaudio stream\n" ); - fprintf( stderr, "Error number: %d\n", err ); - fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) ); - return (void *)err; } diff --git a/src/sound.cpp b/src/sound.cpp index 36bd071..aaeeb98 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -1,46 +1,42 @@ -#include -#include -#include -#include -#include "sound.h" +#include "sound.hpp" #ifdef ILLIXR_INTEGRATION #include "illixr/error_util.hpp" #endif /// ILLIXR_INTEGRATION +#include +#include + -ILLIXR_AUDIO::Sound::Sound( - std::string srcFilename, - [[maybe_unused]] unsigned int nOrder, - [[maybe_unused]] bool b3D -) : srcFile{srcFilename, std::fstream::in} - , BFormat{std::make_shared()} - , amp{1.0} -{ +ILLIXR::audio::sound::sound(std::string src_filename, unsigned int n_order, bool b3D) + : src_file_{src_filename, std::fstream::in} + , b_format_{std::make_shared()} + , amp_{1.0} { + (void) b3D; /// NOTE: This is currently only accepts mono channel 16-bit depth WAV file /// TODO: Change brutal read from wav file constexpr std::size_t SRC_FILE_SIZE {44U}; std::byte temp[SRC_FILE_SIZE]; - srcFile.read(reinterpret_cast(temp), sizeof(temp)); + src_file_.read(reinterpret_cast(temp), sizeof(temp)); /// BFormat file initialization - if (!BFormat->Configure(nOrder, true, BLOCK_SIZE)) { - configAbort("BFormat"); + if (!b_format_->Configure(n_order, true, BLOCK_SIZE)) { + config_abort("BFormat"); } - BFormat->Refresh(); + b_format_->Refresh(); /// Encoder initialization - if (!BEncoder.Configure(nOrder, true, SAMPLERATE)) { - configAbort("BEncoder"); + if (!b_encoder_.Configure(n_order, true, SAMPLERATE)) { + config_abort("b_encoder_"); } - BEncoder.Refresh(); + b_encoder_.Refresh(); - srcPos.fAzimuth = 0.0f; - srcPos.fElevation = 0.0f; - srcPos.fDistance = 0.0f; + src_pos_.fAzimuth = 0.0f; + src_pos_.fElevation = 0.0f; + src_pos_.fDistance = 0.0f; - BEncoder.SetPosition(srcPos); - BEncoder.Refresh(); + b_encoder_.SetPosition(src_pos_); + b_encoder_.Refresh(); /// Clear errno, as this constructor is setting the flag (with value 2) /// A temporary fix. @@ -48,43 +44,43 @@ ILLIXR_AUDIO::Sound::Sound( } -void ILLIXR_AUDIO::Sound::setSrcPos(const PolarPoint& pos) { - srcPos.fAzimuth = pos.fAzimuth; - srcPos.fElevation = pos.fElevation; - srcPos.fDistance = pos.fDistance; +void ILLIXR::audio::sound::set_src_pos(const PolarPoint& pos) { + src_pos_.fAzimuth = pos.fAzimuth; + src_pos_.fElevation = pos.fElevation; + src_pos_.fDistance = pos.fDistance; - BEncoder.SetPosition(srcPos); - BEncoder.Refresh(); + b_encoder_.SetPosition(src_pos_); + b_encoder_.Refresh(); } -void ILLIXR_AUDIO::Sound::setSrcAmp(float ampScale) { - amp = ampScale; +[[maybe_unused]] void ILLIXR::audio::sound::set_src_amp(float amp_scale) { + amp_ = amp_scale; } /// TODO: Change brutal read from wav file -std::weak_ptr ILLIXR_AUDIO::Sound::readInBFormat() { +std::weak_ptr ILLIXR::audio::sound::read_in_b_format() { float sampleTemp[BLOCK_SIZE]; - srcFile.read((char*)sampleTemp, BLOCK_SIZE * sizeof(short)); + src_file_.read((char*)sampleTemp, BLOCK_SIZE * sizeof(short)); /// Normalize samples to -1 to 1 float, with amplitude scale constexpr float SAMPLE_DIV {(2 << 14) - 1}; /// 32767.0f == 2^14 - 1 for (std::size_t i = 0U; i < BLOCK_SIZE; ++i) { - sample[i] = amp * (sampleTemp[i] / SAMPLE_DIV); + sample_[i] = amp_ * (sampleTemp[i] / SAMPLE_DIV); } - BEncoder.Process(sample, BLOCK_SIZE, BFormat.get()); - return BFormat; + b_encoder_.Process(sample_, BLOCK_SIZE, b_format_.get()); + return b_format_; } -void ILLIXR_AUDIO::Sound::configAbort(const std::string_view& compName) const +void ILLIXR::audio::sound::config_abort(const std::string_view& comp_name) const { - static constexpr std::string_view cfg_fail_msg{"[Sound] Failed to configure "}; + static constexpr std::string_view cfg_fail_msg{"[sound] Failed to configure "}; #ifdef ILLIXR_INTEGRATION - ILLIXR::abort(std::string{cfg_fail_msg} + std::string{compName}); + ILLIXR::abort(std::string{cfg_fail_msg} + std::string{comp_name}); #else - std::cerr << cfg_fail_msg << compName << std::endl; + std::cerr << cfg_fail_msg << comp_name << std::endl; std::abort(); #endif /// ILLIXR_INTEGRATION } From 0e0630fe77cd8947c4815115119333ff38ae1810 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Mon, 17 Feb 2025 13:25:55 -0600 Subject: [PATCH 36/38] removed abort calls --- src/audio.cpp | 12 +++++------- src/sound.cpp | 6 ++---- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/audio.cpp b/src/audio.cpp index 25abf06..cf88b15 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -17,7 +17,7 @@ std::string get_path(const std::shared_ptr& sb) { return path; const char *AUDIO_ROOT = std::getenv("AUDIO_ROOT"); if (!AUDIO_ROOT) - ILLIXR::abort("Ausio samples not found, please define AUDIO_ROOT"); + throw std::runtime_error("Ausio samples not found, please define AUDIO_ROOT"); return std::string{AUDIO_ROOT} + "/samples/"; } else { @@ -165,10 +165,10 @@ void ILLIXR_AUDIO::ABAudio::readNEncode(CBFormat& sumBF) { "[ABAudio] Failed to read/encode. Sound has expired or been destroyed." }; #ifdef ILLIXR_INTEGRATION - ILLIXR::abort(std::string{read_fail_msg}); + throw std::runtime_error(std::string{read_fail_msg}); #else std::cerr << read_fail_msg << std::endl; - std::abort(); + throw std::runtime_error(std::string{read_fail_msg}); #endif /// ILLIXR_INTEGRATION } } @@ -250,10 +250,8 @@ void ILLIXR_AUDIO::ABAudio::generateWAVHeader() { void ILLIXR_AUDIO::ABAudio::configAbort(const std::string_view& compName) const { static constexpr std::string_view cfg_fail_msg{"[ABAudio] Failed to configure "}; -#ifdef ILLIXR_INTEGRATION - ILLIXR::abort(std::string{cfg_fail_msg} + std::string{compName}); -#else +#ifndef ILLIXR_INTEGRATION std::cerr << cfg_fail_msg << compName << std::endl; - std::abort(); #endif /// ILLIXR_INTEGRATION + throw std::runtime_error(std::string{cfg_fail_msg} + std::string{compName}); } diff --git a/src/sound.cpp b/src/sound.cpp index 36bd071..2a0b542 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -81,10 +81,8 @@ std::weak_ptr ILLIXR_AUDIO::Sound::readInBFormat() { void ILLIXR_AUDIO::Sound::configAbort(const std::string_view& compName) const { static constexpr std::string_view cfg_fail_msg{"[Sound] Failed to configure "}; -#ifdef ILLIXR_INTEGRATION - ILLIXR::abort(std::string{cfg_fail_msg} + std::string{compName}); -#else +#ifndef ILLIXR_INTEGRATION std::cerr << cfg_fail_msg << compName << std::endl; - std::abort(); #endif /// ILLIXR_INTEGRATION + throw std::runtime_error(std::string{cfg_fail_msg} + std::string{compName}); } From 801a5725020e25a92c277b1bcad5302553fd57c2 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Wed, 19 Feb 2025 14:19:48 -0600 Subject: [PATCH 37/38] fix typos --- src/audio.cpp | 2 +- src/sound.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/audio.cpp b/src/audio.cpp index a921e9c..c3910dc 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -257,5 +257,5 @@ void ILLIXR::audio::ab_audio::config_abort(const std::string_view& comp_name) co #ifndef ILLIXR_INTEGRATION std::cerr << cfg_fail_msg << compName << std::endl; #endif /// ILLIXR_INTEGRATION - throw std::runtime_error(std::string{cfg_fail_msg} + std::string{compName}); + throw std::runtime_error(std::string{cfg_fail_msg} + std::string{comp_name}); } diff --git a/src/sound.cpp b/src/sound.cpp index 3edd7fb..c3b3aab 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -80,5 +80,5 @@ void ILLIXR::audio::sound::config_abort(const std::string_view& comp_name) const #ifndef ILLIXR_INTEGRATION std::cerr << cfg_fail_msg << compName << std::endl; #endif /// ILLIXR_INTEGRATION - throw std::runtime_error(std::string{cfg_fail_msg} + std::string{compName}); + throw std::runtime_error(std::string{cfg_fail_msg} + std::string{comp_name}); } From f2603d835005250652634f7f25466e51d1b72892 Mon Sep 17 00:00:00 2001 From: astro-friedel Date: Thu, 27 Feb 2025 11:04:05 -0600 Subject: [PATCH 38/38] updated for changes in ILLIXR --- src/audio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/audio.cpp b/src/audio.cpp index c3910dc..bd37d0c 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -20,7 +20,7 @@ std::string get_path(const std::shared_ptr& sb) { std::string path = std::string{AUDIO_SAMPLES} + "/samples"; if (std::filesystem::is_directory(path)) return path; - const char *AUDIO_ROOT = std::getenv("AUDIO_ROOT"); + const char *AUDIO_ROOT = sb->get_env_char("AUDIO_ROOT"); if (!AUDIO_ROOT) throw std::runtime_error("Ausio samples not found, please define AUDIO_ROOT");