News

LMMS announcements mirrored from GitHub Discussions

LMMS Progress Report: April 2025

Welcome back to our monthly series of LMMS Progress Reports!

If you missed last month's report, you can find it here.

Nightly News

April was going to be a fairly idle month for LMMS development, but our fortunes turned around at the very end of the month with the completion of a few significant PRs.
In total 15 PRs were merged last month.

  • Add splitting (and resizing) to all types of clips (#7477)

    At last it's here! Thanks to regulus79, all types of clips can now be cut using the knife tool and resized from either end - not just sample clips. By default, splitting clips is nondestructive, meaning that the clip is cloned and the playable portions of the two resulting clips are adjusted to create the effect of splitting the clip in two. This may be a less intuitive approach, but it is relatively simple and avoids a number of the difficulties inherent to "destructive" or "hard" splitting where clips and their contents are truly split in half. Though for MIDI clips, hard splitting can be enabled by holding down the Shift key while splitting a clip. In the future, we may implement hard splitting for automation clips too if we can figure out how to correctly split cubic Hermite splines.

  • Add MIDI Reversing (#7606)

    Again from regulus79, this PR adds a new action to the Piano Roll's tool dropdown allowing any selected MIDI notes to be reversed. A corresponding keyboard shortcut Shift+R was also added.

  • Add option to favorite items in the file browser (#7753)

    AW1534 improved the file browser by adding the ability to favorite samples, presets, and other files. Favorited items are organized in a new "My Favorites" tab for quick access.

  • Global Spacebar Play (#7762)

    This PR improves the way Spacebar presses are handled for playing/stopping/pausing the transport by applying the action to the last played editor regardless of whether it is in focus or not. A couple known regressions from this PR are being handled by #7870 which hasn't been merged yet.

  • SVG graphics (#7791, #7803)

    Work has continued on replacing our PNG graphics with scalable SVG graphics. In April, the Vestige and VST effect graphics were replaced by qnebra while the Stereo Matrix graphics were replaced by rubiefawn. There's a significant amount of work left given the number of native plugins LMMS has, but we've made good progress so far.

  • Add Windows arm64 builds (#7848)

    Thanks to tresf, we now provide nightly builds for Windows on ARM64. It's quite experimental, so please let us know if you experience any issues!

Other changes:

  • [Follow up] Improve performance when rendering sample waveforms (#7695)
  • Handle SIGINT (#7698)
  • Fix Clip Creation Quantization in Song Editor (#7763)
  • Update qt5-x11embed to latest version (#7825)
  • Fix memory leak in RemoteVstPlugin::loadPresetFile (#7827)
  • Auto assign MIDI device when track is created (#7835)
  • ZynAddSubFX filter FREQ brought back to 64, fix lowpass issues (#7844)
  • Add clangd cache to .gitignore (#7846)

In progress

In the past month, 26 new PRs were opened, of which 6 have already been merged. Below is a non-exhaustive list of both new and old PRs which were worked on in the past month.

Nearing completion

  • Refactor PortAudio backend (#7444)

    sakertooth refactored the Windows PortAudio backend in order to dramatically simplify the code and fix DirectSound and MME when using PortAudio.

  • Stream sample previews (#7705)

    In order to allow previewing large sample files, sakertooth refactored the sample preview code to stream the samples rather than load entire samples into memory.

  • Pitch Bending Directly in the Piano Roll (#7759)

    This PR by regulus79 was mistakenly left out of last month's progress report. The ability to edit pitch bends directly in the Piano Roll rather than in a separate automation editor window is a great improvement.

In the works

  • Add ability to drag files to and from external applications (#7849)

    This PR by AW1534 allows dragging files such as samples from outside LMMS and dropping them in sample tracks, SlicerT, and elsewhere. It also supports dragging and dropping files in the opposite direction.

  • Improve search behavior in the file browser (#7679)

  • Add Undo/Redo History (#7821)

    This PR by regulus79 adds a sidebar menu showing a list of all the user's recorded actions, allowing the user to undo (or redo) actions back to a particular point. Due to some disagreements about the direction of this PR, it may be split into two separate PRs.

  • Fix audio resampling logic (#7858)

    This PR by sakertooth improves the usage of libsamplerate when resampling.

  • Actions system (#7859)

    This PR by szeli1 aims to add "actions" as a layer between the user and the GUI, accomplishing one step of a proposed GUI refactor outlined in this discussion. Actions would handle journalling and assist in the current efforts to improve the undo/redo system.

Other PRs

These PRs were also created or worked on during April.

  • Dynamic branding color for different build types (#5166)
  • Sample Track Recording with Jack backend (#7567)
  • Don't fill notes that overlap slightly (#7569)
  • Explicitly add clips and tracks to their respective containers (#7754)
  • MainWindow revert to scrollbars (#7828)
  • Make playhead red when recording (#7847)
  • Use native file dialog (#7856)
  • Add Setting for UI Scale Factor (#7843)
  • Save Scale/Key Highlighting, and Many More Editor Options (#7854)
  • Fix PeakController for short attacks (#7868)
  • Fix issue with Mixer key events and Track Label Button focus (#7870)

Goals for May

Our goals continue to be finishing work on open PRs, bug fixes, and working on the remaining 1.3 milestone issues.

We also plan to continue replacing PNG graphics with SVGs, as seen in this meta issue.

And as noted previously, the Global Spacebar Play PR (#7762) introduced a couple regressions which we plan to resolve soon (see #7870).

Another focus of recent development is fixing some of the issues with the undo/redo system. It is buggy and hasn't been worked on in over a decade, so it is in dire need of an overhaul. Whether nightly users will get to see some of the work currently being done in this area before next month remains to be seen.

New contributors

  • qnebra replaced the PNG assets of Vestige and VST effects with SVGs in #7791
  • TgeorgeT fixed a memory leak in RemoteVstPlugin::loadPresetFile in #7827

Administrative changes

  • AW1534 was added to the Testers team on GitHub
  • Monospace is now the admin for GitBook (wiki)

Closing thoughts

Thanks for reading! 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.

Have a great May!

Published May 2, 2025, 8:13 pm by @messmerd

LMMS Progress Report: March 2025

Welcome back to our monthly series of LMMS Progress Reports!

If you missed last month's report, you can find it here.

Nightly News

March was a fairly productive month for LMMS development, notably bringing a number of GUI-related updates.
In total 41 PRs were opened, 21 of which have already been merged.

  • Navigate workspace in the main window by dragging the mouse (#7595, #7752)

    This PR by szeli1 adds the ability to move around the LMMS workspace by clicking and dragging the background with your mouse rather than using scrollbars. It's a welcome quality-of-life improvement.

  • Faders with a dB scale (instead of linear/percentage) (#7636)

    Fader widgets now use dB scale volume rather than linear/percentage thanks to work by michaelgregorius. Additionally, Shift and Control are now usable as modifier keys to control the rate of adjustment when using the mouse wheel or keyboard.

  • Improve "Open containing folder" feature for file browser (#7700)

    AW1534 improved LMMS's file browser by adding an "Open containing folder" context menu action to open a folder in your system's file manager, and making the "Show in file manager" action for files open and select the file in your system's file manager.

  • New mute and solo buttons (#7708, #7765)

    rubiefawn and others collaborated to replace the mute and solo buttons in tracks and the mixer channels with sleek new icons created by StakeoutPunch and button backgrounds created by RebeccaDeField. Mute and solo buttons were also added to the instrument windows.

  • Piano Roll knife tool enhancements (#7715)

    This PR by regulus79 extends the functionality of the Piano Roll's knife tool, allowing it to split multiple notes at once and even split notes at an angle.

  • Piano Roll strum tool (#7725)

    regulus79 also added a new "strum tool" to the Piano Roll. This tool allows for easy and intuitive shaping of note positions within chords to produce strum patterns, letting you produce some nice results with minimal effort.

  • SVG graphics (#7769, #7770, #7771, #7772, #7774, #7775, #7776, #7777, #7779, #7781)

    Following the work on the new mute and solo buttons, rubiefawn has been spearheading an effort to replace many of our PNG assets with SVG assets that scale better. The assets for several plugins have been replaced with SVG files already, but a lot of work remains.

  • Dynamic theming and dark theme for lmms.io (lmms.io#399, lmms.io#408)

    Thanks to headquarter8302, the LMMS website now has dynamic theming and a dark theme.

Other changes:

  • InstrumentSoundShaping refactoring (#7229)
  • Optimize PNG images using ImageOptim (#7384)
  • Clean up some header files and move a bit of debugging logic to cmake (#7677)
  • Refactor OGG export and always use VBR (#7697)
  • Fix incorrect graph step size behavior (#7703)
  • Fix Clang warning due to implicit conversion from int to float for the RAND_MAX macro (#7717)
  • Add ability to change sample rate in the settings menu (#7719)
  • ExportProjectDialog: Remove arbitrary loop count limit (#7724)
  • Fix stk/rawwaves for msys2 (#7736)
  • Revert "Change tooltip window flags (#7613)" (#7761)
  • Add build flags to output of lmms --version (#7780)
  • Update CALF to 0.90.4 (#7783)
  • Fix missing update to mixer channel name when created (#7795)
  • Fix crash when switching opened projects (#7797)
  • Update Classic Theme (#7799)
  • Enable CMAKE_EXPORT_COMPILE_COMMANDS (#7804)
  • Make buttons automatable on macOS (#7813)
  • Fix Vestige file browser filter (#7816)

In progress

In the past month, dozens of new PRs were opened that add/extend features or fix bugs, and a number of older PRs were worked on. Below is a non-exhaustive list of those which remain in-progress.

Nearing completion

  • Refactor PortAudio backend (#7444)

    sakertooth refactored the Windows PortAudio backend in order to dramatically simplify the code and fix DirectSound and MME when using PortAudio.

  • Clip splitting and resizing (#7477)

    This PR by regulus79 is ready for final approval and merge.

  • Add shortcut for chord inversions (#7718)

In the works

  • Qt6 support (#7339)

    In the past month, not much has been accomplished in terms of Qt6 support. We're trying to switch our MSVC build over to Qt6, but we've encountered a build error with ZynAddSubFX that hasn't been fixed yet. The task of fixing it has been assigned to yours truly, but alas I am lazy. If there hasn't been any progress on this by next month, please just yell at me or something.

  • Multi-channel plugins (#7459)

    This PR continues to be ready for testing. Over the past month, a number of classes were renamed, a major optimization was implemented, and more unit tests were added. All that is left development-wise is sprucing up the GUI and deciding whether to (for the time being) remove support for automated pins.

  • Sample caching (#7497)

    Work is being done to generalize the caching system to support not just sample caching but also caching for other resources such as sample thumbnails.

  • Make portsmf a git submodule (#7755)

    rubiefawn has been working with the original developer of the portsmf MIDI library along with another maintainer to modernize its codebase and help decide upon the future of the project.

  • Audio recording (#7786)

    JohannesLorenz moved work to a new branch and PR which will hopefully make it easier to contribute to. Other than that, not much has been done since last month.

  • Add playhead and timeline to Pattern Editor (#7794)

    This new PR by regulus79 is a nice quality-of-life improvement to the Pattern Editor.

  • Undo/redo history (#7821)

    regulus79 also recently began improving the undo/redo system, opening a PR to add an undo/redo history feature similar to many other applications. This should be beneficial to both users and devs alike. The undo/redo code hasn't been touched in about 11 years and has been the subject of numerous bug reports, so it's great to see efforts finally being made in this area.

Other PRs

These PRs were also created or worked on during March.

  • Dynamic branding color for different build types (#5166)
  • Protection against Inf/NaN in mixer channel outputs (#7323)
  • Widget highlighting and shorcut system (#7488)
  • Audio recording with JACK backend (#7567)
  • Remove the FIFO thread (#7568)
  • File browser search improvements (#7679)
  • Stream sample previews (#7705)
  • Length-bounded string/memory functions (#7709)
  • Add option to favorite items in the file browser (#7753)
  • Global spacebar play (#7762)
  • Clang RtSan support (#7764)
  • Fix microtuning warning from widening instruments (#7805)
  • Fix Envelope/LFO knob scaling and add Tempo Sync (#7811)
  • Tagalog translation (#7820)

Goals for April

Our goals continue to be finishing work on open PRs, bug fixes, and working on the remaining 1.3 milestone issues.

More PNG assets are planned to be replaced with SVGs, as seen in this meta issue.

New contributors

  • jahunt1 applied ImageOptim to losslessly reduce the size of our PNG assets in #7384
  • headquarter8302 spearheaded the new dark theme on lmms.io as well as a new Windows tutorial/script for lmms.io

Administrative changes

  • regulus was added to GitHub developers group
  • rubiefawn was added to GitHub website developers group
  • headquarter8302 was added to Discord developers group

Closing thoughts

Thanks for reading! 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.

Have a great April!

Published April 2, 2025, 5:38 pm by @messmerd

LMMS Progress Report: February 2025

Welcome back to our monthly series of LMMS Progress Reports!

The first progress report was well-received, so we're happy to continue.

If you missed last month's report, you can find it here.

Nightly News

February was an incredibly productive month for LMMS development. Our MVP (most valuable programmer) of the month was tresf who contributed over a dozen PRs - mostly fixes for platform-specific bugs.

  • Removed song import global automation (#5229)

    This old PR which automatically upgrades global automations to regular automation tracks was finally merged. Global automations are a little-known feature in LMMS that are largely seen as a mistake due to how hidden and inaccessible they are, so we've been aiming to remove them completely. This PR is a significant step towards that goal.

  • Math functions and constants (#7558, #7685, #7696)

    Developer rubiefawn returned after 10 years to deliver this series of PRs that modernize our usage of math functions and replace our custom math constants with C++20's std::numbers. Along the way a few DrumSynth regressions were found and fixed - regressions which would have caused some .ds files to load incorrectly. Some minor performance improvements were also made to .ds file loading.

  • Fixed logarithmic behavior when dragging knobs and sliders (#7647)

    Ever notice how difficult it is to adjust logarithmic knobs and sliders with your mouse? They weren't supposed to be like that and now thanks to regulus79 they have been fixed.

  • Linux x86_64 CI upgrade (#7678)

    Our Linux builds for x86_64 are now built on a plain Ubuntu 22.04 build runner rather than a custom Ubuntu 20.04 Docker image. As a result, a number of our dependencies were updated, finally allowing Opus samples to be used in the nightly builds. Unfortunately, support for MP3 samples will have to wait until either Ubuntu 24.04 or the usage of vcpkg for Linux dependencies. Note that due to building on Ubuntu 22.04 now, the equivalent of Ubuntu 22.04 (specifically distros with at least glibc 2.35) is required for running the nightly AppImage.

  • Fixed broken Windows VSTs on Linux (#7678, #7686, #7690)

    This series of PRs from tresf fixed Windows VSTs on Linux AppImages which is something that had been broken for far too long. In the process, the AppImage startup scripts were refactored.

  • Fixed ZynAddSubFX's GUI on macOS (#7681)

    Due to a macOS-specific issue in our shared memory implementation, ZynAddSubFX's GUI could not be opened on macOS. This PR fixes that problem.

  • Windows MinGW CI upgrade (#7682)

    Our Windows MinGW builds are now built on a plain Ubuntu 24.04 build runner rather than a custom Ubuntu 20.04 Docker image. Unfortunately none of our dependencies have been upgraded with this change, though it did bump our MinGW compiler version. With this compiler upgrade, most C++20 features are now usable in the LMMS codebase.

  • Fixed Carla detection (#7686, #7691, #7722)

    Carla used to be present in the LMMS instrument plugins list on Linux even when not installed. This has been fixed.

  • Fixed envelope and LFO graph size on resizable instruments (#7738)

    This fixes the envelope tab of SlicerT which had been painful to look at ever since some changes from a previous PR made it resizable.

Other changes:

  • Reload stylesheet when CSS file changes (#6331)
  • Recursively unmute channels when soloing in the mixer (#6746)
  • Changed drag copy shortcut from Command to Option on macOS (#7325)
  • Improved sample waveform rendering performance (#7366)
  • Fixed visual glitch where child widgets draw on top of each other (#7643)
  • Fixed dropout with SID instrument when used for the first time (#7673)
  • Added VST64 targets for Linux ARM64 (#7687)
  • Removed libgallium from the AppImage (#7693)
  • VersionInfo: Mimic GitHub's hash styling (#7694)
  • Improved Qt5 detection on macOS (#7699)
  • Fixed vcpkg builds (#7702)
  • AppImage: Initial support for Wayland (#7704)
  • AppImage: Use fully qualified path when calling appimagetool (#7707)
  • Added HiDPI support to ZynAddSubFX (#7710)
  • Renamed AudioPort -> AudioBusHandle (#7712)

In progress

February also saw several newly-opened PRs that add or extend features or fix bugs. Below is a non-exhaustive list.

Nearing completion

  • Clip splitting and resizing (#7477)

    Extensive testing of this PR uncovered a number of bugs, but regulus79 has been steadily working to patch them, bringing this PR closer to completion.

  • Add shortcut for chord inversions (#7718)

    This new PR by regulus79 lets you cycle through the chord inversions of a selection of notes. Neat!

  • Improve "Open containing folder" feature for file browser (#7700)

    AW1534 improved LMMS's file browser by adding an "Open containing folder" context menu action to open a folder in your system's file manager, and making the "Show in file manager" action for files open and select the file in your system's file manager.

  • dB scale faders (#7636)

In the works

  • Detachable windows (#3532)

    Not much progress has been made since January. There are a few separate PRs that are all trying to modify some window-related code, but there hasn't been enough coordination to prevent everyone from stepping on each others' toes. Due to that, progress has stalled.

  • Audio recording (#5990)

    Not much has happened since January. We're still in need of a way to save recordings to disk rather than always embedding them in project files.

  • Qt6 support (#7339)

    Work has picked back up on the Qt6 upgrade PR. The goal is to allow optionally building LMMS with Qt6, though in the future once we switch all our CI builds to use Qt6, Qt6 could become the default and Qt5 support could be removed. Qt5 reached the end of support in May 2023, and will reach the end of its extended support for commercial users in May of this year, so upgrading to Qt6 is an important task. We're currently trying to get a successful build using Qt6 with Windows MSVC, though there are some zlib-related issues we need to work out. We hope Windows MSVC can become our dedicated Qt6 build during our transition period from Qt5 to Qt6.

  • Refactor PortAudio backend (#7444)

    This PR by sakertooth refactors the PortAudio backend in order to dramatically simplify the code and fix DirectSound and MME when using PortAudio.

  • Multi-channel plugins (#7459)

    Messmerd has been chugging along on this PR, and now all the known bugs are fixed and it is ready for testing. Only a few tasks remain, including optimizations, renaming some classes, and improving the GUI.

  • Sample caching (#7497)

    This PR is being generalized to support not just sample caching but also caching for other resources such as sample thumbnails.

  • Refactor OGG export (#7697)

    Another refactor PR by sakertooth, this time fixing an issue with exported OGG files and setting it to always use VBR (variable bitrate).

  • Piano Roll strum tool (#7725)

    This is an interesting new feature that regulus79 surprised us with out of nowhere. The strum tool allows for easy and intuitive shaping of note positions within chords to produce strum patterns.

Other PRs

These PRs were also opened or worked on during February.

  • Dynamic branding color for different build types (#5166)
  • Improve file browser search behavior (#7679)
  • Improve performance when rendering sample waveforms (follow-up PR) (#7695)
  • Handle SIGINT (#7698)
  • Stream sample previews (#7705)
  • SlicerT mouse pointer improvement (#7711)
  • Cutting multiple notes at once in Piano Roll (#7715)
  • SlicerT centered piano roll (#7731)
  • lmms-console.exe for Windows command-line (#7732)

Goals for March

In March, we plan to finish work on open PRs, prioritizing bug fixes and remaining 1.3 milestone issues.

Recently we noticed a regression in ZynAddSubFX which affects the sound of its .xiz presets after opening the ZynAddSubFX GUI. It has been present in the nightly builds since last July. Discussion can be found here. This is something we plan to fix as soon as we can in order to minimize the impact on nightly users.

And as mentioned before, the detachable windows PR and a couple other related PRs are all trying to modify the same window resizing code and this is leading to merge conflicts. The devs involved in these PRs need to coordinate to fix the issues without breaking each others' code. JohannesLorenz brought this point up earlier in a discussion.

New contributors

None last month, but this month it could be you!

Administrative changes

  • (1/25) Editor access was granted to headquarter8302 on GitBook (wiki)
  • (1/27) A new "Testers" group was created on GitHub for help testing and triaging, and three members have been added:
    • bratpeki
    • Spacemagehq
    • szeli1
  • (2/19) Triage access was granted to qnebra on GitHub.

As you can see, some of these changes occurred in January - we just neglected to mention them in the January progress report.

Closing thoughts

Thanks for reading! 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.

Have a great March!


We will now leave you with this beautiful springtime poem (apologies to e. e. cummings)

Click to expand
in Just-
spring     when the world is Lomm-
luscious the little
lame patMan
whistles far and wee
and eddieandbill come running from monstro and slicerT and it's spring
when the world is watsyn-wonderful
the queer old patman whistles far and wee and bettyandisbel come dancing
from bass-booster and bit-invader and
it's spring and
the
goat-footed
patMan whistles far and wee
Published March 1, 2025, 7:02 pm by @messmerd

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 using 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!

Published February 2, 2025, 12:49 am by @messmerd