LMMS Progress Report: January 2025

Discuss the latest LMMS news with other forum members.

LMMS Progress Report: January 2025

This is the beginning of a monthly series of progress reports from LMMS contributors.

For several years now, LMMS development discussions have taken place primarily on the Discord server in channels reserved specifically for devs. The closed-off nature of this has left both users and even other developers in the dark about the current direction and recent progress of LMMS development.

We hope that these progress reports will serve as a means to publicly communicate everything new in LMMS nightly, exciting work that's in progress, goals for the next month, and whatever else we'd like to share.

It will also serve as a place for constructive feedback, so if you have any suggestions, please share below!

That said...

Nightly News

January was a fairly productive month for LMMS development. Although relatively little changed for nightly users as far as features and bug fixes go, support for new platforms was added and significant infrastructural improvements were made.

  • Windows MSVC builds available for download (lmms.io #391)\
    For LMMS on Windows, we are now offering nightly versions built natively with MSVC. These MSVC builds have existed for quite some time, but have not been readily available to most users until now. We are offering them for download on lmms.io alongside the cross-compiled MinGW builds that were previously the only option. Find them on our downloads page under the Nightly Versions section.

    So why choose MSVC builds over MinGW? Due to up-to-date dependencies, Windows MSVC builds have support for LV2 plugins, per-note panning in Sf2Player, and support for MP3 and Opus samples. The downside is the current lack of Gig Player support. As a result of being nightly-only and having limited usage, there is also a higher potential for undiscovered bugs, so please let us know if you discover any MSVC-specific issues!

  • CPack packaging refactor and Linux ARM64 support (#7252)\
    This PR by tresf and messmerd refactored the AppImage/DMG packaging step used by our automated builds and also added support for Linux on ARM64. It removed our usage of linuxdeployqt, a tool for bundling and AppImage creation which is unfortunately tied to Ubuntu 20.04's glibc, and replaced it with linuxdeploy which gives us more control over which Ubuntu version we build with and target. This may help with ongoing efforts to update our compilers and dependencies.

  • Maximize button for resizable instruments (#7514)\
    Thanks to michaelgregorius and others, SlicerT can now be maximized, allowing for a better user experience when creating and modifying slices.

  • Vectorscope render fix (#7652)\
    Another contribution from michaelgregorius, the Vectorscope plugin has been revamped for significant performance improvements and fixes for Wayland.

Other changes

  • Change tooltip window flags (#7613)
  • Bump project year (#7645)
  • Fix icons in Spectrum Analyzer (#7667)
  • Improve mono compatibility with LADSPA plugins (#7674)

For developers

  • Building on Windows using MSYS2 (#7526)\
    Thanks to bratpeki and others, developers on Windows now have the option to build LMMS using MSYS2 for 3rd party dependencies. Instructions can be found here.

  • gprof profiling (#7547)\
    Thanks to Rossmaxx, gprof profiling support has been added. Just use the CMake option WANT_DEBUG_GPROF to enable it.

  • MSYS2 CLANGARM64 support (#7644)\
    Thanks to tresf, bratpeki, and others, LMMS can now be built for Windows on ARM64 using Clang and MSYS2. Nightly builds are not available yet, but once GitHub makes their Windows ARM64 build runners publicly available (hopefully within the next few months), we plan to start providing nightly builds.

  • Add VST support for Gentoo linux (#7665)

In progress

January also saw several newly-opened PRs that add or extend features or fix bugs, as well as some older PRs that received significant progress. Below is a non-exhaustive list.

Nearing completion

  • Improve waveform rendering performance (#7366)\
    A performance improvement and bug fix that should be noticable when using large samples in sample tracks, AudioFileProcessor, SlicerT, and elsewhere.

  • Clip splitting and resizing (#7477)\
    The Song Editor's knife tool currently only allows users to split sample clips, but this PR by regulus79 aims to extend support to all types of clips. It also enables resizing all types of clips from both ends. There has been significant progress recently and we hope to merge it soon.

  • Sample cache (#7497)\
    This PR adds caching for all samples used by a project in order to greatly improve memory usage and project load times for projects will lots of samples.

In the works

  • Detachable windows (#3532)\
    This is a very old PR which has been developed on and off over the years by several different individuals. Thanks to recent work by SpomJ, it is finally nearing completion. However, an update to our Qt version on Linux may be needed to fix some bugs before it is merged.

  • Audio recording (#5990)\
    Audio recording is a frequently requested feature, and this PR implements it. However, progress has stalled over the question of how to store newly-recorded audio. Some PRs have been opened which attempt to solve this: #7538, #7627.

  • Multi-channel plugins (#7459)\
    LMMS currently does not support more than 2 audio channels in or out of an audio plugin. This limitation prevents the full usage of plugins such as band splitters and drum machines. PR #7459 changes that, bringing a flexible new redesign of how plugins process audio and introducing a "Plugin Pin Connector" for full control over how audio is routed in and out of plugins based on a REAPER feature of the same name.

  • SlewDistortion (#7641)\
    This is a new 2-band slew rate limiter and distortion plugin from LostRobotMusic with the GUI made by thismoon. The PR is currently stalled due to an elusive bug where the oversampling class erroneously produces a NaN value every hour or so. Any help tracking down this bug would be greatly appreciated!

  • Context menu items for automatable controls (#7317)
  • MIDI reversing (#7606)
  • dB scale faders (#7636)
  • Control surface support (MCU protocol) (#7649)

Plus several more PRs that have not been mentioned here.

Future

We are focusing on some of the remaining milestone issues that we'd like to complete before we release LMMS 1.3. We are aware that there hasn't been a new stable version since July 2020 or a new alpha since April 2021, and like many users, most devs are also eager to see the next version of LMMS released. There is a lot in store for 1.3, but also some regressions that need to be fixed first.

Goals for February

We plan to continue working on the above in-progress items, as well as some important milestone issues such as broken VSTs on Linux AppImages (#7669). There are also plans for further infrastructural improvements, particularly for Linux and the cross-compiled Windows builds, since they are blocking us from completing the detachable windows PR (#3532) and using most C++20 features. We also plan to update our build dependencies so that Windows and Linux nightly users can finally use MP3 and Opus samples.

Mid-term goals

In the mid-term, we would like to complete the multi-channel plugin PR (#7459) which is holding back progress on the UI for LV2 plugins (#7201). Work on CLAP plugin support (#7199) is also planned to resume once multi-channel plugin support is ready. Audio recording (#5990) will hopefully make it into nightly in this timeframe as well.

Long-term goals

In recent years, there has been more focus by devs on real-time safety and memory safety, and some work has been done to address these issues, though there is still a long road ahead. We have also been working to eliminate our dependency on Qt for any non-GUI code and refactor some old parts of the codebase. The goal is to eventually split LMMS into core and gui components which could allow for more GUI options besides Qt (see this discussion and #7341). LMMS plugins should also be separated from the rest of LMMS and given a standardized API. And as shown by the recent gprof profiling support, attention is being paid to performance as well.

As far as features go, eventually we would like to see full audio routing capabilities in LMMS, which would enable proper sidechaining for example. We would also like to see LV2 and CLAP plugin support that not only meets but surpasses that of our VST support. Sample tracks are lacking in functionality and ideas have been floated for improving them. We also have a long-term UI redesign goal.

New contributors

We had 4 new contributors last month, including 3 testers.

  • bratpeki
  • slidey-wotter
  • Spacemagehq
  • szeli1

Thank you for your contributions!

Closing thoughts

Thanks for reading our first progress report. We have a lot of work ahead of us, but if you'd like to contribute to LMMS's development, it could go faster. Whether you're a developer or a tester, it all helps!

If you have any questions or suggestions, please let us know below or on our Discord.

Until next month, happy music making!

Thanks.. this is good !