8517 Commits
Author SHA1 Message Date
Itreza2 bed447baab Only disable auto-resize on manual resize if the clip length has actually changed (#8601)
Currently, auto-resize is always disabled on mouse move event while the "move" action type is active.
Consequently, it is easy to accidentally disable auto-resize by mistake by simply clicking too close to the clip's edges.

The proposed changes are straightforward: add checks to ensure that an actual resize is taking place before disabling auto-resize.
2026-10-25 08:12:29 -04:00
Kirill Gavrilov Tartynskih 4fde529fb3 Fix Tempo BPM clamped down to smaller integer number in AutomatableModel (#8592)
Perform float->int conversion using std::round() in castValue<int>() calls, and fix castValue<bool> template specialization previously ignored by C++ compiler.

The Tempo imported from sample MIDI file is read as 39.999 as float, which was reported as 39 BPM in user interface before the patch.
2026-10-18 23:45:08 -04:00
zynskeywolfandzynskeywolf fd7c4960d4 Add 176.4 kHz to the selectable sample rates (#8597)
Co-authored-by: zynskeywolf <djpixus@gmail.com>
2026-10-18 16:13:26 -04:00
Dalton Messmer 6674cd2877 Fix builds (#8593)
- Fixes a recent Windows ARM64 build failure due to missing #includes
- Fixes #8535
2026-10-18 13:16:20 -04:00
Hasster a2f57e70ce Fix Base Note's value setting (#8572)
Replaces `setInitValue` with `setValue` for the base note/first note/last note models.
2026-09-27 17:00:26 -04:00
Dalton Messmer 1a82b9ee84 Miscellaneous CI improvements/fixes (#8559)
- Only install the necessary Qt6 components on macOS (reduces macOS job times by a couple minutes)
- Update all actions to their latest version (resolves some Node 20 deprecation warnings)
- Fix ccache usage on Linux and MinGW (was using wrong cache path due to a typo in the documentation)
- Bump the number of CPU cores used for builds
2026-09-21 04:34:52 -04:00
Dalton MessmerandGustavo Chicato 70aeceeff9 MidiExport: Support multi-track export, banks/programs, and more (#8048)
- Map each instrument track to a different incremental MIDI channel (except for channel 10 which is reserved for drums)
- Support Sf2 Player and Gig Player patches
- Major refactoring
- Allow instruments to provide their MIDI bank/program
- Add std::filesystem::path/string conversion utilities + unit tests
- Remove Qt usage from MidiExport
- Support bank select events in MidiExport and MidiImport
- Rework endian_handling.h, adding polyfill for std::byteswap
- Remove extraneous patch automation tracks
- Fix initial playback after MIDI import

---------

Co-authored-by: Gustavo Chicato <gustavo.chicato@usp.br>
2026-09-15 19:17:45 -04:00
JJCUBER 96cdb3e471 Fix inconsistent mmp attribute order on save (#8513) 2026-09-15 15:56:16 -06:00
Dalton Messmer 55042def21 Upgrade to Visual Studio 2026 (#8539)
* Upgrade to Visual Studio 2026

* Fix MSVC warning about unknown option '-fexceptions'

* Require MSVC 19.51 or higher
2026-09-15 16:30:30 -04:00
Alex a52afdef8f Update translations (#8514)
Pull translations from Transifex for September 2026
2026-09-14 20:34:38 -04:00
Dalton Messmer 518a7e8ef5 Update macOS and Windows ARM64 builds to Qt6 (#8544)
* Use Qt6 for macOS on x86_64 and arm64

* Use Qt6 for Windows arm64

* Disable -Werror for macOS builds
2026-09-10 18:59:21 -04:00
Dalton Messmer e04f9c8deb Sf2Player: Fix non-ASCII soundfont file paths on Windows (#8545)
Fixes non-ASCII soundfont file paths on Windows caused by FluidSynth switching to UTF-8 file paths in version 2.2.0 without us adjusting our usage of their API.

Also bumps the minimum supported FluidSynth version from 1.1.7 (which released in September 2017) to 2.2.0 (which released in March 2021). This allows us to remove a lot of conditionally compiled code that we no longer use in any of our builds.

Fixes #8504
2026-09-10 17:48:26 -04:00
ExternStat 44c4291539 Fix VST effect controls toolbar (#8546) 2026-09-10 13:21:39 -06:00
regulus79 3d97b11f3a Revert knife tool auto-selecting short ends (#8502) 2026-09-08 22:51:26 -06:00
Fawn 76ffa57efe Resolve all Doxygen warnings & docs cleanup (#8361)
- Updates Doxyfile for Doxygen 1.18.0 and minifies Doxyfile
- Use PROJECT_LOGO & PROJECT_ICON in Doxyfile
- Add custom Doxygen CSS
- Move documentation comments in first-party code from source files to
  their corresponding headers, where applicable
- Resolves nearly all Doxygen warnings in first-party code
- Remove unused INPUTDIRS from doc/CMakeLists.txt
- Use CMake's DOXYGEN_ADD_DOCS() instead of a custom doc target
- Bump portsmf submodule to get upstream Doxygen fixes
- Only autorun Doxygen CI for master branch
- Skip Doxygen CI if Github Pages aren't enabled
2026-09-08 21:06:05 -06:00
Fawn e64cf9b8ad Remove OSS audio backend (#8482)
ALSA or JACK should be preferred on Linux systems. OpenBSD ports maintainers have deliberately disabled it for years in favor of the native sndio backend. FreeBSD has access to sndio, ALSA, PortAudio, etc. which are better supported. All other platforms don't support it.
2026-09-08 18:57:36 -06:00
Fawn d10f6a23d7 Remove libsoundio audio backend (#8475)
- https://github.com/andrewrk/libsoundio/issues/301
- https://github.com/LMMS/lmms/discussions/7617
- https://discord.com/channels/203559236729438208/1353825694395797525
2026-09-08 18:56:05 -06:00
Bimal Poudel b6908f60ab Add .vs, .vscode to gitignore (#7988) 2026-09-08 18:53:50 -06:00
Robin Candau 4e677cb6c6 Don't compress man page in during build (#8494)
Man pages compression is a distribution and/or user preference that should be left to the downstream packaging.

Compressing man pages by default imposes a compression algorithm and level while most distributions package managers handle that already (including eventual downstream preferences / expectations or policies) and also eventually allow users customization on that front.

Additionally, it can lead to unexpected side effects. For instance, `gzip` is recording timestamps in metadata by default, which prevents [reproducible builds](https://reproducible-builds.org/):

```
--- /tmp/rebuilderdgdH23t/inputs/lmms-1.2.2-28-x86_64.pkg.tar.zst
+++ /tmp/rebuilderdgdH23t/out/lmms-1.2.2-28-x86_64.pkg.tar.zst
├── lmms-1.2.2-28-x86_64.pkg.tar
│ ├── file list
│ │ @@ -1,9 +1,9 @@
│ │  -rw-r--r--   0 root         (0) root         (0)    10299 2026-05-20 20:45:36.000000 .BUILDINFO
│ │ --rw-r--r--   0 root         (0) root         (0)   166163 2026-05-20 20:45:36.000000 .MTREE
│ │ +-rw-r--r--   0 root         (0) root         (0)   166162 2026-05-20 20:45:36.000000 .MTREE
│ │  -rw-r--r--   0 root         (0) root         (0)     1765 2026-05-20 20:45:36.000000 .PKGINFO
│ │  drwxr-xr-x   0 root         (0) root         (0)        0 2026-05-20 20:45:36.000000 usr/
│ │  drwxr-xr-x   0 root         (0) root         (0)        0 2026-05-20 20:45:36.000000 usr/bin/
│ │  -rwxr-xr-x   0 root         (0) root         (0)  3552216 2026-05-20 20:45:36.000000 usr/bin/lmms
│ │  drwxr-xr-x   0 root         (0) root         (0)        0 2026-05-20 20:45:36.000000 usr/include/
│ │  drwxr-xr-x   0 root         (0) root         (0)        0 2026-05-20 20:45:36.000000 usr/include/lmms/
│ │  -rw-r--r--   0 root         (0) root         (0)     1147 2026-05-20 20:45:36.000000 usr/include/lmms/AboutDialog.h
│ ├── .MTREE
│ │ ├── .MTREE-content
│ │ │ @@ -3273,11 +3273,11 @@
│ │ │  ./usr/share/lmms/wavetables time=1779309936.0 mode=755 type=dir
│ │ │  ./usr/share/lmms/wavetables/moog.bin time=1779309936.0 size=163800 sha256digest=8d51771b36bb7c4189a3961e43a5db37c032c0fc9480891effd583491fd20fd9
│ │ │  ./usr/share/lmms/wavetables/saw.bin time=1779309936.0 size=163800 sha256digest=803327e8ecd1aa8fd299c51d53cb8937aa94a731f496eaf9cb2714149bc6d5bf
│ │ │  ./usr/share/lmms/wavetables/sqr.bin time=1779309936.0 size=163800 sha256digest=d0baac95c4ab45348a3aa63e940694bd69156aa16f8e9d3711cf54ef2c7b8afb
│ │ │  ./usr/share/lmms/wavetables/tri.bin time=1779309936.0 size=163800 sha256digest=8618abb222ad7f21c3bce2fbdd56d5b1f03e15cec5c74c78f19de37819df87e7
│ │ │  ./usr/share/man time=1779309936.0 mode=755 type=dir
│ │ │  ./usr/share/man/man1 time=1779309936.0 mode=755 type=dir
│ │ │ -./usr/share/man/man1/lmms.1.gz time=1779309936.0 mode=444 size=2048 sha256digest=6749039969381359ba8cb0bb66c0e88bba29ba7ac2b3cc8e9003175f9e9aeb76
│ │ │ +./usr/share/man/man1/lmms.1.gz time=1779309936.0 mode=444 size=2048 sha256digest=8c1401e424c6bfe457a1c96eae6ce9e9d3e65fad952eac787538b01228657b54
│ │ │  ./usr/share/mime time=1779309936.0 mode=755 type=dir
│ │ │  ./usr/share/mime/packages time=1779309936.0 mode=755 type=dir
│ │ │  ./usr/share/mime/packages/lmms.xml time=1779309936.0 size=376 sha256digest=1d8bab5f5d5b3a099bc378daeef62117cde187c6ea4c8e68c0213617d0d29937
│ ├── usr/share/man/man1/lmms.1.gz
│ │ ├── filetype from file(1)
│ │ │ @@ -1 +1 @@
│ │ │ -gzip compressed data, was "lmms.1", last modified: Sat Nov  3 01:43:42 2018, from Unix
│ │ │ +gzip compressed data, was "lmms.1", last modified: Wed May 20 20:45:36 2026, from Unix
```

See https://cmpct.info/~sam/blog/posts/automatic-manpage-compression/ for detailed rational.
v1.3.0-alpha.2
2026-08-30 12:45:12 +09:00
sqrvrt dff0fbd67f Fix subwindows occasionally snapping to minimum size 2: Electric Boogaloo (#8396)
Removes layout constraints when child is hidden, reapplies when child is shown.

This reverts commit 9f714038a8.
Outside of not even compiling, this was speculative to begin with and
AFAIK doesn't actually address the issue if done right. Also needs
more checking in order to properly work with maximized subwindows.
2026-08-28 12:21:20 +02:00
Dalton Messmer 765748e83a Fix the default frames per audio buffer (#8523) 2026-08-27 18:16:44 -04:00
Tres Finocchiaro f38353c874 Add ENV{MSYSTEM} to installers created by msys2. (#8521)
Closes #8520
2026-08-26 20:18:13 -04:00
Hyunjin Song c1100a654a Fix crashes on project load with MIDI auto assignment feature (#8505)
* Fix not changing `m_hasAutoMidiDev` when using a raw MIDI backend

* Fix not unsetting `s_autoAssignedTrack` in destructor when the assignment failed
2026-08-25 09:51:39 +09:00
Dalton Messmer 09ac9c966c Fix CONTRIBUTORS file generation (#8518)
* Fix CONTRIBUTORS file generation

* Avoid using deprecated GIT_FOUND variable

* Improve embed::getText error handling
2026-08-24 18:03:51 -04:00
Michael GregoriusandDalton Messmer c6683775e5 Song Editor: Improve performance of auto-scroll, scroll, zoom, and clip dragging (#7570)
Remove the call to `Clip::changeLength` from
`TrackContentWidget::changePosition` as it results in bad performance,
especially when the Song Editor is in auto-scroll mode and the position
is changed very often.

The call in question has set the clip to the length that it already has
which in turn resulted in lots of needless calls to `Song::updateLength`.

It also should not be necessary to update a clip length if all that we
do is change the position of the `TrackContentWidget`.

Remove code that sets clip positions to a negative value when outside the
viewport. This fixes a visual bug on both native Wayland and XWayland
where resizing the song editor window to increase the window width
causes any clips that come into the viewport to be temporarily invisible.

Also fix the connection between `TrackContainerView` and `TrackContentWidget`,
remove a duplicate connection, and fix the corresponding `disconnect()` call.

---------

Co-authored-by: Dalton Messmer <messmer.dalton@gmail.com>
2026-08-23 01:03:20 -04:00
Itreza2 de166c31bc Sf2Player: Fix loading when no soundfont is specified (#8432)
Prevent Sf2Intrument from trying to load nonexistent file on deserialization
2026-08-21 17:11:29 -04:00
Dalton Messmer feec14c062 Change TARGET_UARCH default from 'native' to 'none' (#8507) 2026-08-17 19:34:10 -04:00
Fawn abd8687b2f Remove unnecessary CHECK_INCLUDE_FILES() calls (#8451)
- sys/types.h: LMMS_HAVE_SYS_TYPES_H is never referenced
- sys/time.h: LMMS_HAVE_SYS_TIME_H is never referenced
- locale.h: This header is a mandatory part of the C standard library
2026-08-16 19:14:44 +09:00
regulus79 067c3ad412 Allow Ctrl-Drag Copying Tracks via TrackGrip (#8495)
This PR aims to address #7766 by making it possible to ctrl-drag on the TrackGrip (the patterned part on the very left edge of a track), to copy them, rather than having to carefully aim your mouse around the large settings/mute/solo buttons to copy a track.
2026-08-04 12:36:59 -04:00
Joey L. 175ac38510 Fix crash when opening Automation Editor after setting ghost notes (#8488)
Fixes a crash when opening the Automation Editor with invalid ghost notes (or more specifically, when the editor draws the ghost notes). Setting ghost notes in the Automation Editor with a MIDI clip (but not a sample clip) sets a pointer to it, but deleting the clip or loading a new project makes the pointer invalid without setting to a null pointer.
2026-07-29 10:59:34 -04:00
regulus79 34aab9fd06 Fix Default PianoRoll Zoom and Quantization (#8484)
When #7854 was merged, the line for setting the default zoom of the piano roll was copy-pasted to also set the default vertical zoom and quantization. That way if no previous default had been saved, it would default to 100% horizontal zoom, 100% vertical zoom, and 1/16 quantization (which was the default behavior before the PR).

Unfortunately, the variable in expression it used to find the correct index of "100%" or "1/16" in the list was not correctly updated after copy-pasting, which caused the wrong defaults to be set. For example, in the vertical zoom dropdown, "100%" is index 2, but in the horizontal zoom, it's index 3. This caused the default vertical zoom to be 150%, not 100%. Likewise, since the horizontal zoom list doesn't contain "1/16", the quantization defaulted to index 0, which was "Note Lock".

This PR fixes those issues by correcting the variables names in those two lines.
2026-07-24 14:08:21 -04:00
Carlo Bramini 795d39d656 CMAKE: fix build for CYGWIN (#8247)
* CMAKE: support -mbig-obj flag also on CYGWIN
* CMAKE: find X11 on CYGWIN
* CMAKE: Add CYGWIN as platform.
* CMAKE: allow to use WINMM on CYGWIN.
2026-07-20 14:53:09 -04:00
cchjimmy 07f89709be Export symbols of ladspa plugins (#8480) 2026-07-20 11:13:52 -06:00
sqrvrt 57eba673b3 Bump upload-artifact to v7, don't zip (#8423) 2026-07-16 18:58:30 -06:00
Dalton Messmer e1fabe5b18 Fix a few warnings (#8465)
* Add missing override to VolumeKnob

* Fix warning in SlewDistortion.h

* Remove unused lambda capture

* Remove a SLOT macro usage from SampleClip

* Add missing override in SampleClip
2026-07-16 14:19:40 -04:00
Dalton Messmer a2fc6c86df Add CMake options for targeting specific microarchitectures (#8464)
Bumps the minimum x86_64 microarchitecture level for nightly builds from x86_64-v1 (which includes up to SSE2) to x86_64-v2 (which includes up to SSE4.2) and similarly bumps the arm64 microarchitecture target for nightly builds depending on the OS. This is done using new CMake options that control the target microarchitecture level. Also fixes the symbol visibility when compiling with GCC or Clang.

Both of these changes have the potential for performance improvements, and will also let us write conditionally-enabled SIMD code targeting newer microarchitectures with better capabilities than the compiler baseline of SSE2/NEON.

Changes:
- Adds `TARGET_UARCH` and `TARGET_UARCH_FLAGS` CMake options for setting the target CPU microarchitecture
  - Allows LMMS builds to target newer CPUs, letting the compiler make use of instruction set extensions like SSE4.2 or POPCNT
  - The options for `TARGET_UARCH` are: "none", "official", "custom", and "native"
  - These options mean:
    - "none": No microarchitecture level is set. Uses the compiler default (i.e. x86_64-v1).
    - "official": Targets the baseline microarchitecture level of official LMMS releases (On x86_64, this is x86_64-v2, which was agreed upon as a new baseline on Discord. The arm64 baseline differs depending on the target OS).
    - "custom": Targets the microarchitecture specified by `TARGET_UARCH_FLAGS`.
    - "native": Targets the highest microarchitecture level supported by the build machine.
  - If no option is provided, it defaults to "native" so local builds are highly optimized by default
  - All automated builds explicitly use "official"
  - Choosing "none" has the same effect as prior to this PR
  - Added a CMake function called `determine_msvc_native_arch` which provides a workaround for the lack of a `/arch:native` flag in MSVC. This function has been tested on x86_64, but not on arm64 since we don't support MSVC on arm64 yet.
- Changes symbol visibility when using GCC/Clang from default (where all symbols are exported from shared library or executable) to hidden (where only symbols marked with LMMS_EXPORT are exported)
  - Matches the behavior on Windows
  - According to GCC's documentation, doing this "very substantially improves load times of your DSO (Dynamic Shared Object)", "lets the optimiser produce better code", and "reduces the size of your DSO by 5-20%". In actuality, our AppImage size shrunk from 155 MB to 154.3 MB, so the size improvements are not very significant, though there may still be performance benefits.
2026-07-15 17:44:56 -04:00
Tres Finocchiaro cf393b7956 macOS: Switch from appdmg to dmgbuild (#8471)
Switch DMG packaging tool
Fix unreported SDL3 dependency issue
2026-07-15 16:07:49 -04:00
Sotonye Atemie 07bae383c8 Move SampleThumbnail into the lmms::gui namespace (#8470) 2026-07-14 12:16:25 -04:00
Sotonye AtemieandDalton Messmer f986cc5a97 Do not play Sample when there is no buffer, or the buffer is empty (#8469)
Make `Sample::play` return early when there is no buffer, or the buffer is empty.

---------

Co-authored-by: Dalton Messmer <messmer.dalton@gmail.com>
2026-07-13 12:07:38 -04:00
Dalton MessmerandFawn 18dca5b00f Update .mailmap, AUTHORS, and CONTRIBUTORS (#8283)
---------

Co-authored-by: Fawn <rubiefawn@gmail.com>
2026-07-09 23:11:41 -04:00
regulus79 f4ba3d2918 Fix FPE in Automation Editor on Startup (#8457)
After #7946 was merged, when starting up LMMS compiled with -DWANT_DEBUG_FPE=ON, it crashes because it divides by zero. This PR adds a check to prevent that.
2026-07-08 12:39:00 -04:00
Fawnandbratpeki 857b08a916 Don't hide BeatClip names (#8456)
Co-authored-by: bratpeki <pkatic2003@gmail.com>
2026-07-08 00:37:22 -06:00
Shaun Joe Roy cc98488c60 Forbid clip pasting when clipboard empty (#8268)
Disables the 'Paste' option in the context menu in the Song Editor and
Pattern Editor when there is no suitable clipboard content to paste.

This was originally intended to fix an issue where clips couldn't be
pasted between tracks in the Pattern Editor, but that seems to have
resolved itself.
2026-07-07 18:34:23 -06:00
renderman21andFawn d123ef41c9 Escape emails in plugin author field (#7975)
Co-authored-by: Fawn <rubiefawn@proton.me>
2026-07-07 16:46:37 -06:00
Yohanan e18a556744 Add double-click actions to global volume & transposition (#8372) 2026-07-07 14:58:09 -06:00
ExternStat 2fdfa6ca6c Fix FloatModel::getDigitCount() returning wrong value (#8394) 2026-07-07 14:52:08 -06:00
alexandra-russell 28d55bbbc1 Fix automation clip view desync when editing node values via double-click (#8414) 2026-07-07 14:41:56 -06:00
f4d5957b2a Fix sensitivity of tangent editing in Automation Editor (#7946)
Previously, the sensitivity of the tangent editing in the automation editor was hardcoded so that it would change the internal value by the number of pixels the mouse moved up (with a bit of scaling based on the x position too). This is not correct, since it does not respect the zoom of the editor or the min/max values relative to the window size.

This PR adds the correct scaling constant to the tanget value to convert pixels to levels. The automation editor already had the right constant as a member variable, m_y_delta, but it would only update when using the hardcoded zoom levels, so I reworked it to also work for auto zoom.

---------

Co-authored-by: Dalton Messmer <messmer.dalton@gmail.com>
Co-authored-by: Fawn <rubiefawn@gmail.com>
2026-07-02 07:55:42 -04:00
BernardoMalheiro e0f09933e2 Fix segfault when opening SF2 Player GUI during load (#8322)
Fixes #8227 by disabling an instrument's `TrackLabelButton` until the instrument is finished loading.
2026-07-01 23:33:28 -06:00
Fawn 1d04b4e2a8 Fix Sndio backend & cleanup compilation on OpenBSD (#8407)
- Resolves #8406 by fixing a sndio backend regression introduced in #7568
- Sets `Qt[5-6]_DIR` and `Qt[5-6]Test_DIR` automatically for OpenBSD, similar to how this is handled for macOS
- Add `$LOCALBASE` and `$X11BASE` to include and link paths when compiling for OpenBSD
- Explicitly disable several features by default when compiling for OpenBSD, as is done in the ports tree
2026-07-01 21:47:56 -06:00