From fac95b1baedaec9f316e2f0f0195308eefc6f4f5 Mon Sep 17 00:00:00 2001 From: Bliblank Date: Mon, 19 Jan 2026 18:29:41 -0600 Subject: [PATCH] submodule checkpoint --- .gitmodules | 15 ++++--- lib/qt5 | 1 + lib/qtbase | 1 - scripts/build.bat | 58 ------------------------ scripts/build.ps1 | 77 ++++++++++++++++++++++++++++++++ scripts/install_dependencies.ps1 | 34 ++++++++++++++ scripts/install_dependencies.sh | 0 src/synth/AudioEngine.cpp | 4 +- 8 files changed, 123 insertions(+), 67 deletions(-) create mode 160000 lib/qt5 delete mode 160000 lib/qtbase delete mode 100644 scripts/build.bat create mode 100644 scripts/build.ps1 create mode 100644 scripts/install_dependencies.ps1 create mode 100644 scripts/install_dependencies.sh diff --git a/.gitmodules b/.gitmodules index c180e6a..24da897 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,10 @@ -[submodule "rtmidi"] - path = lib/rtmidi - url = https://github.com/thestk/rtmidi.git -[submodule "rtaudio"] +[submodule "lib/rtaudio"] path = lib/rtaudio url = https://github.com/thestk/rtaudio.git -[submodule "qtbase"] - path = lib/qtbase - url = https://github.com/qt/qtbase.git +[submodule "lib/rtmidi"] + path = lib/rtmidi + url = https://github.com/thestk/rtmidi.git +[submodule "lib/qt5"] + path = lib/qt5 + url = https://github.com/qt/qt5.git + branch = 6.11 diff --git a/lib/qt5 b/lib/qt5 new file mode 160000 index 0000000..f5f14e7 --- /dev/null +++ b/lib/qt5 @@ -0,0 +1 @@ +Subproject commit f5f14e7b5885256a8901dda5e95b5424774e29e7 diff --git a/lib/qtbase b/lib/qtbase deleted file mode 160000 index dcad7c6..0000000 --- a/lib/qtbase +++ /dev/null @@ -1 +0,0 @@ -Subproject commit dcad7c6d6f86bbc70ecda0aa4b450e658aa9f37a diff --git a/scripts/build.bat b/scripts/build.bat deleted file mode 100644 index 8ee5bbb..0000000 --- a/scripts/build.bat +++ /dev/null @@ -1,58 +0,0 @@ -@echo off -setlocal - -REM config - -set BUILD_DIR=build -set CONFIG=Release - -set QT_ROOT=C:\Qt\6.10.1\msvc2022_64 -set RTAUDIO_ROOT=C:\rtaudio -set RTMIDI_ROOT=C:\rtmidi - -REM setup - -call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" - -set PATH=%QT_ROOT%\bin;%PATH% - -if not exist %BUILD_DIR% ( - mkdir %BUILD_DIR% -) - -REM configure - -cmake -S . -B %BUILD_DIR% ^ - -G Ninja ^ - -DCMAKE_BUILD_TYPE=%CONFIG% ^ - -DRTAUDIO_ROOT=%RTAUDIO_ROOT% ^ - -DRTMIDI_ROOT=%RTMIDI_ROOT% - -if errorlevel 1 goto error - -REM build -cmake --build %BUILD_DIR% - -if errorlevel 1 goto error - -REM link dlls - -cd %BUILD_DIR% - -windeployqt metabolus.exe - -copy "%RTAUDIO_ROOT%\bin\rtaudio.dll" . -copy "%RTMIDI_ROOT%\bin\rtmidi.dll" . - -echo. -echo Build successful -goto end - -:error -echo. -echo Build failed -exit /b 1 - -:end -endlocal -pause diff --git a/scripts/build.ps1 b/scripts/build.ps1 new file mode 100644 index 0000000..a5ef320 --- /dev/null +++ b/scripts/build.ps1 @@ -0,0 +1,77 @@ + +# config + +$BUILD_DIR = "build" +$CONFIG = "Release" + +# change these to the build libs +$QT_ROOT = "C:\Qt\6.10.1\msvc2022_64" +$RTAUDIO_ROOT = "C:\rtaudio" +$RTMIDI_ROOT = "C:\rtmidi" + +# setup + +& "$Env:Programfiles\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" + +$PATH="$QT_ROOT\bin;$PATH" + +if (-not (Test-Path -Path $BUILD_DIR)) { + mkdir $BUILD_DIR +} + +# detect dependencies + +$libraries = @("qt", "rtaudio", "rtmidi", "yaml-cpp") +$dependencies_found = 0 +foreach ($lib in $libraries) { + if (Test-Path -Path ".\build\lib\$lib") { + Write-Host "found $lib" + $dependencies_found++ + } else { + Write-Host "did not find $lib" + } +} + +if (-not ($dependencies_found -eq $libraries.Count)) { + & "scripts\install_dependencies.ps1" +} + +# configure + +<# +cmake -S . -B $BUILD_DIR ^ + -G Ninja ^ + -DCMAKE_BUILD_TYPE=$CONFIG ^ + -DRTAUDIO_ROOT=$RTAUDIO_ROOT ^ + -DRTMIDI_ROOT=$RTMIDI_ROOT + + +if errorlevel 1 goto error + +# build +cmake --build $BUILD_DIR + +if errorlevel 1 goto error + +# link dlls + +cd %BUILD_DIR% + +windeployqt metabolus.exe + +copy "%RTAUDIO_ROOT%\bin\rtaudio.dll" . +copy "%RTMIDI_ROOT%\bin\rtmidi.dll" . + +echo. +echo Build successful +goto end + +:error +echo. +echo Build failed +exit /b 1 + +:end +endlocal +pause +#> \ No newline at end of file diff --git a/scripts/install_dependencies.ps1 b/scripts/install_dependencies.ps1 new file mode 100644 index 0000000..776edd7 --- /dev/null +++ b/scripts/install_dependencies.ps1 @@ -0,0 +1,34 @@ + +echo "Installing dependencies ... " + +$project_root = $PWD +$build_lib_dir = "$PWD\build\lib" + + +# qt +mkdir "$build_lib_dir\qt" +cd $project_root\lib\qtbase + + +# rtaudio +mkdir "$build_lib_dir\rtaudio" -Force +cd $project_root\lib\rtaudio +cmake -S . -B build -DRTDUIO_API_WASAPI=ON -DRTAUDIO_API_DS=OFF -DRT_AUDIO_API_ASIO=OFF -DRTAUDIO_BUILD_SHARED_LIBS=ON +cmake --build build --config Release +cmake --install build --prefix "$build_lib_dir\rtaudio" + + +# rtmidi +mkdir "$build_lib_dir\rtmidi" -Force +cd $project_root\lib\rtmidi +cmake -S . -B build -DRT_MIDI_API_WINMM=ON -DRTMIDI_BUILD_SHARED_LIBS=ON +cmake --build build --config Release +cmake --install build --prefix "$build_lib_dir\rtmidi" + +# yaml-cpp +<# +cd $project_root\lib\qtbase + +#> + +cd $project_root diff --git a/scripts/install_dependencies.sh b/scripts/install_dependencies.sh new file mode 100644 index 0000000..e69de29 diff --git a/src/synth/AudioEngine.cpp b/src/synth/AudioEngine.cpp index fa1673b..44cab86 100644 --- a/src/synth/AudioEngine.cpp +++ b/src/synth/AudioEngine.cpp @@ -46,11 +46,13 @@ void AudioEngine::stop() { if(audio_.isStreamOpen()) audio_.closeStream(); } -int32_t AudioEngine::audioCallback( void* outputBuffer, void*, uint32_t nFrames, double, RtAudioStreamStatus status, void* userData) { +// called by RtAudio continuously, sends outputBuffer to audio drivers +int32_t AudioEngine::audioCallback(void* outputBuffer, void*, uint32_t nFrames, double, RtAudioStreamStatus status, void* userData) { // error if process is too slow for the callback. If this is consistent, then need to optimize synth.process() or whatever cascades from it if (status) std::cerr << "Stream underflow" << std::endl; + // populate audio buffer return static_cast(userData)->process(static_cast(outputBuffer), nFrames); }