MonoStep: monophonic 2-oscillator step-sequencer synth

This commit is contained in:
armin 2026-08-05 19:55:57 +02:00
commit e52e5cb161
14 changed files with 2674 additions and 0 deletions

97
CMakeLists.txt Normal file
View file

@ -0,0 +1,97 @@
cmake_minimum_required(VERSION 3.22)
project(MonoStep VERSION 1.0.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0")
set(CMAKE_OSX_ARCHITECTURES "arm64")
# --- build metadata (git info + build date) ----------------------------------
set(MONOSTEP_GIT_STRING "no-vcs")
find_package(Git QUIET)
if(Git_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} -C "${CMAKE_CURRENT_LIST_DIR}" rev-parse --short HEAD
OUTPUT_VARIABLE MONOSTEP_GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
execute_process(
COMMAND ${GIT_EXECUTABLE} -C "${CMAKE_CURRENT_LIST_DIR}" status --porcelain
OUTPUT_VARIABLE MONOSTEP_GIT_PORCELAIN
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
if(MONOSTEP_GIT_HASH)
set(MONOSTEP_GIT_STRING "${MONOSTEP_GIT_HASH}")
if(NOT MONOSTEP_GIT_PORCELAIN STREQUAL "")
string(APPEND MONOSTEP_GIT_STRING "-dirty")
endif()
endif()
endif()
if(NOT DEFINED JUCE_DIR)
set(JUCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../juce")
endif()
if(NOT EXISTS "${JUCE_DIR}/CMakeLists.txt")
message(FATAL_ERROR "JUCE not found at ${JUCE_DIR}. Pass -DJUCE_DIR=<path> or clone it next to this project.")
endif()
add_subdirectory("${JUCE_DIR}" juce_build)
juce_add_plugin(MonoStep
VERSION 1.0.0
COMPANY_NAME "armin"
BUNDLE_ID "com.armin.monostep"
FORMATS VST3
PRODUCT_NAME "MonoStep"
PLUGIN_MANUFACTURER_CODE Armn
PLUGIN_CODE MStp
DESCRIPTION "Monophonic 2-oscillator step-sequencer synth"
EDITOR_NAME MonoStepAudioProcessorEditor
IS_SYNTH TRUE
NEEDS_MIDI_INPUT TRUE
VST3_AUTO_MANIFEST TRUE
)
juce_generate_juce_header(MonoStep)
target_sources(MonoStep PRIVATE
Source/PluginProcessor.cpp
Source/PluginEditor.cpp
Source/ui/SequencerMatrix.cpp
)
target_include_directories(MonoStep PRIVATE Source)
target_compile_definitions(MonoStep PRIVATE
JUCE_WEB_BROWSER=0
JUCE_VST3_CAN_REPLACE_VST2=0
MONOSTEP_GIT_INFO="${MONOSTEP_GIT_STRING}"
)
option(MONOSTEP_BUILD_TESTS "Build the headless host test" ON)
if(MONOSTEP_BUILD_TESTS)
juce_add_console_app(MonoStepTestHost
PRODUCT_NAME MonoStepTestHost
)
juce_generate_juce_header(MonoStepTestHost)
target_link_libraries(MonoStepTestHost PRIVATE
juce::juce_audio_processors
juce::juce_audio_formats
)
target_include_directories(MonoStepTestHost PRIVATE Source)
target_sources(MonoStepTestHost PRIVATE
Source/PluginProcessor.cpp
tests/TestHost.cpp
)
target_compile_definitions(MonoStepTestHost PRIVATE
MONOSTEP_HEADLESS=1
JUCE_PLUGINHOST_VST3=1
)
endif()