From 0d6ab4b88c972faaeeb199c432e1dcc09d6449c5 Mon Sep 17 00:00:00 2001 From: Bliblank Date: Mon, 22 Dec 2025 22:17:35 -0600 Subject: [PATCH] windows build --- CMakeLists.txt | 59 ++++++++++++++++++++++++++------------- scripts/build.bat | 5 ++-- src/synth/AudioEngine.cpp | 17 +++++++++-- 3 files changed, 56 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bf5d99..5a65a03 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,30 +5,53 @@ project(metabolus LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) -if (WIN32) - add_library(RtAudio::RtAudio SHARED IMPORTED) +find_package(Qt6 REQUIRED COMPONENTS Widgets) +qt_standard_project_setup() - set_target_properties(RtAudio::RtAudio PROPERTIES - IMPORTED_LOCATION "C:/rtaudio/bin/rtaudio.dll" - IMPORTED_IMPLIB "C:/rtaudio/lib/rtaudio.lib" - INTERFACE_INCLUDE_DIRECTORIES "C:/rtaudio/include" +# windows 11 x86_64 +# debian 12 x86_64 +if (WIN32) + # Header-only target (real target, no ::) + add_library(rtaudio_headers INTERFACE) + target_include_directories(rtaudio_headers INTERFACE + "C:/rtaudio/include" + "C:/rtaudio/include/rtAudio" ) + # Imported binary (real target, no ::) + add_library(rtaudio_binary SHARED IMPORTED) + set_target_properties(rtaudio_binary PROPERTIES + IMPORTED_LOCATION "C:/rtaudio/bin/rtaudio.dll" + IMPORTED_IMPLIB "C:/rtaudio/lib/rtaudio.lib" + ) + + # Unified interface target + add_library(rtaudio INTERFACE) + target_link_libraries(rtaudio INTERFACE + rtaudio_headers + rtaudio_binary + ) + + # Public alias (this is where :: belongs) + add_library(RtAudio::RtAudio ALIAS rtaudio) + else() - find_package(Qt6 REQUIRED COMPONENTS Widgets) find_package(PkgConfig REQUIRED) pkg_check_modules(RTAUDIO REQUIRED rtaudio) - add_library(RtAudio::RtAudio INTERFACE IMPORTED) - set_target_properties(RtAudio::RtAudio PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${RTAUDIO_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${RTAUDIO_LIBRARIES}" + add_library(rtaudio INTERFACE) + target_include_directories(rtaudio INTERFACE + ${RTAUDIO_INCLUDE_DIRS} ) + target_link_libraries(rtaudio INTERFACE + ${RTAUDIO_LIBRARIES} + ) + + add_library(RtAudio::RtAudio ALIAS rtaudio) endif() -qt_standard_project_setup() -add_executable(metabolus +qt_add_executable(metabolus src/main.cpp src/MainWindow.cpp src/MainWindow.h @@ -40,14 +63,12 @@ add_executable(metabolus resources/resources.qrc ) -# target_include_directories(metabolus PRIVATE ${RTAUDIO_INCLUDE_DIRS}) -target_link_libraries(metabolus PRIVATE Qt6::Widgets ${RTAUDIO_LIBRARIES}) -# target_compile_options(metabolus PRIVATE ${RTAUDIO_CFLAGS_OTHER}) +target_link_libraries(metabolus PRIVATE Qt6::Widgets RtAudio::RtAudio) if (WIN32) - add_custom_command(TARGET MyQtApp POST_BUILD + add_custom_command(TARGET metabolus POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "C:/rtaudio/bin/rtaudio.dll" - $ + $ ) -endif() \ No newline at end of file +endif() diff --git a/scripts/build.bat b/scripts/build.bat index cf03b6c..4742dd7 100644 --- a/scripts/build.bat +++ b/scripts/build.bat @@ -8,8 +8,7 @@ REM ================================ set BUILD_DIR=build set CONFIG=Release -REM Update these paths if needed -set QT_ROOT=C:\Qt\6.6.1\msvc2022_64 +set QT_ROOT=C:\Qt\6.10.1\msvc2022_64 set RTAUDIO_ROOT=C:\rtaudio REM ================================ @@ -50,7 +49,7 @@ REM ================================ cd %BUILD_DIR% -windeployqt MyQtApp.exe +windeployqt metabolus.exe copy "%RTAUDIO_ROOT%\bin\rtaudio.dll" . diff --git a/src/synth/AudioEngine.cpp b/src/synth/AudioEngine.cpp index d56054e..94e5d60 100644 --- a/src/synth/AudioEngine.cpp +++ b/src/synth/AudioEngine.cpp @@ -1,8 +1,13 @@ #include "AudioEngine.h" +#define _USE_MATH_DEFINES +#include #include -#include + +#ifndef M_PI // I hate my stupid chungus life + #define M_PI 3.14159265358979323846 +#endif AudioEngine::AudioEngine() { if(audio_.getDeviceCount() < 1) { @@ -18,12 +23,13 @@ bool AudioEngine::start() { RtAudio::StreamParameters params; params.deviceId = audio_.getDefaultOutputDevice(); - params.nChannels = 1; + params.nChannels = 2; params.firstChannel = 0; RtAudio::StreamOptions options; options.flags = RTAUDIO_MINIMIZE_LATENCY; + /* try { audio_.openStream(¶ms, nullptr, RTAUDIO_FLOAT32, sampleRate_, &bufferFrames_, &AudioEngine::audioCallback, this, &options); audio_.startStream(); @@ -31,6 +37,9 @@ bool AudioEngine::start() { std::cerr << e.getMessage() << std::endl; return false; } + */ + audio_.openStream(¶ms, nullptr, RTAUDIO_FLOAT32, sampleRate_, &bufferFrames_, &AudioEngine::audioCallback, this, &options); + audio_.startStream(); std::cout << "sample rate: " << sampleRate_ << " buffer frames: " << bufferFrames_ << std::endl; return true; @@ -63,7 +72,9 @@ int32_t AudioEngine::process(float* out, uint32_t nFrames) { currentFreq_ += freqStep; float phaseInc = 2.0f * M_PI * currentFreq_ / sr; - out[i] = std::sin(phase_); + + out[2*i] = std::sin(phase_); // left + out[2*i+1] = std::sin(phase_); // right phase_ += phaseInc; if (phase_ > 2.0f * M_PI) phase_ -= 2.0f * M_PI;