Download LMMS
Downloading and using LMMS is free! Just choose the operating system you want to run LMMS on:
Install LMMS on Linux
Click one of the buttons below to download LMMS for Linux.
Unless you were directed here to test a pull request, please download an official build from the main download page instead.
Pull Request #7199
LinuxLMMS #7199 @5f3f699 Linux ARM64
LMMS #7199 @5f3f699
Initial support for CLAP plugins
This has been in the works for over a year now, so I'm really excited to share it.
There are a number of known issues (listed below) that I'd like to fix before it's ready to merge, which is why I'm marking this as a draft for now.
I've decided to create this draft PR because until now I've only been running this on Linux Mint, so I need people who can test it on Mac and Windows. Don't expect a finished product yet - there will be bugs and even crashes! - though many of the free CLAP plugins listed on https://clapdb.tech/ should run without major issues. On Linux at least.
Other than the parameter and events code, I don't see much significant refactoring needed, and I'm pretty satisfied with the current design. Because of this, feel free to leave code reviews if you'd like. Fortunately most of the code is isolated from the rest of the LMMS codebase, so that will make things a bit easier, though it's still quite a bit for one PR.
Features
- CLAP instrument and audio effect support
- CLAP extensions supported:
- log
- note-ports
- params
- preset-load
- state-context
- state
- thread-check
- timer-support
- CLAP plugin discovery at startup
- Integration within LMMS with a look-and-feel similar to LV2
- CLAP preset support
- Discovery, metadata loading, and storage
- Preset activation
- Loading and saving (WIP)
- Simple preset selector widget modeled after Vestige's
- Most importantly, it's a generic yet robust implementation that other plugin types (VST, LV2, LMMS-native, etc) can use in the future.
- Generic L/R channel routing configuration
- Currently used by mono CLAP plugins, though could be used elsewhere in the future
- Has a combo box for users to pick the desired configuration
- CLAP transport implementation (VST sync equivalent)
- Partial GUI implementation (currently disabled)
- Introduced
WindowEmbed
class and used it to improve some other parts of LMMS, though maybe that work should be moved to a separate PR
- Introduced
- Pedantic sanity checks to ensure plugin and host logic is correct and API calls are performed on the correct threads
- Environment variables
CLAP_PATH
- Specifies additional CLAP plugin search paths beyond the system defaults
- Part of the CLAP standard
LMMS_CLAP_PATH
- List of directories that replaces all other CLAP plugin search paths in LMMS
export LMMS_CLAP_PATH=
effectively disables CLAP support at startup
LMMS_CLAP_DEBUG=1
- Enables verbose debug output
- LoMMuS
Known Issues
- Parameters are buggy!
- I've barely touched them since I implemented them a year ago, so I need to revisit this
- Crashes can occur during automation
- Parameter and midi events may occur in the wrong order, possible threading issues, etc.
- Some plugin-specific issues (see below)
- Active preset doesn't carry over when cloning an instrument
- Memory leaks - though it's often difficult to tell whether they are from LMMS or from the plugins
- ...
Plugins with known issues
- Crash / hang:
- Regency (this didn't used to crash, so it's probably a recent regression)
- Firefly Synth
- ...
- Parameter issues:
- Odin2
- MPaint
- ...
TODO for this PR
- Fix known issues (or at least the major ones) and any that come up during testing
- Refactor/rethink event handling
- Better parameter controls
- Tooltips for controls other than CustomTextKnob
- ComboBox for enum parameters
- Implement the Save Preset functionality for saving presets to disk
- The modifications I made to CustomTextKnob are pretty hacky - need to redo that
- Use SVG files instead of PNG
- Better usage of note-ports?
- Remove clap-helpers dependency?
- Move preset discovery to a worker thread? (using
lmms::ThreadPool
?) - Use CDATA instead of an XML attribute for storing CLAP state
- Incorporate changes from multi-channel plugins PR
- Pin connector + multi-channel support
- Channel names
- CLAP's dynamic in-place processing support (stretch goal)
- Audio port configurations (stretch goal)
- GUI??? (might depend on how difficult events from the plugin UI are to handle)
- ...
TODO for future PRs
I don't plan for this PR to be the end of my contributions to CLAP support in LMMS.
In the future I'd like to add more features:
- GUI (if I don't add it to this PR)
- Thread pool extension
- A proper parameter window
- A proper preset browser to replace the simple QMenu currently in use
- Per-note pitch bends and panning
- MIDI MPE support
- Sidechaining
- Transport events?
- ???
My goal is for CLAP support in LMMS to far outclass our VST support so that we have little reason to use VSTs again.
Testing
This branch has not been tested on any OS other than Linux Mint, so I'd appreciate testing on Windows and Mac.
If you find any bugs not listed above, please let me know either here or on Discord. Thanks!
Special thanks to
- JohannesLorenz, whose previous work with LV2 was my guide for integrating this CLAP host into LMMS
- The CLAP Team, for the excellent CLAP API and reference host
.AppImage
executable before running:chmod +x ~/Downloads/lmms-*.AppImage
Install LMMS on Windows
Click one of the buttons below to download LMMS for Windows
Unless you were directed here to test a pull request, please download an official build from the main download page instead.
Pull Request #7199
Windows ARM64LMMS #7199 @5f3f699 Windows
LMMS #7199 @5f3f699 Windows (msvc)
LMMS #7199 @5f3f699
Initial support for CLAP plugins
This has been in the works for over a year now, so I'm really excited to share it.
There are a number of known issues (listed below) that I'd like to fix before it's ready to merge, which is why I'm marking this as a draft for now.
I've decided to create this draft PR because until now I've only been running this on Linux Mint, so I need people who can test it on Mac and Windows. Don't expect a finished product yet - there will be bugs and even crashes! - though many of the free CLAP plugins listed on https://clapdb.tech/ should run without major issues. On Linux at least.
Other than the parameter and events code, I don't see much significant refactoring needed, and I'm pretty satisfied with the current design. Because of this, feel free to leave code reviews if you'd like. Fortunately most of the code is isolated from the rest of the LMMS codebase, so that will make things a bit easier, though it's still quite a bit for one PR.
Features
- CLAP instrument and audio effect support
- CLAP extensions supported:
- log
- note-ports
- params
- preset-load
- state-context
- state
- thread-check
- timer-support
- CLAP plugin discovery at startup
- Integration within LMMS with a look-and-feel similar to LV2
- CLAP preset support
- Discovery, metadata loading, and storage
- Preset activation
- Loading and saving (WIP)
- Simple preset selector widget modeled after Vestige's
- Most importantly, it's a generic yet robust implementation that other plugin types (VST, LV2, LMMS-native, etc) can use in the future.
- Generic L/R channel routing configuration
- Currently used by mono CLAP plugins, though could be used elsewhere in the future
- Has a combo box for users to pick the desired configuration
- CLAP transport implementation (VST sync equivalent)
- Partial GUI implementation (currently disabled)
- Introduced
WindowEmbed
class and used it to improve some other parts of LMMS, though maybe that work should be moved to a separate PR
- Introduced
- Pedantic sanity checks to ensure plugin and host logic is correct and API calls are performed on the correct threads
- Environment variables
CLAP_PATH
- Specifies additional CLAP plugin search paths beyond the system defaults
- Part of the CLAP standard
LMMS_CLAP_PATH
- List of directories that replaces all other CLAP plugin search paths in LMMS
export LMMS_CLAP_PATH=
effectively disables CLAP support at startup
LMMS_CLAP_DEBUG=1
- Enables verbose debug output
- LoMMuS
Known Issues
- Parameters are buggy!
- I've barely touched them since I implemented them a year ago, so I need to revisit this
- Crashes can occur during automation
- Parameter and midi events may occur in the wrong order, possible threading issues, etc.
- Some plugin-specific issues (see below)
- Active preset doesn't carry over when cloning an instrument
- Memory leaks - though it's often difficult to tell whether they are from LMMS or from the plugins
- ...
Plugins with known issues
- Crash / hang:
- Regency (this didn't used to crash, so it's probably a recent regression)
- Firefly Synth
- ...
- Parameter issues:
- Odin2
- MPaint
- ...
TODO for this PR
- Fix known issues (or at least the major ones) and any that come up during testing
- Refactor/rethink event handling
- Better parameter controls
- Tooltips for controls other than CustomTextKnob
- ComboBox for enum parameters
- Implement the Save Preset functionality for saving presets to disk
- The modifications I made to CustomTextKnob are pretty hacky - need to redo that
- Use SVG files instead of PNG
- Better usage of note-ports?
- Remove clap-helpers dependency?
- Move preset discovery to a worker thread? (using
lmms::ThreadPool
?) - Use CDATA instead of an XML attribute for storing CLAP state
- Incorporate changes from multi-channel plugins PR
- Pin connector + multi-channel support
- Channel names
- CLAP's dynamic in-place processing support (stretch goal)
- Audio port configurations (stretch goal)
- GUI??? (might depend on how difficult events from the plugin UI are to handle)
- ...
TODO for future PRs
I don't plan for this PR to be the end of my contributions to CLAP support in LMMS.
In the future I'd like to add more features:
- GUI (if I don't add it to this PR)
- Thread pool extension
- A proper parameter window
- A proper preset browser to replace the simple QMenu currently in use
- Per-note pitch bends and panning
- MIDI MPE support
- Sidechaining
- Transport events?
- ???
My goal is for CLAP support in LMMS to far outclass our VST support so that we have little reason to use VSTs again.
Testing
This branch has not been tested on any OS other than Linux Mint, so I'd appreciate testing on Windows and Mac.
If you find any bugs not listed above, please let me know either here or on Discord. Thanks!
Special thanks to
- JohannesLorenz, whose previous work with LV2 was my guide for integrating this CLAP host into LMMS
- The CLAP Team, for the excellent CLAP API and reference host
Install LMMS on macOS
Click one of the buttons below to download LMMS for macOS
Unless you were directed here to test a pull request, please download an official build from the main download page instead.
Pull Request #7199
macOSLMMS #7199 @5f3f699 macOS Intel
LMMS #7199 @5f3f699
Initial support for CLAP plugins
This has been in the works for over a year now, so I'm really excited to share it.
There are a number of known issues (listed below) that I'd like to fix before it's ready to merge, which is why I'm marking this as a draft for now.
I've decided to create this draft PR because until now I've only been running this on Linux Mint, so I need people who can test it on Mac and Windows. Don't expect a finished product yet - there will be bugs and even crashes! - though many of the free CLAP plugins listed on https://clapdb.tech/ should run without major issues. On Linux at least.
Other than the parameter and events code, I don't see much significant refactoring needed, and I'm pretty satisfied with the current design. Because of this, feel free to leave code reviews if you'd like. Fortunately most of the code is isolated from the rest of the LMMS codebase, so that will make things a bit easier, though it's still quite a bit for one PR.
Features
- CLAP instrument and audio effect support
- CLAP extensions supported:
- log
- note-ports
- params
- preset-load
- state-context
- state
- thread-check
- timer-support
- CLAP plugin discovery at startup
- Integration within LMMS with a look-and-feel similar to LV2
- CLAP preset support
- Discovery, metadata loading, and storage
- Preset activation
- Loading and saving (WIP)
- Simple preset selector widget modeled after Vestige's
- Most importantly, it's a generic yet robust implementation that other plugin types (VST, LV2, LMMS-native, etc) can use in the future.
- Generic L/R channel routing configuration
- Currently used by mono CLAP plugins, though could be used elsewhere in the future
- Has a combo box for users to pick the desired configuration
- CLAP transport implementation (VST sync equivalent)
- Partial GUI implementation (currently disabled)
- Introduced
WindowEmbed
class and used it to improve some other parts of LMMS, though maybe that work should be moved to a separate PR
- Introduced
- Pedantic sanity checks to ensure plugin and host logic is correct and API calls are performed on the correct threads
- Environment variables
CLAP_PATH
- Specifies additional CLAP plugin search paths beyond the system defaults
- Part of the CLAP standard
LMMS_CLAP_PATH
- List of directories that replaces all other CLAP plugin search paths in LMMS
export LMMS_CLAP_PATH=
effectively disables CLAP support at startup
LMMS_CLAP_DEBUG=1
- Enables verbose debug output
- LoMMuS
Known Issues
- Parameters are buggy!
- I've barely touched them since I implemented them a year ago, so I need to revisit this
- Crashes can occur during automation
- Parameter and midi events may occur in the wrong order, possible threading issues, etc.
- Some plugin-specific issues (see below)
- Active preset doesn't carry over when cloning an instrument
- Memory leaks - though it's often difficult to tell whether they are from LMMS or from the plugins
- ...
Plugins with known issues
- Crash / hang:
- Regency (this didn't used to crash, so it's probably a recent regression)
- Firefly Synth
- ...
- Parameter issues:
- Odin2
- MPaint
- ...
TODO for this PR
- Fix known issues (or at least the major ones) and any that come up during testing
- Refactor/rethink event handling
- Better parameter controls
- Tooltips for controls other than CustomTextKnob
- ComboBox for enum parameters
- Implement the Save Preset functionality for saving presets to disk
- The modifications I made to CustomTextKnob are pretty hacky - need to redo that
- Use SVG files instead of PNG
- Better usage of note-ports?
- Remove clap-helpers dependency?
- Move preset discovery to a worker thread? (using
lmms::ThreadPool
?) - Use CDATA instead of an XML attribute for storing CLAP state
- Incorporate changes from multi-channel plugins PR
- Pin connector + multi-channel support
- Channel names
- CLAP's dynamic in-place processing support (stretch goal)
- Audio port configurations (stretch goal)
- GUI??? (might depend on how difficult events from the plugin UI are to handle)
- ...
TODO for future PRs
I don't plan for this PR to be the end of my contributions to CLAP support in LMMS.
In the future I'd like to add more features:
- GUI (if I don't add it to this PR)
- Thread pool extension
- A proper parameter window
- A proper preset browser to replace the simple QMenu currently in use
- Per-note pitch bends and panning
- MIDI MPE support
- Sidechaining
- Transport events?
- ???
My goal is for CLAP support in LMMS to far outclass our VST support so that we have little reason to use VSTs again.
Testing
This branch has not been tested on any OS other than Linux Mint, so I'd appreciate testing on Windows and Mac.
If you find any bugs not listed above, please let me know either here or on Discord. Thanks!
Special thanks to
- JohannesLorenz, whose previous work with LV2 was my guide for integrating this CLAP host into LMMS
- The CLAP Team, for the excellent CLAP API and reference host
sudo xattr -d -r com.apple.quarantine /Applications/LMMS.app