From 6913736476111e2880d9c05da084c85c1a9c6c35 Mon Sep 17 00:00:00 2001 From: Blitblank Date: Wed, 24 Jun 2026 20:52:16 -0500 Subject: [PATCH] linux + piano keyboard support --- CMakeLists.txt | 9 +++++++-- src/LoggerService.cpp | 1 + src/synth/Instruments/PianoString.cpp | 2 +- src/synth/Instruments/PianoString.hpp | 2 +- src/synth/MidiController.cpp | 4 ++++ 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 93423d3..afaa0a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,10 @@ -cmake_minimum_required(VERSION 4.0) +cmake_minimum_required(VERSION 3.21) project(sonobulus LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20") # get dependencies include(FetchContent) @@ -59,12 +60,13 @@ add_library(sonobulus_core STATIC src/synth/Instrument.cpp src/synth/Instruments/PianoString.cpp ) + target_link_libraries(sonobulus_core PRIVATE Qt6::Core Qt6::Quick rtaudio rtmidi - libconfig++ + config++ ) target_include_directories(sonobulus_core PRIVATE @@ -82,6 +84,8 @@ qt_add_executable(sonobulus src/main.cpp ) +set_target_properties(sonobulus PROPERTIES OUTPUT_NAME "sonobulus.out") + qt_add_qml_module(sonobulus URI sonobulus VERSION 1.0 @@ -89,6 +93,7 @@ qt_add_qml_module(sonobulus ) target_include_directories(sonobulus PRIVATE + ${CMAKE_SOURCE_DIR}/src/ ${rtaudio_SOURCE_DIR} ${rtmidi_SOURCE_DIR} ${libconfig_SOURCE_DIR}/lib diff --git a/src/LoggerService.cpp b/src/LoggerService.cpp index 4217009..59bf9f6 100644 --- a/src/LoggerService.cpp +++ b/src/LoggerService.cpp @@ -7,6 +7,7 @@ #include #include #include +#include namespace fs = std::filesystem; diff --git a/src/synth/Instruments/PianoString.cpp b/src/synth/Instruments/PianoString.cpp index 63bc05b..583ed89 100644 --- a/src/synth/Instruments/PianoString.cpp +++ b/src/synth/Instruments/PianoString.cpp @@ -37,7 +37,7 @@ void PianoString::noteOn(float frequency, float velocity) { } // apply the velocity impulse for(size_t i = 0; i < segmentCount_ + 1; i++) { - float v0 = impulseVelocity_ * std::exp(-1.0f * (stringX_[i] - strikePosition_*L_)*(stringX_[i] - strikePosition_*L_) / ((2.0f * impulseWidth_)*(2.0f * impulseWidth_))); + float v0 = velocity * impulseVelocity_ * std::exp(-1.0f * (stringX_[i] - strikePosition_*L_)*(stringX_[i] - strikePosition_*L_) / ((2.0f * impulseWidth_)*(2.0f * impulseWidth_))); stringY_current_[i] = stringY_current_[i] + dt_ * v0; } diff --git a/src/synth/Instruments/PianoString.hpp b/src/synth/Instruments/PianoString.hpp index e8ea74b..faa8440 100644 --- a/src/synth/Instruments/PianoString.hpp +++ b/src/synth/Instruments/PianoString.hpp @@ -50,7 +50,7 @@ private: float mu_ = crossSectionalArea_ * rho_; // linear mass density float waveVelocity_ = std::sqrt(stringTension_ / mu_); // transverse wave velocity float L_ = 1.0f; // length of string at a given frequency - float gain_ = 0.3f; + float gain_ = 0.5f; // f0_ = waveVelocity_ / (2.0f * stringLength_); // fundamental frequency of a non-stiff string // f1_ = f0_ * std::sqrt(1.0f + stiffness_); // fundamental frequency of the stiff string diff --git a/src/synth/MidiController.cpp b/src/synth/MidiController.cpp index c7c2afd..3abc3cb 100644 --- a/src/synth/MidiController.cpp +++ b/src/synth/MidiController.cpp @@ -18,7 +18,11 @@ MidiController::MidiController(ConfigService* config, LoggerService* logger, Not logger_->log("MIDI", LogFlag::Warning, msg); } +#ifdef WIN32 openDefaultPort(); +#else + openPort(1); +#endif } MidiController::~MidiController() {