regulus79 38efd2f2b1 Fix Slow Midi Operations by Only Initializing the Detuning Clip When Needed (#8380)
TLDR: Normally, the AutomationClip containing the detuning curve of a Note is created for every single note, no matter if it actually has detuning or not. This PR changes that so it is only created when the user edits the detuning.

When #7477 and later #7888 were merged, they reworked how Note objects were copied to prevent two different notes from sharing the same detuning automation curve, which would mean editing one's detuning would edit the other's at the same time.

This made the workflow more correct, but it came at the cost of performance. Unfortunately, every single Note object had to have a DetuningHelper object which contained an AutomationClip. These AutomationClips are complex QObjects with signals and slots and models inside them, which is not great when you need to copy a whole bunch of notes at once.

Ideally, I think we could replace the detuning clip with something simpler than an automation clip; something which only holds the bare minimum curve data. But that is for a later time; this PR uses a different solution.

Detuning automation clips are only needed by the Note if the user has added any pitch bending. But for the vast majority of notes, there is no pitch bending, so they do not really need the detuning clip. Currently, the detuning object is initialized right when the Note is created. However, this can be changed so that it is only created when the user decided to edit the detuning. This saves an enormous amount of processing when copying notes.

This technically means that there is the possibility that note->detuning() could be nullptr. However, I went through all of the occurances in the codebase, and I added checks where there was the potential it could be nullptr.
2026-05-13 14:23:07 -04:00
2025-12-27 17:58:05 +05:30
2018-03-07 23:54:28 +09:00
2026-04-27 23:51:05 +02:00
2026-04-27 23:51:05 +02:00
2026-03-09 02:32:45 -04:00
2024-11-22 23:11:39 -05:00
2024-11-22 23:11:39 -05:00
2019-06-25 03:37:14 +02:00
2021-12-14 23:13:13 +01:00
2021-05-28 14:02:57 +02:00
2024-08-04 15:47:43 +02:00
2024-12-01 13:33:17 -05:00

LMMS Logo
LMMS

Cross-platform music production software

Website ⦁︎ Releases ⦁︎ Developer wiki ⦁︎ User manual ⦁︎ Showcase ⦁︎ Sharing platform

Build status Latest stable release Overall downloads on Github Join the chat at Discord

What is LMMS?

LMMS is an open-source cross-platform digital audio workstation designed for music production. It includes an advanced Piano Roll, Beat Sequencer, Song Editor, and Mixer for composing, arranging, and mixing music. It comes with 15+ synthesizer plugins by default, along with VST2 and SoundFont2 support.

Features

  • Song-Editor for arranging melodies, samples, patterns, and automation
  • Pattern-Editor for creating beats and patterns
  • An easy-to-use Piano-Roll for editing patterns and melodies
  • A Mixer with unlimited mixer channels and arbitrary number of effects
  • Many powerful instrument and effect-plugins out of the box
  • Full user-defined track-based automation and computer-controlled automation sources
  • Compatible with many standards such as SoundFont2, VST2 (instruments and effects), LADSPA, LV2, GUS Patches, and full MIDI support
  • MIDI file importing and exporting

Building

See Compiling LMMS

Join LMMS-development

If you are interested in LMMS, its programming, artwork, testing, writing demo songs, (and improving this README...) or something like that, you're welcome to participate in the development of LMMS!

Information about what you can do and how can be found in the wiki.

Before coding a new big feature, please always file an issue for your idea and suggestions about your feature and about the intended implementation on GitHub, or ask in one of the tech channels on Discord and wait for replies! Maybe there are different ideas, improvements, or hints, or maybe your feature is not welcome/needed at the moment.

Description
No description provided
Readme 178 MiB
Languages
C++ 87.7%
C 6.4%
CMake 3.5%
CSS 1%
HTML 0.9%
Other 0.4%