linux + piano keyboard support

This commit is contained in:
2026-06-24 20:52:16 -05:00
parent 5bd347de83
commit 6913736476
5 changed files with 14 additions and 4 deletions

View File

@@ -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

View File

@@ -7,6 +7,7 @@
#include <iomanip>
#include <fstream>
#include <filesystem>
#include <algorithm>
namespace fs = std::filesystem;

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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() {