diff --git a/.gitmodules b/.gitmodules index 24da897..2708e9d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,7 +4,3 @@ [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/CMakeLists.txt b/CMakeLists.txt index b80acd5..cb85d16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,41 +9,19 @@ find_package(Qt6 REQUIRED COMPONENTS Widgets) if (WIN32) # windows 11 x86_64 - # dont judge me i had a lot of issues with this - add_library(rtaudio_headers INTERFACE) - target_include_directories(rtaudio_headers INTERFACE - "C:/rtaudio/include" - "C:/rtaudio/include/rtAudio" + add_library(RtAudio::rtaudio SHARED IMPORTED) + set_target_properties(RtAudio::rtaudio PROPERTIES + IMPORTED_LOCATION "${RtAudio_ROOT}/bin/rtaudio.dll" + IMPORTED_IMPLIB "${RtAudio_ROOT}/lib/rtaudio.lib" + INTERFACE_INCLUDE_DIRECTORIES "${RtAudio_ROOT}/include/rtaudio" ) - 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" + + add_library(RtMidi::rtmidi SHARED IMPORTED) + set_target_properties(RtMidi::rtmidi PROPERTIES + IMPORTED_LOCATION "${RtMidi_ROOT}/bin/rtmidi.dll" + IMPORTED_IMPLIB "${RtMidi_ROOT}/lib/rtmidi.lib" + INTERFACE_INCLUDE_DIRECTORIES "${RtMidi_ROOT}/include/rtmidi" ) - add_library(rtaudio INTERFACE) - target_link_libraries(rtaudio INTERFACE - rtaudio_headers - rtaudio_binary - ) - - add_library(RtAudio::RtAudio ALIAS rtaudio) - - add_library(rtmidi_headers INTERFACE) - target_include_directories(rtmidi_headers INTERFACE - "C:/rtmidi/include" - "C:/rtmidi/include/rtMidi" - ) - add_library(rtmidi_binary SHARED IMPORTED) - set_target_properties(rtmidi_binary PROPERTIES - IMPORTED_LOCATION "C:/rtmidi/bin/rtmidi.dll" - IMPORTED_IMPLIB "C:/rtmidi/lib/rtmidi.lib" - ) - add_library(rtmidi INTERFACE) - target_link_libraries(rtmidi INTERFACE - rtmidi_headers - rtmidi_binary - ) - add_library(RtMidi::RtMidi ALIAS rtmidi) else() # debian 12 x86_64 @@ -97,6 +75,7 @@ qt_add_executable(metabolus ) set_target_properties(metabolus PROPERTIES AUTOUIC ON) +target_compile_options(metabolus PUBLIC "/Zc:__cplusplus") target_include_directories(metabolus PRIVATE ${CMAKE_SOURCE_DIR}/src/ui @@ -106,9 +85,9 @@ target_include_directories(metabolus PRIVATE if (WIN32) target_link_libraries(metabolus PRIVATE + RtAudio::rtaudio + RtMidi::rtmidi Qt6::Widgets - RtAudio::RtAudio - RtMidi::RtMidi ) else() diff --git a/README.md b/README.md index 31b3bf7..f9d6cc5 100644 --- a/README.md +++ b/README.md @@ -40,10 +40,10 @@ This synthesizer isn't very good, but it's neat :3 ## Build Instructions Prerequisites: -CMake: https://cmake.org/download/ -Ninja: https://github.com/ninja-build/ninja/releases +CMake: https://cmake.org/download/ \ +QtWidgets: https://www.qt.io/development/download-qt-installer-oss -Windows: MSVC +Windows: MSVC (The build scripts use Visual Studio 17 2022) Linux: GCC Clone repository @@ -55,6 +55,7 @@ or if you forgot to --recursive: git clone https://github.com/Blitblank/metabalus.git git submodule update --init --recursive ``` +\ Build. The script will build and install dependencies automatically On Windows (MSVC): diff --git a/lib/qt5 b/lib/qt5 deleted file mode 160000 index f5f14e7..0000000 --- a/lib/qt5 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f5f14e7b5885256a8901dda5e95b5424774e29e7 diff --git a/scripts/build.ps1 b/scripts/build.ps1 index a424e49..c219c3f 100644 --- a/scripts/build.ps1 +++ b/scripts/build.ps1 @@ -6,8 +6,8 @@ $PROJECT_ROOT = $PWD $BUILD_DIR = "$PWD/build" $CONFIG = "Release" -# change these to the build libs -$QT_ROOT = "$BUILD_DIR\lib\qt\install" +# change these to your need +$QT_ROOT = "C:\Qt\6.10.1\msvc2022_64" $RTAUDIO_ROOT = "$BUILD_DIR\lib\rtaudio" $RTMIDI_ROOT = "$BUILD_DIR\lib\rtmidi" @@ -23,7 +23,7 @@ if (-not (Test-Path -Path $BUILD_DIR)) { # detect dependencies -$libraries = @("qt", "rtaudio", "rtmidi") +$libraries = @("rtaudio", "rtmidi") $dependencies_found = 0 foreach ($lib in $libraries) { if (Test-Path -Path ".\build\lib\$lib") { @@ -37,12 +37,12 @@ foreach ($lib in $libraries) { if (-not ($dependencies_found -eq $libraries.Count)) { & "scripts\install_dependencies.ps1" } else { - Write-Host "All dependencies detected, skipping depency install step..." + Write-Host "All dependencies detected, skipping dependency install step..." } # configure Write-Host "Configuring metabolus..." -cmake -S . -B $BUILD_DIR -G Ninja -DCMAKE_BUILD_TYPE=$CONFIG -DQt6_ROOT="$QT_ROOT\lib\cmake\Qt6" -DRTAUDIO_ROOT=$RTAUDIO_ROOT -DRTMIDI_ROOT=$RTMIDI_ROOT +cmake -S . -B $BUILD_DIR -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Release -DQt6_ROOT="$QT_ROOT\lib\cmake\Qt6" -DRtAudio_ROOT="$RTAUDIO_ROOT" -DRtMidi_ROOT="$RTMIDI_ROOT" # build Write-Host "Building metabolus..." @@ -52,11 +52,13 @@ cmake --build $BUILD_DIR Write-Host "Deploying metabolus..." cd $BUILD_DIR -& "$QT_ROOT\bin\windeployqt.exe" metabolus.exe +& "$QT_ROOT\bin\windeployqt6.exe" .\Debug\metabolus.exe -Copy-Item -Path "$RTAUDIO_ROOT\bin\rtaudio.dll" -Destination . -Copy-Item -Path "$RTMIDI_ROOT\bin\rtmidi.dll" -Destination . +Copy-Item -Path "$RTAUDIO_ROOT\bin\rtaudio.dll" -Destination .\Debug +Copy-Item -Path "$RTMIDI_ROOT\bin\rtmidi.dll" -Destination .\Debug # TODO: allow input of an external qt install because this one is huge # TODO: remove unnecessary qt modules bc why is this install like 80 gb + +cd $PROJECT_ROOT diff --git a/scripts/install_dependencies.ps1 b/scripts/install_dependencies.ps1 index d502a52..1220906 100644 --- a/scripts/install_dependencies.ps1 +++ b/scripts/install_dependencies.ps1 @@ -9,19 +9,10 @@ if (-not (Test-Path -Path "$PWD\build\lib")) { $build_lib_dir = "$PWD\build\lib" -# qt -mkdir "$build_lib_dir\qt" -Force -#cd $project_root\lib\qt5 -cd $build_lib_dir\qt -& "$project_root\lib\qt5\configure.bat" -prefix .\install -submodules qttools,qtbase -widgets -cmake --build . --parallel -cmake --install . - - # 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 -S . -B build -G "Visual Studio 17 2022" -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" @@ -29,7 +20,7 @@ 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 -S . -B build -G "Visual Studio 17 2022" -DRT_MIDI_API_WINMM=ON -DRTMIDI_BUILD_SHARED_LIBS=ON cmake --build build --config Release cmake --install build --prefix "$build_lib_dir\rtmidi" diff --git a/src/synth/Voice.cpp b/src/synth/Voice.cpp index 11b9ba2..c7a03a1 100644 --- a/src/synth/Voice.cpp +++ b/src/synth/Voice.cpp @@ -98,7 +98,7 @@ float Voice::process(float* params, bool& scopeTrigger) { float osc3 = oscillators_[2].process(osc3NoteOffset + note_, getParam(ParamId::Osc3PitchOffset)/100.0f, temp); // mix oscillators - float sampleOut = (osc1 + osc2*0.5f + osc3*0.25f) * gain; + float sampleOut = (osc1 + osc2*0.25f + osc3*0.125f) * gain; // filter sample float baseFreq = oscillators_[0].frequency(); @@ -106,8 +106,8 @@ float Voice::process(float* params, bool& scopeTrigger) { float resonance = resonanceEnv * getParam(ParamId::FilterResonanceDepth) * velocityGain; filter1_.setParams(Filter::Type::BiquadLowpass, cutoffFreq, resonance); filter2_.setParams(Filter::Type::BiquadLowpass, cutoffFreq, resonance); - sampleOut = filter1_.biquadProcess(sampleOut); - sampleOut = filter2_.biquadProcess(sampleOut); + float filteredSample = filter1_.biquadProcess(sampleOut); + // sampleOut = filter2_.biquadProcess(sampleOut); // TODO: for some reason second filter is unstable only on windows 🤷 - return sampleOut; + return filteredSample; } \ No newline at end of file diff --git a/src/synth/WavetableController.h b/src/synth/WavetableController.h index f03d835..83c7a1c 100644 --- a/src/synth/WavetableController.h +++ b/src/synth/WavetableController.h @@ -3,6 +3,7 @@ #include #include +#include #define SYNTH_WAVETABLE_SIZE 2048 #ifndef M_PI // I hate my stupid chungus life diff --git a/src/ui/MainWindow.cpp b/src/ui/MainWindow.cpp index 185d7c4..36d8f41 100644 --- a/src/ui/MainWindow.cpp +++ b/src/ui/MainWindow.cpp @@ -52,7 +52,10 @@ MainWindow::MainWindow(QWidget *parent) : audio_->start(); // midi +#ifndef _WIN32 midi_.openPort(1); // TODO: error check +#endif + } MainWindow::~MainWindow() {