### CMake Project Setup and Definitions Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Initializes the CMake build system, sets the project name and version, and defines preprocessor macros for version, website, package name, and installation paths. ```cmake cmake_minimum_required(VERSION 3.5.1...3.31.1) project (non-mixer-xt) set (PACKAGE_VERSION "2.0.9") set (CMAKE_SKIP_RULE_DEPENDENCY OFF) add_definitions(-D'VERSION="${PACKAGE_VERSION}"') add_definitions(-D'WEBSITE="https://github.com/Stazed/non-mixer-xt"') add_definitions(-D'PACKAGE="non-mixer-xt"') add_definitions(-D'PIXMAP_PATH="${CMAKE_INSTALL_PREFIX}/share/pixmaps"') add_definitions(-D'DOCUMENT_PATH="${CMAKE_INSTALL_PREFIX}/share/doc"') add_definitions(-D'NMXT_CONFIG_DIRECTORY="non-mixer-xt/"') add_definitions(-D'BINARY_PATH="${CMAKE_INSTALL_PREFIX}/bin"') ``` -------------------------------- ### Install Desktop Entries Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt Installs desktop entry files for 'non-mixer-xt' and 'midi-mapper-xt' to the 'share/applications' directory, enabling them to be recognized by desktop environments. ```cmake install (FILES non-mixer-xt.desktop.in DESTINATION share/applications RENAME non-mixer-xt.desktop) install (FILES midi-mapper-xt.desktop.in DESTINATION share/applications RENAME midi-mapper-xt.desktop) ``` -------------------------------- ### CMake Project Setup and Source Files Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt Defines the project name and lists all source files for the 'non-mixer-xt' executable. This includes C and C++ files from various directories like 'nonlib', 'FL', and 'src', covering JACK client, OSC, MIDI, FLTK UI elements, and plugin implementations (LADSPA, LV2, CLAP, VST2, VST3). ```cmake project (non-mixer-xt) set (ProgSources ../nonlib/JACK/Client.C ../nonlib/JACK/Port.C ../nonlib/Log_Entry.C ../nonlib/Loggable.C ../nonlib/NSM/Client.C ../nonlib/OSC/Endpoint.C ../nonlib/Thread.C ../nonlib/debug.C ../nonlib/dsp.C ../nonlib/file.C ../nonlib/MIDI/midievent.C ../nonlib/string_util.C ../nonlib/MIDI/event_list.C ../nonlib/MIDI/event.C ../nonlib/MIDI/midievent.C ../FL/About_Dialog.C ../FL/Fl_Menu_Settings.C ../FL/Fl_Scalepack.C ../FL/Fl_Text_Edit_Window.C ../FL/Fl_Value_SliderX.C ../FL/Fl_SliderX.C ../FL/New_Project_Dialog.C ../FL/event_name.C ../FL/menu_popup.C ../FL/test_press.C ../FL/focus_frame.C src/Plugin_Chooser_UI.C src/Chain.C src/Controller_Module.C src/DPM.C src/Gain_Module.C src/Spatializer_Module.C src/JACK_Module.C src/AUX_Module.C src/ladspa/LADSPAInfo.C src/ladspa/LADSPA_Plugin.C src/lv2/LV2_Plugin.C src/clap/CLAP_Plugin.C src/clap/Clap_Discovery.C src/clap/Time.cpp src/vst2/Vst2_Discovery.C src/vst2/VST2_Plugin.C src/vst2/VST2_Preset.C src/vst3/VST3_common.C src/vst3/Vst3_Discovery.C src/vst3/VST3_Plugin.C src/vst3/VST3PluginHost.C src/vst3/runloop.cpp src/vst3/EditorFrame.C src/Meter_Indicator_Module.C src/Meter_Module.C src/Mixer.C src/Mixer_Strip.C src/Module.C src/Module_Parameter_Editor.C src/Mono_Pan_Module.C src/Plugin_Chooser.C src/NSM.C src/Panner.C src/Plugin_Module.C src/Project.C src/Group.C src/SpectrumView.C src/Spatialization_Console.C src/Scanner_Window.C src/lv2/lv2_evbuf.c src/x11/X11PluginUI.C ) ``` -------------------------------- ### Build nmxt-plugin-scan Executable Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt Configures the build for the 'nmxt-plugin-scan' executable, including plugin discovery sources for LADSPA, CLAP, VST2, and VST3. It conditionally links against LILV, SUIL, and LRDF libraries, with specific include directories for VST3 SDK if enabled. The executable is installed to the 'bin' directory. ```cmake set (ScanSources src/Plugin_Scan.C src/ladspa/LADSPAInfo.C src/clap/Clap_Discovery.C src/vst2/Vst2_Discovery.C src/vst3/Vst3_Discovery.C src/vst3/VST3_common.C ../nonlib/debug.C ) add_executable (nmxt-plugin-scan ${ScanSources} ${VST3SDK_SOURCES} src/nmxt-plugin-scan.C) if(EnableNTK) target_include_directories (nmxt-plugin-scan PRIVATE ${LRDF_INCLUDE_DIRS} ${LILV_INCLUDE_DIRS} ${SUIL_INCLUDE_DIRS} ) target_link_libraries(nmxt-plugin-scan PRIVATE ${LILV_LIBRARIES} ${SUIL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} dl lrdf ) else(EnableNTK) target_include_directories (nmxt-plugin-scan PRIVATE ${LRDF_INCLUDE_DIRS} ${LILV_INCLUDE_DIRS} ${SUIL_INCLUDE_DIRS} ) target_link_libraries(nmxt-plugin-scan PRIVATE ${LILV_LIBRARIES} ${SUIL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} dl lrdf ) endif(EnableNTK) if (EnableVST3Support AND CONFIG_VST3SDK) target_include_directories (nmxt-plugin-scan PRIVATE ${CONFIG_VST3SDK}) endif() install (TARGETS nmxt-plugin-scan RUNTIME DESTINATION bin) ``` -------------------------------- ### Build midi-mapper-xt Executable Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt Sets up the build for the 'midi-mapper-xt' executable, compiling source files from the JACK, NSM, OSC, and other nonlib directories. It includes conditional linking for NTK or FLTK builds, incorporating libraries like LIBLO, NTK, FLTK, JACK, LRDF, and threading support. The executable is installed to the 'bin' directory. ```cmake set (MapSources ../nonlib/JACK/Client.C ../nonlib/JACK/Port.C ../nonlib/NSM/Client.C ../nonlib/OSC/Endpoint.C ../nonlib/Thread.C ../nonlib/debug.C ../nonlib/MIDI/midievent.C ) add_executable (midi-mapper-xt ${MapSources} src/midi-mapper.C) if(EnableNTK) target_include_directories (midi-mapper-xt PRIVATE ${NTK_INCLUDE_DIRS} ${JACK_INCLUDE_DIRS} ${LRDF_INCLUDE_DIRS} ${JACK_INCLUDE_DIRS} ${LIBLO_INCLUDE_DIRS} ) target_link_libraries(midi-mapper-xt PRIVATE ${LIBLO_LIBRARIES} ${NTK_IMAGES_LIBRARIES} ${NTK_LIBRARIES} ${JACK_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} dl m lrdf ) else(EnableNTK) #FLTK Build target_include_directories (midi-mapper-xt PRIVATE ${FLTK_INCLUDE_DIRS} ${JACK_INCLUDE_DIRS} ${LRDF_INCLUDE_DIRS} ${JACK_INCLUDE_DIRS} ${LIBLO_INCLUDE_DIRS} ) target_link_libraries(midi-mapper-xt PRIVATE ${LIBLO_LIBRARIES} ${FLTK_LIBRARIES} ${JACK_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} dl m lrdf ) endif(EnableNTK) install (TARGETS midi-mapper-xt RUNTIME DESTINATION bin) ``` -------------------------------- ### Build Non-Mixer-XT with CMake Source: https://github.com/stazed/non-mixer-xt/blob/main/README.md Builds Non-Mixer-XT using CMake. This involves creating a build directory, configuring the build with CMake, compiling the project, and installing it. The default build uses FLTK. ```bash mkdir build cd build cmake .. make sudo make install ``` -------------------------------- ### Build non-mixer-xt Executable Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt Configures the build for the 'non-mixer-xt' executable. It defines source files and links against static FLTK libraries and external libraries. The executable is installed to the 'bin' directory. ```cmake target_link_libraries (non-mixer-xt ${FLTK_STATIC} ${FLTK_STATIC_IMAGES} ${ExternLibraries}) install (TARGETS non-mixer-xt RUNTIME DESTINATION bin) ``` -------------------------------- ### Plugin Insertion Rules Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Outlines special handling and insertion rules for LV2/CLAP/VST(2)/VST3 instrument and MIDI plugins, especially those with zero audio inputs. ```APIDOC Zero input synths: Insert after default JACK input, set jack inputs to one. MIDI only plugins: Insert after default JACK input, only one MIDI plugin per strip, no other plugins allowed on a strip with a MIDI plugin. ``` -------------------------------- ### Non Mixer XT Plugin Scanning Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Explains the process of scanning for plugins, caching the results, and managing plugin availability within Non Mixer XT. Includes options for skipping unresponsive plugins. ```English Scan for plugins: Scans for all available plugins on your computer and saves the results to ~/.non-mixer-xt/plugin_cache for faster loading. Rescanning is necessary if plugins are added or removed. Options during scan: - 'Skip': Skips the current plugin/bundle, preventing it from being added to the cache or displayed. - 'Cancel': Stops the scanning process without updating the plugin cache. ``` -------------------------------- ### Initialize Git Submodules Source: https://github.com/stazed/non-mixer-xt/blob/main/README.md Initializes and updates Git submodules required for the project, including 'nonlib' and 'FL'. This command ensures that all necessary external code dependencies are downloaded and ready for use. ```bash git submodule update --init ``` -------------------------------- ### Non-Mixer-XT Legacy Project Conversion Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Provides commands to convert legacy project info and snapshot files to the new Non-Mixer-XT format, updating plugin references and names. ```bash sed -i 's/The Non-Mixer /The Non-Mixer-XT /' info sed -i -e '/:plugin_id/s/Plugin_Module/LADSPA_Plugin/' snapshot sed -i -e '/:lv2_plugin_uri/s/Plugin_Module/LV2_Plugin/' snapshot ``` -------------------------------- ### JACK Overhead Benchmarks Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Performance data illustrating JACK DSP load with and without groups across different hardware and JACK versions. This data helps in understanding the impact of JACK overhead and the effectiveness of groups. ```APIDOC System: 32-bit Intel Core2 Duo @1.6Ghz -r 48000 -p 256 -n 2 (5.3ms) | JACK Ver | Groups | DSP Load | |----------|--------|----------| | JACK1 | N | 39% | | JACK1 | Y | 27% | | JACK2 | N | 24% | | JACK2 | Y | 31% | System: AMD FX-8350 @ 4.2Ghz 64-bit -r 48000 -p 256 -n 2 (5.3ms) | JACK Ver | Groups | DSP Load | |----------|--------|----------| | JACK1 | N | 28% | | JACK1 | Y | 12% | | JACK2 | N | 12% | | JACK2 | Y | 11% | System: AMD FX-8350 @ 4.2Ghz 64-bit -r 48000 -p 128 -n 2 (2.7ms) | JACK Ver | Groups | DSP Load | |----------|--------|----------| | JACK1 | N | 29% | | JACK1 | Y | 17% | | JACK2 | N | 17% | | JACK2 | Y | 17% | System: AMD FX-8350 @ 4.2Ghz 64-bit -r 48000 -p 32 -n 2 (0.7ms) | JACK Ver | Groups | DSP Load | |----------|--------|----------| | JACK1 | N | x | | JACK1 | Y | x | | JACK2 | N | 43% | | JACK2 | Y | 41% | ``` -------------------------------- ### Build Non-Mixer-XT with NTK and CMake Source: https://github.com/stazed/non-mixer-xt/blob/main/README.md Builds Non-Mixer-XT using CMake with the NTK GUI toolkit enabled. This requires cloning the NTK repository first. ```bash mkdir build cd build cmake -DEnableNTK=ON .. make sudo make install ``` -------------------------------- ### Module Manipulation Shortcuts Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Details keyboard shortcuts for manipulating modules within the Non-Mixer-XT interface, including context menu access, parameter editing, bypassing, deletion, cutting, copying, and pasting. ```APIDOC Menu: Bring up context menu Space: Open module parameter editor b: Toggle bypass state Delete: Remove module Control+X: Cut module Control+C: Copy module Control+V: Paste module ``` -------------------------------- ### External Libraries and Include Directories (NTK Build) Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt For NTK builds, this section defines the external libraries required, such as FONTCONFIG, JACK, CMAKE_THREAD_LIBS_INIT, X11, LIBLO, LILV, SUIL, ZIX, PangoCairo, XFT, XRENDER, XINERAMA, and others. It also sets the private include directories for the target. ```cmake if(EnableNTK) set(ExternLibraries ${FONTCONFIG_LIBRARIES} ${JACK_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${X11_LIBRARIES} ${LIBLO_LIBRARIES} ${LILV_LIBRARIES} ${SUIL_LIBRARIES} ${ZIX_LIBRARIES} ${PangoCairo_LIBRARIES} ${XFT_LIBRARIES} ${XRENDER_LIBRARIES} ${XINERAMA_LIBRARIES} cairo Xcursor Xfixes jpeg png dl m lrdf ) target_include_directories ( non-mixer-xt PRIVATE ${NTK_INCLUDE_DIRS} ${FONTCONFIG_INCLUDE_DIRS} ${JACK_INCLUDE_DIRS} ${LRDF_INCLUDE_DIRS} ${LILV_INCLUDE_DIRS} ${SUIL_INCLUDE_DIRS} ${LIBLO_INCLUDE_DIRS} ${ZIX_INCLUDE_DIRS} ${CLAP_INCLUDEDIR} ${PangoCairo_INCLUDE_DIRS} ${XFT_INCLUDE_DIRS} ${XRENDER_INCLUDE_DIRS} ${XINERAMA_INCLUDE_DIRS} ) else(EnableNTK) #FLTK Build set(ExternLibraries ${FONTCONFIG_LIBRARIES} ${JACK_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${X11_LIBRARIES} ${LIBLO_LIBRARIES} ${LILV_LIBRARIES} ${SUIL_LIBRARIES} ${ZIX_LIBRARIES} ${PangoCairo_LIBRARIES} ${XFT_LIBRARIES} ${XRENDER_LIBRARIES} ${XINERAMA_LIBRARIES} fontconfig Xcursor Xfixes jpeg png dl m lrdf z # needed for FLTK 1.4 build ) target_include_directories ( non-mixer-xt PRIVATE ${FONTCONFIG_INCLUDE_DIRS} ${JACK_INCLUDE_DIRS} ${LRDF_INCLUDE_DIRS} ${LILV_INCLUDE_DIRS} ${SUIL_INCLUDE_DIRS} ${LIBLO_INCLUDE_DIRS} ${ZIX_INCLUDE_DIRS} ${CLAP_INCLUDEDIR} ${PangoCairo_INCLUDE_DIRS} ${XFT_INCLUDE_DIRS} ${XRENDER_INCLUDE_DIRS} ${XINERAMA_INCLUDE_DIRS} ) endif(EnableNTK) ``` -------------------------------- ### Conditional Build Configuration (NTK vs FLTK) Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt Configures build settings based on the 'EnableNTK' variable. If 'EnableNTK' is true, it prints a message indicating an NTK build. Otherwise, it prints an FLTK build message and defines additional FLTK-specific source files. ```cmake if(EnableNTK) message(STATUS "USING NTK BUILD") else(EnableNTK) message(STATUS "USING FLTK BUILD") set(FLTK_specific ../FL/Fl_Tooltip.cxx ../FL/Fl_Panzoomer.C ../FL/Fl_Theme_Chooser.cxx ../FL/Fl_Theme.cxx ../FL/GTK_Theme.cxx ../FL/Clean_Theme.cxx ../FL/Crystal_Theme.cxx ../FL/Gleam_Theme.cxx ../FL/Vector_Theme.cxx ../FL/themes.cxx ) endif(EnableNTK) ``` -------------------------------- ### Executable Target Definition Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt Defines the main executable target 'non-mixer-xt' and links all the previously defined source files, including program sources, FLTK-specific sources, and VST3 SDK sources. ```cmake add_executable (non-mixer-xt ${ProgSources} ${FLTK_specific} ${VST3SDK_SOURCES} src/main.C) ``` -------------------------------- ### Non Mixer XT Mixer Strip Controls Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Describes the user-configurable aspects of mixer strips, including names and colors, and the keyboard shortcuts for navigation and view switching. ```English Mixer strips have a name and color, each of which may be defined by the user. Names, but not colors, must be unique. Keyboard shortcuts: - '[': Move strip left - ']': Move strip right - 'X': Remove strip - 'n': Set strip width to narrow - 'w': Set strip width to wide - 'f': Switch to fader view - 's': Switch to signal view - 'Tab': Move focus to next strip - 'Shift-Tab': Move focus to previous strip - 'Menu key': Invoke context menu ``` -------------------------------- ### OSC Server Configuration Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Explains how to configure the UDP port for the OSC server using a command-line option and the console output for the OSC URL. ```APIDOC --osc-port OSC: ``` -------------------------------- ### CMake LADSPA, LV2, CLAP, and VST Support Configuration Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Enables or disables support for various audio plugin APIs (LADSPA, LV2, CLAP, VST2, VST3) by checking for required headers and libraries and defining corresponding preprocessor macros. ```cmake if (EnableLADSPASupport) pkg_check_modules(LRDF REQUIRED lrdf>=0.4.0) check_include_file (ladspa.h HAVE_LADSPA_H) if (NOT HAVE_LADSPA_H) message(FATAL_ERROR "Ladspa required but not found") endif () if (HAVE_LADSPA_H) add_definitions(-D'LADSPA_SUPPORT=1') endif() endif (EnableLADSPASupport) if (EnableLV2Support) pkg_check_modules(LV2 REQUIRED lv2>=1.10.0) pkg_check_modules(LILV REQUIRED lilv-0>=0.20.0) pkg_check_modules(SUIL REQUIRED suil-0>=0.10.0) pkg_check_modules(ZIX zix-0 REQUIRED) if (LV2_FOUND) add_definitions(-D'LV2_SUPPORT=1') endif(LV2_FOUND) endif (EnableLV2Support) if (EnableCLAPSupport) pkg_check_modules(CLAP clap REQUIRED) if (CLAP_FOUND) add_definitions(-D'CLAP_SUPPORT=1') endif (CLAP_FOUND) endif (EnableCLAPSupport) if (EnableVST2Support) add_definitions(-D'VST2_SUPPORT=1') endif (EnableVST2Support) if (EnableVST3Support) add_definitions(-D'VST3_SUPPORT=1') endif (EnableVST3Support) ``` -------------------------------- ### CMake Build Status Reporting Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Prints a summary of the build configuration, including optimization settings and the availability of various libraries and plugin SDKs. This helps users verify their build environment. ```cmake message(STATUS) message(STATUS "=========================================================") message(STATUS "Build Configuration for non-mixer-xt-${PACKAGE_VERSION} for ${CMAKE_SYSTEM_NAME}") message(STATUS "=========================================================") message(STATUS) macro(package_status foundvar pkg) if(${foundvar}) message(STATUS "${pkg} Yes") else() message(STATUS "${pkg} No") endif() endmacro() message (STATUS "___________________ Optimizations________________________" ) package_status(USE_SSE "Use sse. . . . . . . . . . . . . . . . . . . . . . . . .:") package_status(USE_SSE2 "Use sse2 . . . . . . . . . . . . . . . . . . . . . . . .:") message (STATUS) message (STATUS "______________________Library____________________________" ) package_status(PKG_CONFIG_FOUND "PkgConfig. . . . . . . . . . . . . . . . . . . . . . . .:") package_status(FLTK_FOUND "FLTK toolkit . . . . . . . . . . . . . . . . . . . . . .:") package_status(NTK_FOUND "NTK toolkit. . . . . . . . . . . . . . . . . . . . . . .:") package_status(X11_FOUND "X11 support. . . . . . . . . . . . . . . . . . . . . . .:") package_status(Threads_FOUND "pthread support (libpthread) . . . . . . . . . . . . . .:") package_status(MLOCK "mlock support. . . . . . . . . . . . . . . . . . . . . .:") package_status(LIBM "libm support . . . . . . . . . . . . . . . . . . . . . .:") package_status(LIBDL "libdl support. . . . . . . . . . . . . . . . . . . . . .:") package_status(ZIX_FOUND "zix-0 support. . . . . . . . . . . . . . . . . . . . . .:") package_status(JACK_FOUND "JACK Audio Connection Kit library. . . . . . . . . . . .:") package_status(FONTCONFIG_FOUND "Fontconfig support . . . . . . . . . . . . . . . . . . .:") if (EnableLADSPASupport) package_status(HAVE_LADSPA_H "LADSPA support . . . . . . . . . . . . . . . . . . . . .:") endif (EnableLADSPASupport) if (EnableLV2Support) package_status(LV2_FOUND "LV2 support. . . . . . . . . . . . . . . . . . . . . . .:") endif (EnableLV2Support) if (EnableCLAPSupport) package_status(CLAP_FOUND "CLAP support . . . . . . . . . . . . . . . . . . . . . .:") endif (EnableCLAPSupport) if (EnableVST2Support) package_status(CONFIG_VST3SDK "VST2 support . . . . . . . . . . . . . . . . . . . . . .:") endif (EnableVST2Support) if (EnableVST3Support) package_status(CONFIG_VST3SDK "VST3 support . . . . . . . . . . . . . . . . . . . . . .:") endif (EnableVST3Support) package_status(LILV_FOUND "LILV support . . . . . . . . . . . . . . . . . . . . . .:") package_status(SUIL_FOUND "SUIL support . . . . . . . . . . . . . . . . . . . . . .:") package_status(LIBLO_FOUND "Liblo support. . . . . . . . . . . . . . . . . . . . . .:") package_status(JACK_METADATA "Jack metadata support. . . . . . . . . . . . . . . . . .:") ``` -------------------------------- ### Linking Libraries Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt Links the necessary static and external libraries to the 'non-mixer-xt' executable. The specific libraries linked depend on whether it's an NTK build or an FLTK build. ```cmake if(EnableNTK) target_link_libraries (non-mixer-xt ${NTK_STATIC} ${NTK_STATIC_IMAGES} ${ExternLibraries}) else(EnableNTK) #FLTK ``` -------------------------------- ### Configure VST3 SDK Support Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt This snippet configures the path to the VST3 SDK if VST3 support is enabled and the SDK path has not already been set. It prints the configured path to the status log. ```cmake # Check for VST3 SDK. if (EnableVST3Support AND NOT CONFIG_VST3SDK) set (CONFIG_VST3SDK ${CMAKE_CURRENT_SOURCE_DIR}/mixer/src/vst3/vst3sdk) message(STATUS "CONFIG_VST3SDK = ${CONFIG_VST3SDK}") endif () ``` -------------------------------- ### Managing Mixer Strip Groups Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Instructions for managing groups for mixer strips within Non Mixer XT. This includes creating new groups, adding strips to existing groups, and removing strips from groups. ```APIDOC Create New Group: Select the group dropdown on a mixer strip. Choose 'New Group'. Enter a unique group name in the popup window. Add Strip to Existing Group: Select the group dropdown on the mixer strip. Choose the desired group name from the list. Remove Strip from Group: Select '---' from the group dropdown on the mixer strip. Remove Group: Groups are automatically destroyed when they contain zero strips. ``` -------------------------------- ### CMake NTK and FLTK Configuration Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Configures build options based on whether NTK (Non-Mixer Toolkit) or FLTK (Fast Light Toolkit) is enabled. This includes finding static libraries, checking for modules, and setting build-type definitions. ```cmake if(EnableNTK) find_library(NTK_STATIC NAMES libntk.a libntk.a.1 libntk.a.1.3.1001 PATHS /usr/local/lib /usr/local/lib64 REQUIRED) find_library(NTK_STATIC_IMAGES NAMES libntk_images.a libntk_images.a.1 libntk_images.a.1.3.1001 PATHS /usr/local/lib /usr/local/lib64 REQUIRED) pkg_check_modules(NTK ntk REQUIRED) find_package(JPEG REQUIRED) pkg_check_modules(XFIXES REQUIRED xfixes) pkg_check_modules(XINERAMA REQUIRED xinerama) pkg_check_modules(FONTCONFIG REQUIRED fontconfig>=0.22) pkg_check_modules(XFT REQUIRED xft) pkg_check_modules(XRENDER REQUIRED xrender) pkg_check_modules(XCURSOR REQUIRED xcursor) add_definitions(-D'BUILD_TYPE="Built with NTK static Library"') else(EnableNTK) #FLTK Build SET(FLTK_SKIP_OPENGL TRUE) find_library(FLTK_STATIC libfltk.a REQUIRED) find_library(FLTK_STATIC_IMAGES libfltk_images.a REQUIRED) find_package(FLTK REQUIRED) find_package(JPEG REQUIRED) if(FLTK_FOUND) mark_as_advanced(FORCE FLTK_BASE_LIBRARY) mark_as_advanced(FORCE FLTK_CONFIG_SCRIPT) mark_as_advanced(FORCE FLTK_DIR) mark_as_advanced(FORCE FLTK_FLUID_EXECUTABLE) mark_as_advanced(FORCE FLTK_FORMS_LIBRARY) mark_as_advanced(FORCE FLTK_GL_LIBRARY) mark_as_advanced(FORCE FLTK_IMAGES_LIBRARY) mark_as_advanced(FORCE FLTK_INCLUDE_DIR) mark_as_advanced(FORCE FLTK_MATH_LIBRARY) add_definitions(-D'FLTK_SUPPORT=1') endif(FLTK_FOUND) pkg_check_modules(XFIXES REQUIRED xfixes) pkg_check_modules(XINERAMA REQUIRED xinerama) pkg_check_modules(FONTCONFIG REQUIRED fontconfig>=0.22) pkg_check_modules(XFT REQUIRED xft) pkg_check_modules(XRENDER REQUIRED xrender) pkg_check_modules(XCURSOR REQUIRED xcursor) add_definitions(-D'BUILD_TYPE="Built with FLTK static library"') endif(EnableNTK) ``` -------------------------------- ### Clone NTK Repository Source: https://github.com/stazed/non-mixer-xt/blob/main/README.md Clones the unofficial NTK repository from GitHub. NTK is an alternative GUI toolkit for Non-Mixer-XT. This command is used if your distribution does not provide NTK or if you need a specific version. ```bash git clone https://github.com/Stazed/ntk-unofficial.git ``` -------------------------------- ### Clone jm2cv Utility Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Instructions for cloning the jm2cv utility, a JACK MIDI to Control Voltage daemon designed for use with Non-Mixer-XT. This utility helps in controlling parameters using MIDI. ```bash git clone git://fuzzle.org/jm2cv.git ``` -------------------------------- ### Uninstall Non-Mixer-XT Source: https://github.com/stazed/non-mixer-xt/blob/main/README.md Uninstalls Non-Mixer-XT from the system. This command should be run from the build directory. ```bash sudo make uninstall ``` -------------------------------- ### Clone CLAP Repository Source: https://github.com/stazed/non-mixer-xt/blob/main/README.md Clones the CLAP repository from GitHub. CLAP is an audio plugin API that Non-Mixer-XT supports. This command is used if CLAP is not available in your distribution's package manager. ```bash git clone https://github.com/free-audio/clap.git ``` -------------------------------- ### Build Options Configuration Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Defines various build options as CMake options, allowing users to enable/disable features like debugging, optimizations, SSE support, native optimizations, and different plugin types (LADSPA, LV2, CLAP, VST2, VST3). ```cmake option (BuildForDebug "Include gdb debugging support" OFF) option (EnableOptimizations "Enable optimizations" ON) option (EnableSSE "Enable SSE (default=automatic check)" ON) option (EnableSSE2 "Enable SSE2 (default=automatic check)" ON) option (NativeOptimizations "Enable native CPU optimizations" ON) option (EnableNTK "Use NTK toolkit for build" OFF) option (EnableLADSPASupport "Enable LADSPA plugin support" ON) option (EnableLV2Support "Enable LV2 plugin support" ON) option (EnableCLAPSupport "Enable CLAP plugin support" ON) option (EnableVST2Support "Enable VST(2) plugin support" ON) option (EnableVST3Support "Enable VST3 plugin support" ON) option (EnablePangoCairo "Optional: Enable PangoCairo needed by some plugins" ON) ``` -------------------------------- ### Pango Cairo and Optimization Flags Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Configures support for Pango Cairo rendering and various optimization levels including SSE, SSE2, and native optimizations. These options impact graphical rendering and performance. ```cmake if (EnablePangoCairo) package_status(PangoCairo_FOUND "PangoCairo support . . . . . . . . . . . . . . . . . . .:") endif(EnablePangoCairo) package_status(EnablePangoCairo "Enable Pango Cairo support. . . . . . . . . . . . . . . .:") package_status(EnableOptimizations "Use optimizations. . . . . . . . . . . . . . . . . . .:") package_status(EnableSSE "Use sse. . . . . . . . . . . . . . . . . . . . . . . . .:") package_status(EnableSSE2 "Use sse2 . . . . . . . . . . . . . . . . . . . . . . . .:") package_status(NativeOptimizations "Native optimizations . . . . . . . . . . . . . . . . . .:") ``` -------------------------------- ### OSC Control Path Format Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Defines the structure of automatically generated OSC path names for controlling module parameters. It includes details on how to copy paths and the behavior of the '/unscaled' suffix. ```APIDOC /strip/[STRIP_NAME]/[MODULE_NAME]/[PARAMETER_NAME] /strip/[STRIP_NAME]/[MODULE_NAME]/[PARAMETER_NAME]/unscaled ``` -------------------------------- ### CMake Dependency Management Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Finds and includes necessary packages and libraries for the project, such as PkgConfig, X11, Threads, PangoCairo, JACK, and liblo. It also handles conditional compilation based on feature flags. ```cmake find_package (PkgConfig REQUIRED) #dependencies find_package(X11 REQUIRED) find_package(Threads REQUIRED) if(THREADS_HAVE_PTHREAD_ARG) set_property(TARGET non-mixer-xt PROPERTY COMPILE_OPTIONS "-pthread") set_property(TARGET non-mixer-xt PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") endif() #Being proactive here. Some plugins (X42 X11 embedded) will unload the pangocairo #library when the plugin is removed and then cannot find it on a second add causing #a freeze or crash. So this will make the library available to any plugin that needs #it. Though this should really be fixed by the plugin developer. if (EnablePangoCairo) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) find_package(PangoCairo REQUIRED) endif (EnablePangoCairo) pkg_check_modules(JACK REQUIRED jack>=0.115.6) pkg_check_modules(LIBLO liblo>=0.26 REQUIRED) ``` -------------------------------- ### VST3 SDK Integration Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt Conditionally adds definitions and source files from the VST3 SDK if the 'CONFIG_VST3SDK' variable is set. This enables VST3 plugin support by including necessary SDK components. ```cmake if (CONFIG_VST3SDK) add_definitions(-DRELEASE) set (VST3SDK_SOURCES ${CONFIG_VST3SDK}/base/source/baseiids.cpp ${CONFIG_VST3SDK}/base/thread/source/flock.cpp ${CONFIG_VST3SDK}/public.sdk/source/common/commoniids.cpp ${CONFIG_VST3SDK}/public.sdk/source/vst/vstinitiids.cpp ${CONFIG_VST3SDK}/pluginterfaces/base/coreiids.cpp ${CONFIG_VST3SDK}/pluginterfaces/base/funknown.cpp ) endif () ``` -------------------------------- ### VST3 SDK Include Directory Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/CMakeLists.txt Conditionally adds the VST3 SDK include directory to the target if 'EnableVST3Support' and 'CONFIG_VST3SDK' are both enabled. ```cmake if (EnableVST3Support AND CONFIG_VST3SDK) target_include_directories (non-mixer-xt PRIVATE ${CONFIG_VST3SDK}) endif() ``` -------------------------------- ### Find and Check Libraries Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt This section finds the 'dl' and 'm' libraries. It reports the location if found and raises a fatal error if either library is required but not found. ```cmake find_library (LIBDL dl) if (LIBDL) message(STATUS "Found dl in ${LIBDL}") else (LIBDL) message(FATAL_ERROR "dl required but not found") endif (LIBDL) find_library (LIBM m) if (LIBM) message(STATUS "Found m in ${LIBM}") else (LIBM) message(FATAL_ERROR "m required but not found") endif (LIBM) ``` -------------------------------- ### System and Latency Status Checks Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Checks the status of system components and configurations, specifically noting support for Jack port latency ranges and built-in alignment assumptions. ```cmake package_status(JACK_LATENCY_RANGE "Jack port latency range support. . . . . . . . . . . . .:") package_status(HAVE_BUILTIN_ALIGNED "Has builtin assume aligned . . . . . . . . . . . . . . .:") ``` -------------------------------- ### Non-Mixer-XT OSC Commands: Signal Subscription Source: https://github.com/stazed/non-mixer-xt/blob/main/OSC.md Enables and disables real-time updates for input signals. Requires an initial 'hello' command to register the controller. ```APIDOC Register Controller: /signal/hello ,ss name url name: Controller name url: Server URL for updates (e.g., osc.udp://127.0.0.1:12345) Subscribe to Signal Changes: /signal/connect ,ss destination_path source_path destination_path: OSC path for update messages source_path: OSC path of the signal to monitor (input signals only) Unsubscribe from Signal Changes: /signal/disconnect ,ss destination_path source_path destination_path: OSC path for update messages source_path: OSC path of the signal to stop monitoring ``` -------------------------------- ### Non-Mixer-XT Project Renaming Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Demonstrates how to rename a Non-Mixer-XT project directory, which is a self-contained unit for storing project-specific settings and metadata. ```bash mv Project-A Project-B ``` -------------------------------- ### Non Mixer XT Module Overview Source: https://github.com/stazed/non-mixer-xt/blob/main/mixer/doc/MANUAL.html Details the various built-in modules available in Non Mixer XT for audio processing and I/O, including their functions and any specific requirements. ```English Built-in Modules: - JACK: Performs JACK I/O. - Gain: Applies gain in dB. - Meter: Digital Peak Meter. - Mono Pan: Performs intensity panning of a mono signal into a stereo signal. - Aux: Provides auxiliary outputs. - Spatializer: Provides advanced Ambisonics spatialization with distance simulation. - Plugin: Hosts a LADSPA/LV2/CLAP/VST(2)/VST3* plugin. Requires prior plugin scanning. ``` -------------------------------- ### Audio Plugin Support Configuration Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Defines options to enable or disable support for various audio plugin formats such as LADSPA, LV2, CLAP, VST2, and VST3. These settings control which audio processing capabilities are included in the build. ```cmake package_status(EnableLADSPASupport "Build LADSPA support . . . . . . . . . . . . . . . . . . .:") package_status(EnableLV2Support "Build LV2 support. . . . . . . . . . . . . . . . . . . .:") package_status(EnableCLAPSupport "Build CLAP support . . . . . . . . . . . . . . . . . . .:") package_status(EnableVST2Support "Build VST2 support . . . . . . . . . . . . . . . . . . .:") package_status(EnableVST3Support "Build VST3 support . . . . . . . . . . . . . . . . . . .:") ``` -------------------------------- ### CMake Build Configuration Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Configures the build process for the non-mixer-xt project. It handles setting build types, compiler flags for optimizations, and conditionally includes support for various libraries and plugin formats based on user-defined variables. ```cmake if(NOT TARGET uninstall) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif() mark_as_advanced (CMAKE_BUILD_TYPE) mark_as_advanced (CMAKE_INSTALL_PREFIX) mark_as_advanced (LIBDL) mark_as_advanced (LIBM) if (BuildForDebug) set (CMAKE_BUILD_TYPE "Debug") set (CMAKE_CXX_FLAGS_DEBUG ${BuildOptionsDebug}) else (BuildForDebug) set (CMAKE_BUILD_TYPE "Release") set (CMAKE_CXX_FLAGS_RELEASE ${BuildOptionsBasic}) add_definitions(-D'NDEBUG=1') if(EnableOptimizations) if (SUPPORT_SSE) if(EnableSSE) if(EnableSSE2) set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BuildOptions_SSE2}") set (USE_SSE2 "${SUPPORT_SSE}") set (USE_SSE "${SUPPORT_SSE}") #uses both else(EnableSSE2) set (USE_SSE "${SUPPORT_SSE}") set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BuildOptions_SSE}") endif(EnableSSE2) endif(EnableSSE) endif (SUPPORT_SSE) if(BuildOptions_Native) set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BuildOptions_Native}") set (USE_NATIVE "") endif(BuildOptions_Native) else(EnableOptimizations) set (USE_SSE2 "") set (USE_SSE "") endif(EnableOptimizations) endif (BuildForDebug) add_definitions(-D'BUILD_TYPE_CMAKE="${CMAKE_BUILD_TYPE}"') add_subdirectory(mixer) add_subdirectory(mixer/icons) add_subdirectory(mixer/doc) add_subdirectory(mixer/pixmaps) ``` -------------------------------- ### CMake JACK Metadata and Latency Check Source: https://github.com/stazed/non-mixer-xt/blob/main/CMakeLists.txt Checks for the existence of JACK metadata functions and JACK port latency range functions, defining preprocessor macros if found. This helps determine JACK API compatibility. ```cmake include(CheckSymbolExists) set(CMAKE_REQUIRED_LIBRARIES "jack") check_symbol_exists(jack_get_property "jack/metadata.h" JACK_METADATA) if(JACK_METADATA) add_definitions(-D'HAVE_JACK_METADATA=1') message(STATUS "Found jack metadata") else(JACK_METADATA) message(STATUS "Jack metadata not found") endif(JACK_METADATA) check_symbol_exists(jack_port_get_latency_range "jack/jack.h" JACK_LATENCY_RANGE) if(JACK_LATENCY_RANGE) add_definitions(-D'HAVE_JACK_PORT_GET_LATENCY_RANGE=1') message(STATUS "Found jack_port_get_latency_range") else(JACK_LATENCY_RANGE) message(STATUS "jack_port_get_latency_range not found") endif(JACK_LATENCY_RANGE) ``` -------------------------------- ### Clone ZIX Repository Source: https://github.com/stazed/non-mixer-xt/blob/main/README.md Clones the ZIX repository from GitHub. ZIX is an optional dependency for LV2 support in Non-Mixer-XT. This is useful if ZIX is not available in your distribution's package manager. ```bash git clone https://github.com/drobilla/zix.git ```