Commit Graph

8081 Commits

Author SHA1 Message Date
FyiurAmron
d1a15e5ff8 Fix for Werror=self-move in test for GCC >= 13 (#7288) 2024-05-28 16:39:38 -04:00
Oskar Wallgren
4033406430 Automation Editor - Fix automation point forced snapping to integer value. (#7282)
* Revert "Fix glitch with automation points (#7269)"

This reverts commit d60fd0d022.

* Fix glitch in Automation Editor. This reverts the earlier fix and tries to solve the issue by instead rounding off the values of the top/bottom levels before comparison with the automation point value.

---------

Co-authored-by: Dalton Messmer <messmer.dalton@gmail.com>
2024-05-28 14:31:09 +02:00
Oskar Wallgren
0a93e1777b Bump SWH submodule to fix a crash with Reverse Delay (#7277) 2024-05-24 14:24:10 -04:00
Dalton Messmer
2e6545328c Update MinGW CI to Ubuntu 20.04 (#7259)
Update MinGW CI to Ubuntu 20.04
* Use ghcr.io/lmms/linux.mingw:20.04
* Fix deprecation in ClipView.cpp
* Fix ccache and simplify git configuration
* Apply patch by @DomClark for MinGW's SDL2 target
* Update excludelist-win
2024-05-23 13:21:57 -04:00
Rossmaxx
e9848dbbbb A few accessibility changes in default theme (#7202)
* some css tweaks for accessibility

* suggestions from review

* classic theme focus

* fix bug where button color disappears on focus

* More scrollbar color changes on hover.

* Commented the hover effect for now.

* Remove handle "hover" effect.

* scrollbar

* revert button active state
2024-05-23 17:46:15 +05:30
Rossmaxx
b803e92d63 Add menu option and hotkeys to move controllers/effects (#7139)
* added controller rack modules

* remove this-> from setFocusPolicy() and obsolete comment

Co-authored-by: saker <sakertooth@gmail.com>

* Use std::swap

Co-authored-by: saker <sakertooth@gmail.com>

* some more cleanup

Co-authored-by: saker <sakertooth@gmail.com>

* Replace slots with function pointers

Co-authored-by: saker <sakertooth@gmail.com>

* Apply fixes

---------

Co-authored-by: ejaaskel <esa.jaaskela@suomi24.fi>
Co-authored-by: saker <sakertooth@gmail.com>
2024-05-23 17:38:47 +05:30
Tres Finocchiaro
bd2362a8c0 FindWine improvements (#7268)
Improve WineHQ detection
Closes #7169 

---------

Co-authored-by: Rossmaxx <mrroshan127@gmail.com>
2024-05-23 01:25:18 -04:00
Tres Finocchiaro
c66af602ad Fix fftw linking when cross-compiling (#7276) 2024-05-22 23:52:53 -04:00
Johannes Lorenz
fa5f2aa41a Lv2Proc: Fix all code-style issues with {} 2024-05-23 00:34:00 +02:00
Tres Finocchiaro
32fe3e50e7 Add "natural" scrolling support for trackpads (#5510)
Adds QWheelEvent::inverted() support to spinboxes, knobs, sliders
2024-05-21 11:32:28 -04:00
Michael Gregorius
75d6be2eac Fix missing initialization (#7271)
Fix the missing initialization of some variables in `TrackContentWidget`.
This led to some performances issues when the widget was painted because
a for loop was executed for which the variable started at a very large
negative number and was then incremented.
2024-05-20 18:46:52 +02:00
BoredGuy1
a527427abf Changed bar lines to follow snap size (#7034)
* Added lines in between bars
* Changed bar lines to follow snap size
* Changed default zoom and quantization value
* Added constants for line widths
* Added QSS configuration for new grid line colors
* Tied line widths to QSS properties
* Changed default quantization to 1/4
* Removed clear() from destructor model
* Removed destructor in ComboBoxModel.h
* Changed member set/get functions to pass by value
* Updated signal connection with newer syntax
2024-05-20 12:37:18 +02:00
Oskar Wallgren
d60fd0d022 Fix glitch with automation points (#7269)
Co-authored-by: Dalton Messmer <messmer.dalton@gmail.com>
2024-05-20 00:18:11 +02:00
szeli1
76d8f65485 Fix lost connections when restoring automation clip (#7002) 2024-05-19 22:03:07 +01:00
Pascal
0071cb6f63 Fix UI freeze when zooming in on long samples (#7253) 2024-05-19 22:36:30 +02:00
wujekbrezniew
ca109f94f4 Migrate to new LV2 header paths (#6990) 2024-05-19 14:39:20 +01:00
Pascal
0ee05f5ad8 Fix crash in AFP when playing with loop while no sample is loaded (#7266) 2024-05-18 18:40:29 -04:00
Bimal Poudel
f891bb30eb Update widths of combo boxes (#7262)
* Update widths of combo boxes

* Update src/gui/editors/PianoRoll.cpp

no space right after brace

Co-authored-by: saker <sakertooth@gmail.com>

* Update src/gui/editors/PianoRoll.cpp

Co-authored-by: saker <sakertooth@gmail.com>

* Update src/gui/editors/PianoRoll.cpp

Co-authored-by: saker <sakertooth@gmail.com>

* Update src/gui/editors/PianoRoll.cpp

Co-authored-by: saker <sakertooth@gmail.com>

---------

Co-authored-by: saker <sakertooth@gmail.com>
2024-05-17 21:32:59 -04:00
Tres Finocchiaro
7859f1c72d Fix macOS CI builds (#7261) 2024-05-16 16:23:32 -04:00
Rossmaxx
321b2b4167 Remove the missing spoken.flac file in unfa - Spoken (#7208)
Remove spoken.flac using LMMS 1.0.3
---------

Co-authored-by: Tres Finocchiaro <tres.finocchiaro@gmail.com>
2024-05-16 15:51:46 -04:00
Tres Finocchiaro
a66d212221 Fix native linux VST on ARM64 (#7257) 2024-05-16 15:05:12 -04:00
Rossmaxx
36786dd83d Enable LADSPA plugins on MSVC (#6973)
Co-authored-by: Tres Finocchiaro <tres.finocchiaro@gmail.com>
Co-authored-by: Dominic Clark <mrdomclark@gmail.com>
Co-authored-by: Dalton Messmer <messmer.dalton@gmail.com>
2024-05-13 08:44:42 +01:00
Dominic Clark
95e5f97150 Revamp resource embedding (#7241) 2024-05-12 17:38:14 +01:00
Tres Finocchiaro
6d100d1bba Remove support for msys2 (#7251) 2024-05-12 01:35:10 -04:00
Alexander Medvedev
acdf05f347 Update zynaddsubfx (#7250)
Update instrument submodule
2024-05-11 15:40:54 -04:00
Oskar Wallgren
b71d4f2aab Remove demo project Greshz-CoolSnip.mmpz (#7248) 2024-05-09 15:25:51 +02:00
Dalton Messmer
d71116b82a Update Linux CI to Ubuntu 20.04 (#7015)
- Switch to Ubuntu 20.04 Docker image ghcr.io/lmms/linux.gcc:20.04
- Linux packages have migrated from Docker Hub to https://github.com/orgs/lmms/packages
- Built using the Dockerfiles from Update Linux images lmms-ci-docker#15
- Updated the veal submodule to the latest commit on the default ladspa branch
- Fixed an error when catching a polymorphic type with GCC 9. See: LMMS/veal@0ae9287
- Added GCC flag -Wno-format-truncation for ZynAddSubFx build.
- Adds GCC flag -Wno-format-overflow for calf/veal build.

Closes #6993
2024-05-08 13:06:54 -04:00
Tres Finocchiaro
acefd06f9b Bump veal submodule (#6771)
- Add MSVC support
- Sync upstream changes
2024-05-08 01:06:03 -04:00
saker
20102c4ae4 Replace processingSampleRate with outputSampleRate in Lb302 (#7239) 2024-05-05 05:44:25 -04:00
saker
9b6e33aa5c Remove global oversampling (#7228)
Oversampling can have many different effects to the audio signal such as latency, phase issues, clipping, smearing, etc, so this should really be an option on a per-plugin basis, not globally across all of LMMS (which, in some places, shouldn't really need to oversample at all but were oversampled anyways).
2024-05-05 04:37:43 -04:00
Michael Gregorius
9bdc8adf33 Inform effects about changes in enabled model (#7237)
Add the virtual method `Effect::onEnabledChanged` which can be overridden by effects so that they can react to state changes with regards to being enabled or bypassed. The call of this methods is connected to state changes of the enabled model in the constructor of `Effect`.

Implement the method in `DualFilterEffect` by resetting the history of the two filters. This is done to prevent pops that have been reported in #4612.
2024-05-05 10:05:22 +02:00
Pascal
d5f5d00a6f Fix shifting of sample waveform during zoom (#7222)
The original code was doing division in `int`, which causes lost of accuracy and results in the waveform randomly shifting when zooming in and out.

This should fix it by casting variables to `float` before dividing, as well as keeping the values in `float` type.

The pull request also changes some type declaration to explicit to increase readability
2024-05-01 20:13:55 -04:00
Michael Gregorius
9ca9143f5b Fix upgrade routine for BPM renamings (#7235)
Fix the upgrade routine that was introduced with pull request #6747 which added the BPM value to some file names.

This also simplifies the implementation by using a map.

Note: this also removes the code about the prefix `factorysample:`. If it is used in some files these entries will also have to be added to the map.
2024-05-01 18:03:35 +02:00
Michael Gregorius
bb6a77aa0f Only set sample clips for valid files (#7224)
Check if a non-empty buffer was loaded and only set the sample clip if that's the case.

## Other changes

Move setting the song to modified towards the core in the context of `SampleClip`. Previously the `SampleClipView` did this but it's none of it's business.

Introduce `SampleClip::changeLengthToSampleLength` which changes the length of the clip to the length of the sample. This was also previously done by the view which is again the wrong place to do the necessary calculations. An unnecessary `static_cast` was removed while carrying over the code.

Add the method `SampleClip::hasSampleFileLoaded` which checks if the loaded sample corresponds to a given file name.

Fix code formatting.
2024-04-29 19:22:37 +02:00
Michael Gregorius
c0a4df49a2 Lb302: Consistent decay in time (#7230)
The previous implementation of Lb302`s decay used a fixed decay factor that was multiplied with the signal until the minimum threshold of 1/65536 was crossed. This fixed factor resulted in different lengths in time for different sample rates.

This is fixed by computing the decay factor by taking the sample rate into account as well. The new static method `computeDecayFactor` computes the factor that is needed to make a signal decay from 1 to a given attenuation over a given time.

The parameters used in the call to that method in `Lb302Synth::process` have been fine-tuned such that, at a sample rate of 44.1 kHz, they result in a factor very close to the previous hard-coded factor of 0.99897516.
2024-04-29 16:47:17 +02:00
Michael Gregorius
86363819c5 Fix Kicker's release stage (#7226)
When applying its release stage Kicker did not take the frames before the release into account but instead always applied the release to the full buffer. This potentially lead to a jump in the attenuation values instead of a clean linear decay.

See #7225 for more details.
2024-04-27 21:17:12 +02:00
Michael Gregorius
5c0db46a60 Streamline instrument flags (#7227)
## Instrument flags as a property of an instrument
The instruments flags (single streamed, MIDI based, not bendable) are properties of an instrument that do not change over time. Therefore the flags are made a property of the instrument which is initialized at construction time.

Adjust the constructors of all instruments which overrode the `flags` method to pass their flags into the `Instrument` constructor.

## Add helper methods for flags
Add helper methods for the flags. This makes the code more concise and readable and clients do not need to know the technical details on how to evaluate a flag.

## Remove the flags methods
Remove the flags methods to make it an implementation detail on how the flags are managed.
2024-04-27 17:45:55 +02:00
Rossmaxx
6c846684cd Replace call QT5_WRAP_UI with CMAKE_AUTOUIC (#7200) 2024-04-27 16:21:09 +01:00
saker
a53e5ba2f6 Remove high quality mode from codebase (#7219)
Many, many years ago (93a456c), high quality mode was merely disabled after it was noted that it can be problematic rather than being completely removed. Remove it from the codebase so we can get rid of some code and clean things up a bit.
2024-04-27 07:59:02 -04:00
Michael Gregorius
71dd300f43 Instrument release time in milliseconds (#7217)
Make instruments report their release time in milliseconds so that it becomes independent of the sample rate and sounds the same at any sample rate.

Technically this is done by removing the virtual keyword from `desiredReleaseFrames` so that it cannot be overridden anymore. The method now only serves to compute the number of frames from the given release time in milliseconds.

A new virtual method `desiredReleaseTimeMs` is added which instruments can override. The default returns 0 ms just like the default implementation previously returned 0 frames.

The method `computeReleaseTimeMsByFrameCount` is added for instruments that still use a hard coded release in frames. As of now this is only `SidInstrument`.

Add the helper method `getSampleRate` to `Instrument`.

Adjust several instruments to report their release times in milliseconds. The times are computed by taking the release in frames and assuming a sample rate of 44.1 kHz. In most cases the times are rounded to a "nice" next value, e.g.:
*  64 frames -> 1.5 ms (66 frames)
* 128 frames -> 3.0 ms (132 frames)
* 512 frames -> 12. ms (529 frames)
* 1000 frames -> 23 ms (1014 samples)

In parentheses the number of frames are shown which result from the rounded number of milliseconds when converted back assuming a sample rate of 44.1 kHz. The difference should not be noticeable in existing projects.

Remove the overrides for instruments that return the same value as the base class `Instrument` anyway. These are:
* GigPlayer
* Lb302
* Sf2Player

For `MonstroInstrument` the implementation is adjusted to behave in a very similar way. First the maximum of the envelope release times is computed. These are already available in milliseconds. Then the maximum of that value and 1.5 ms is taken and returned as the result.
2024-04-24 20:23:36 +02:00
Kevin Zander
62e2a39a7e SlicerT::findSlices - check if lower_bound did not find anything 2024-04-23 17:02:23 -05:00
Dominic Clark
bda042e1eb Add native system semaphore and Windows shared memory (#7212) 2024-04-20 23:21:29 +01:00
Rossmaxx
df11a98902 Bump Qt minimum version to 5.9 (#7204)
* bump qt minimum version to 5.9

* cleanup cmake checks

* Remove the obsoleted check.

* Missed this while removing the check.
2024-04-17 21:51:58 -04:00
Michael Gregorius
d5e1d9e853 Move icon determination into TrackLabelButton again (#7209)
Move icon determination into TrackLabelButton again

Fully undo the changes made in commit 88e0e94dcd because the intermediate revert made in commit 04ecf73395 seems to have led to a performance problem due to the icon being set over and over again in `TrackLabelButton::paintEvent`.

The original intention of the changes made in pull request #7114 was to remove the painting code that dynamically determines the icon over and over again. Ideally the icon that is used by an instrument should be somewhat of a "static" property that should be known very early on when an instrument view is created. There should not be any need to dynamically resolve the icon over and over, especially not in a button class very far down in the widget hierarchy. However, due to technical reasons this is not the case in the current code. See pull request #7132 for more details.
2024-04-17 19:21:23 +02:00
Michael Gregorius
d2c2a80506 Update CMT submodule / Upgrade code for CMT delays (#7206)
## Bump CMT to d8bf8084aa3
Bump the CMT submodule to commit d8bf8084aa3 which contains the underlying fixes for issue #5167.

The CMT delay uses `sprintf` calls to generate the technical names and display names of the delays. These calls are locale dependent. As a consequence for example the feedback delay might have been saved either as "fbdelay_0.1s" (point) or "fbdelay_0,1s" (comma) in a save file.

The CMT fix makes sure that all delays use points in their names and thus that they now always report the same name strings.

## Add upgrade routine for CMT delays
Add an upgrade routine for CMT delays which works in conjunction with the upgraded CMT submodule. Because the delays will now always report their name with points old save files which might contain versions with the comma must be upgraded to a name with a point.
2024-04-14 18:03:39 +02:00
Dominic Clark
d3ab31558c Support VSTs on Linux even if Wine is unavailable (#7205) 2024-04-14 12:54:10 +01:00
Michael Gregorius
815f88dd09 Scalable LFO graph (#7203)
## Scalable LFO graph
Make the rendering of the LFO graph scalable. Change the fixed size to a minimum size. Adjust the rendering code such that it uses the width and height of the widget instead of the background pixmap.

Only draw only poly line once instead of many line segments. Collect the points in the for-loop to be able to do so. This makes the code a bit more understandable because we now compute exacly one point per iteration in the for-loop.

Use the same interpolation for the line color like in the envelope graph.

Rename some variables to make them consistent with the other code.

Remove the member `m_params` which is not used anyway. This also allows for the removal of the overridden `modelChanged` method.

## Use "Hz" instead of "ms/LFO"
Use the more common unit "Hz" to display the frequency of the LFO instead of "ms/LFO". The frequency is always displayed with three digits after the decimal separator to prevent "jumps".

## Take "Freq * 100" into account
This commit fixes a bug where the "Freq * 100" option was not taken into account when computing and displaying the frequency of the LFO.

## Keep info text legible
Draw a slightly transparent black rectangle underneath the text to keep it legible, e.g. for high frequencies with an LFO amount of 1 which results in a very bright and dense graph.

## Extract drawing of info text into method
Extract the drawing of the info text into its own private method `drawInfoText`.
2024-04-14 10:31:27 +02:00
Michael Gregorius
8e40038a2d Scalable envelope graph (#7194)
Make the graph scalable by adjusting the painting code of the envelope so that it does not assume fixed widths and heights anymore. Remove the setting of a fixed size from the envelope graph and only set a minimum size.

Make three scaling modes available which can be selected via a context menu in the graph:
* "Dynamic": This modes corresponds to the rendering strategy of the previous implementation. Initially 80/182 of the available width is used as the maximum width per segment. This can be interpreted like a "zoomed" version of the absolute mode. If the needed space becomes larger than the full width though then it falls back to relative rendering.
* "Absolute": Each of the five segments is assigned 1/5 of the available width. The envelopes will always fit but might appear small depending of the current settings. This is a good mode to compare envelopes though.
* "Relative": If there is at least one non-zero segment then the whole width is always used to present the envelope.

The default scaling mode is "Dynamic".

## Technical details

The new painting code is more or less divided into two parts. The first part calculates `QPointF` instances for the different points. In the second part these points are then used to draw the lines and markers. This makes the actual rendering code much more straight forward, readable and maintainable.

The interpolation between the line color of an inactive and an active envelope has also been restructured so that it is much more obvious that we are doing an interpolation in the first place. The colors at both ends of the interpolation are explicit now and can therefore be adjusted much easier. The actual color interpolation is done in the helper function `interpolateInRgb` which is provided by the new class `ColorHelper`. This class will later also be needed when the LFO graph is made scalable.

The line is rendered as a polyline instead of single line segments.

The drawing of the markers has been abstracted into a lambda (with some outside captures though) so that it can be easily adjusted if necessary. The markers are rendered as circles instead of rectangles because that looks much nicer especially when the widget is rendered at a larger size.

The width of the lines and marker outlines is determined using the size of the widget so that it scales with the size.

A `lerp` function has been added to `lmms_math.h`.
2024-04-11 17:49:00 +02:00
Levin Oehlmann
1f5f28fd8a Don't auto-quantize notes when recording MIDI input (#6714)
* Don't auto-quantize notes when recording MIDI input.

* Add midi:autoquantize to config file and a widget to set it in the MIDI settings.

* Quantize notes during recording if midi:autoquantize is enabled.

* Apply suggestions from code review: Formatting

Style formatting

Co-authored-by: saker <sakertooth@gmail.com>

* Cache the auto quantization setting in a PianoRoll member variable, and update it on ConfigManager::valueChanged()

* Apply suggestions from code review: Formatting & temp variable

One formatting change, and reusing an existing variable instead of introducting a new local one.

Co-authored-by: saker <sakertooth@gmail.com>
Co-authored-by: IanCaio <iancaio_dev@hotmail.com>

* Update src/gui/modals/SetupDialog.cpp

Good catch.

Co-authored-by: IanCaio <iancaio_dev@hotmail.com>

* Fix logic bug in PianoRoll's midi/autoquantize value observer.

* Use '!' instead of 'not' to please MSVC.

* autoquantize: Add an explicit check for consistency with the rest of the PR, and give the setting a default value in SetupDialog constructor.

* Integrate MIDI auto-quantize checkbox into the resizable layout, and add a tool tip.

---------

Co-authored-by: saker <sakertooth@gmail.com>
Co-authored-by: IanCaio <iancaio_dev@hotmail.com>
2024-04-08 19:17:26 -04:00
Michael Gregorius
2472e9ee4e GUI adjustments around base velocity (#7196)
Change the label of the group box from "CUSTOM BASE VELOCITY" to "VELOCITY MAPPING".

Remove the long explanation text from the group box and add the following tool tip for the LcdSpinBox: "MIDI notes at this velocity correspond to 100% note velocity."

Change the label of the spin box from "BASE VELOCITY" to "MIDI VELOCITY" because that's what the value actually represents.
2024-04-05 17:24:28 +02:00