@@ -699,6 +699,158 @@ target_link_libraries(VXRebalance PRIVATE VxStudioFramework juce::juce_dsp)
699699add_custom_target (VXRebalancePlugin ALL DEPENDS VXRebalance_VST3 )
700700vxstudio_stage_vst3_bundle (VXRebalance_VST3 "VXRebalance" )
701701
702+ juce_add_plugin (VxRebalanceAI
703+ VERSION ${VXSTUDIO_PLUGIN_VERSION_VXREBALANCE}
704+ BUILD_VERSION ${VXSTUDIO_PLUGIN_VERSION_VXREBALANCE}
705+ FORMATS VST3
706+ COMPANY_NAME "VX Suite"
707+ BUNDLE_ID "com.vxstudio.vxrebalanceai"
708+ IS_SYNTH FALSE
709+ NEEDS_MIDI_INPUT FALSE
710+ NEEDS_MIDI_OUTPUT FALSE
711+ IS_MIDI_EFFECT FALSE
712+ PLUGIN_MANUFACTURER_CODE "VXS1"
713+ PLUGIN_CODE "VRAI"
714+ )
715+ target_compile_definitions (VxRebalanceAI PRIVATE
716+ JUCE_VST3_CAN_REPLACE_VST2=0
717+ JUCE_FORCE_USE_LEGACY_PARAM_IDS=0
718+ JUCE_IGNORE_VST3_MISMATCHED_PARAMETER_ID_WARNING=1
719+ JUCE_WEB_BROWSER=0
720+ VXSTUDIO_REBALANCE_AI_VARIANT=1
721+ )
722+ juce_generate_juce_header (VxRebalanceAI )
723+ target_sources (VxRebalanceAI PRIVATE
724+ Source /vxstudio/products/rebalance/VxRebalanceEditor.cpp
725+ Source /vxstudio/products/rebalance/VxRebalanceProcessor.cpp
726+ Source /vxstudio/products/rebalance/ai/OnnxStemgenBackend.cpp
727+ Source /vxstudio/products/rebalance/ai/VxRealtimeStemSplitter.cpp
728+ Source /vxstudio/products/rebalance/dsp/VxRebalanceDsp.cpp
729+ )
730+ target_include_directories (VxRebalanceAI PRIVATE Source )
731+ target_link_libraries (VxRebalanceAI PRIVATE VxStudioFramework juce::juce_dsp )
732+
733+ set (VXSTUDIO_REBALANCE_AI_ORT_DIR "${CMAKE_SOURCE_DIR } /ThirdParty/onnxruntime" )
734+ set (VXSTUDIO_REBALANCE_AI_MODEL_DIR "${CMAKE_SOURCE_DIR } /ThirdParty/stemgenrt/model" )
735+ set (VXSTUDIO_REBALANCE_AI_MODEL_ONNX "${VXSTUDIO_REBALANCE_AI_MODEL_DIR} /model.onnx" )
736+ set (VXSTUDIO_REBALANCE_AI_MODEL_DATA "${VXSTUDIO_REBALANCE_AI_MODEL_DIR} /model.onnx.data" )
737+ find_library (VXSTUDIO_REBALANCE_AI_ONNXRUNTIME_LIBRARY
738+ NAMES onnxruntime
739+ PATHS "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /lib"
740+ NO_DEFAULT_PATH
741+ )
742+ set (VXSTUDIO_REBALANCE_AI_SPLITTER_ENABLED FALSE )
743+ if (VXSTUDIO_REBALANCE_AI_ONNXRUNTIME_LIBRARY
744+ AND EXISTS "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /include"
745+ AND EXISTS "${VXSTUDIO_REBALANCE_AI_MODEL_ONNX} "
746+ AND EXISTS "${VXSTUDIO_REBALANCE_AI_MODEL_DATA} " )
747+ set (VXSTUDIO_REBALANCE_AI_SPLITTER_ENABLED TRUE )
748+ message (STATUS "VxRebalanceAI realtime splitter enabled" )
749+ target_sources (VxRebalanceAI PRIVATE
750+ ThirdParty/stemgenrt/plugin/source/OnnxRuntime.cpp
751+ )
752+ target_include_directories (VxRebalanceAI PRIVATE
753+ ThirdParty/stemgenrt/plugin/include
754+ "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /include"
755+ )
756+ target_link_libraries (VxRebalanceAI PRIVATE "${VXSTUDIO_REBALANCE_AI_ONNXRUNTIME_LIBRARY} " )
757+ target_compile_definitions (VxRebalanceAI PRIVATE
758+ VXSTUDIO_REBALANCE_AI_HAS_STEMGENRT=1
759+ STEMGENRT_USE_ONNXRUNTIME=1
760+ VXSTUDIO_REBALANCE_AI_MODEL_PATH= "${VXSTUDIO_REBALANCE_AI_MODEL_ONNX} "
761+ )
762+
763+ if (APPLE )
764+ get_filename_component (VXSTUDIO_REBALANCE_AI_ORT_REALPATH
765+ "${VXSTUDIO_REBALANCE_AI_ONNXRUNTIME_LIBRARY} " REALPATH )
766+ get_filename_component (VXSTUDIO_REBALANCE_AI_ORT_BASENAME
767+ "${VXSTUDIO_REBALANCE_AI_ORT_REALPATH} " NAME )
768+ set_property (TARGET VxRebalanceAI_VST3 APPEND PROPERTY BUILD_RPATH "@loader_path/../Frameworks" )
769+ add_custom_command (TARGET VxRebalanceAI_VST3 POST_BUILD
770+ COMMAND ${CMAKE_COMMAND } -E make_directory "$<TARGET_FILE_DIR :VxRebalanceAI_VST3 >/../Frameworks"
771+ COMMAND ${CMAKE_COMMAND } -E copy_if_different
772+ "${VXSTUDIO_REBALANCE_AI_ORT_REALPATH} "
773+ "$<TARGET_FILE_DIR :VxRebalanceAI_VST3 >/../Frameworks/${VXSTUDIO_REBALANCE_AI_ORT_BASENAME} "
774+ COMMAND install_name_tool -id
775+ "@rpath/${VXSTUDIO_REBALANCE_AI_ORT_BASENAME} "
776+ "$<TARGET_FILE_DIR :VxRebalanceAI_VST3 >/../Frameworks/${VXSTUDIO_REBALANCE_AI_ORT_BASENAME} "
777+ COMMAND install_name_tool -change
778+ "${VXSTUDIO_REBALANCE_AI_ONNXRUNTIME_LIBRARY} "
779+ "@rpath/${VXSTUDIO_REBALANCE_AI_ORT_BASENAME} "
780+ "$<TARGET_FILE :VxRebalanceAI_VST3 >" || true
781+ COMMAND ${CMAKE_COMMAND } -E make_directory
782+ "${VXSTUDIO_VST3_STAGE_DIR} /VxRebalanceAI.vst3/Contents/Frameworks"
783+ COMMAND ${CMAKE_COMMAND } -E copy_if_different
784+ "${VXSTUDIO_REBALANCE_AI_ORT_REALPATH} "
785+ "${VXSTUDIO_VST3_STAGE_DIR} /VxRebalanceAI.vst3/Contents/Frameworks/${VXSTUDIO_REBALANCE_AI_ORT_BASENAME} "
786+ VERBATIM )
787+ elseif (WIN32 )
788+ find_file (VXSTUDIO_REBALANCE_AI_ONNXRUNTIME_DLL
789+ NAMES onnxruntime.dll
790+ PATHS "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /lib" "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /bin"
791+ NO_DEFAULT_PATH
792+ )
793+ find_file (VXSTUDIO_REBALANCE_AI_DIRECTML_DLL
794+ NAMES DirectML.dll
795+ PATHS "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /lib" "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /bin"
796+ NO_DEFAULT_PATH
797+ )
798+ file (GLOB VXSTUDIO_REBALANCE_AI_ORT_PROVIDER_DLLS
799+ "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /lib/onnxruntime_providers_*.dll"
800+ "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /bin/onnxruntime_providers_*.dll"
801+ )
802+ set (VXSTUDIO_REBALANCE_AI_RUNTIME_DLLS "" )
803+ if (VXSTUDIO_REBALANCE_AI_ONNXRUNTIME_DLL)
804+ list (APPEND VXSTUDIO_REBALANCE_AI_RUNTIME_DLLS "${VXSTUDIO_REBALANCE_AI_ONNXRUNTIME_DLL} " )
805+ endif ()
806+ if (VXSTUDIO_REBALANCE_AI_DIRECTML_DLL)
807+ list (APPEND VXSTUDIO_REBALANCE_AI_RUNTIME_DLLS "${VXSTUDIO_REBALANCE_AI_DIRECTML_DLL} " )
808+ endif ()
809+ list (APPEND VXSTUDIO_REBALANCE_AI_RUNTIME_DLLS ${VXSTUDIO_REBALANCE_AI_ORT_PROVIDER_DLLS} )
810+
811+ foreach (runtime_dll IN LISTS VXSTUDIO_REBALANCE_AI_RUNTIME_DLLS)
812+ get_filename_component (runtime_dll_name "${runtime_dll} " NAME )
813+ add_custom_command (TARGET VxRebalanceAI_VST3 POST_BUILD
814+ COMMAND ${CMAKE_COMMAND } -E copy_if_different
815+ "${runtime_dll} "
816+ "$<TARGET_FILE_DIR :VxRebalanceAI_VST3 >/${runtime_dll_name} "
817+ COMMAND ${CMAKE_COMMAND } -E copy_if_different
818+ "${runtime_dll} "
819+ "${VXSTUDIO_VST3_STAGE_DIR} /VxRebalanceAI.vst3/Contents/x86_64-win/${runtime_dll_name} "
820+ VERBATIM )
821+ endforeach ()
822+ endif ()
823+
824+ add_custom_command (TARGET VxRebalanceAI_VST3 POST_BUILD
825+ COMMAND ${CMAKE_COMMAND } -E make_directory "$<TARGET_FILE_DIR :VxRebalanceAI_VST3 >/../Resources"
826+ COMMAND ${CMAKE_COMMAND } -E copy_if_different
827+ "${VXSTUDIO_REBALANCE_AI_MODEL_ONNX} "
828+ "$<TARGET_FILE_DIR :VxRebalanceAI_VST3 >/../Resources/model.onnx"
829+ COMMAND ${CMAKE_COMMAND } -E copy_if_different
830+ "${VXSTUDIO_REBALANCE_AI_MODEL_DATA} "
831+ "$<TARGET_FILE_DIR :VxRebalanceAI_VST3 >/../Resources/model.onnx.data"
832+ COMMAND ${CMAKE_COMMAND } -E make_directory
833+ "${VXSTUDIO_VST3_STAGE_DIR} /VxRebalanceAI.vst3/Contents/Resources"
834+ COMMAND ${CMAKE_COMMAND } -E copy_if_different
835+ "${VXSTUDIO_REBALANCE_AI_MODEL_ONNX} "
836+ "${VXSTUDIO_VST3_STAGE_DIR} /VxRebalanceAI.vst3/Contents/Resources/model.onnx"
837+ COMMAND ${CMAKE_COMMAND } -E copy_if_different
838+ "${VXSTUDIO_REBALANCE_AI_MODEL_DATA} "
839+ "${VXSTUDIO_VST3_STAGE_DIR} /VxRebalanceAI.vst3/Contents/Resources/model.onnx.data"
840+ VERBATIM )
841+ else ()
842+ message (STATUS "VxRebalanceAI realtime splitter disabled; install ThirdParty/onnxruntime and ThirdParty/stemgenrt/model" )
843+ endif ()
844+ add_custom_target (VxRebalanceAIPlugin ALL DEPENDS VxRebalanceAI_VST3 )
845+ vxstudio_stage_vst3_bundle (VxRebalanceAI_VST3 "VxRebalanceAI" )
846+ if (VXSTUDIO_REBALANCE_AI_SPLITTER_ENABLED AND APPLE )
847+ add_custom_command (TARGET VxRebalanceAI_VST3 POST_BUILD
848+ COMMAND /usr/bin/codesign --force --sign - "$<TARGET_FILE_DIR :VxRebalanceAI_VST3 >/../.."
849+ COMMAND /usr/bin/codesign --force --sign - "${VXSTUDIO_VST3_STAGE_DIR} /VxRebalanceAI.vst3"
850+ COMMENT "Signing VxRebalanceAI.vst3 after bundling realtime splitter resources"
851+ VERBATIM )
852+ endif ()
853+
702854juce_add_plugin (VXStudioAnalyser
703855 VERSION ${VXSTUDIO_PLUGIN_VERSION_VXSTUDIOANALYSER}
704856 BUILD_VERSION ${VXSTUDIO_PLUGIN_VERSION_VXSTUDIOANALYSER}
@@ -791,6 +943,7 @@ add_custom_target(VXSuite_VST3
791943 VXRefine_VST3
792944 VXLeveler_VST3
793945 VXRebalance_VST3
946+ VxRebalanceAI_VST3
794947 VXStudioAnalyser_VST3
795948 VXRepair_VST3
796949 VXDeverbStage
@@ -805,6 +958,7 @@ add_custom_target(VXSuite_VST3
805958 VXRefineStage
806959 VXLevelerStage
807960 VXRebalanceStage
961+ VxRebalanceAIStage
808962 VXStudioAnalyserStage
809963 VXRepairStage
810964 COMMENT "Building all VX Suite VST3 products" )
@@ -893,6 +1047,38 @@ target_link_libraries(VXRebalanceMeasure PRIVATE
8931047target_compile_definitions (VXRebalanceMeasure PRIVATE VXSTUDIO_DISABLE_PLUGIN_ENTRYPOINT=1 )
8941048vxstudio_add_executable_test (VXRebalanceMeasure )
8951049
1050+ if (VXSTUDIO_REBALANCE_AI_SPLITTER_ENABLED)
1051+ add_executable (VxRebalanceAISmokeTest
1052+ tests/VxRebalanceAISmokeTest.cpp
1053+ Source /vxstudio/products/rebalance/ai/OnnxStemgenBackend.cpp
1054+ Source /vxstudio/products/rebalance/ai/VxRealtimeStemSplitter.cpp
1055+ Source /vxstudio/products/rebalance/dsp/VxRebalanceDsp.cpp
1056+ ThirdParty/stemgenrt/plugin/source/OnnxRuntime.cpp
1057+ )
1058+ target_include_directories (VxRebalanceAISmokeTest PRIVATE
1059+ Source
1060+ tests
1061+ ThirdParty/stemgenrt/plugin/include
1062+ "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /include"
1063+ )
1064+ target_link_libraries (VxRebalanceAISmokeTest PRIVATE
1065+ VxStudioFramework
1066+ juce::juce_dsp
1067+ juce::juce_audio_basics
1068+ "${VXSTUDIO_REBALANCE_AI_ONNXRUNTIME_LIBRARY} "
1069+ )
1070+ target_compile_definitions (VxRebalanceAISmokeTest PRIVATE
1071+ VXSTUDIO_REBALANCE_AI_HAS_STEMGENRT=1
1072+ STEMGENRT_USE_ONNXRUNTIME=1
1073+ VXSTUDIO_REBALANCE_AI_MODEL_PATH= "${VXSTUDIO_REBALANCE_AI_MODEL_ONNX} "
1074+ )
1075+ if (APPLE )
1076+ set_property (TARGET VxRebalanceAISmokeTest APPEND PROPERTY
1077+ BUILD_RPATH "${VXSTUDIO_REBALANCE_AI_ORT_DIR} /lib" )
1078+ endif ()
1079+ vxstudio_add_executable_test (VxRebalanceAISmokeTest )
1080+ endif ()
1081+
8961082add_executable (VxStudioVoiceAnalysisTests
8971083 tests/VxStudioVoiceAnalysisTests.cpp
8981084)
0 commit comments