Commit Graph

7841 Commits

Author SHA1 Message Date
sakertooth
48b545bcdf Use ArrayVector in Sample 2023-08-31 11:24:47 -04:00
sakertooth
8c834aa1f7 Merge remote-tracking branch 'upstream/master' into refactor-samplebuffer 2023-08-31 11:13:36 -04:00
sakertooth
1d452331d1 Remove use of shared ownership for Sample
Sample does not need to be wrapped around a std::shared_ptr.
This was to work with the audio thread, but the audio thread
can instead have their own Sample separate from the UI's Sample,
so changes to the UI's Sample would not leave the audio worker thread
using freed data if it had pointed to it.
2023-08-31 10:24:57 -04:00
Dominic Clark
4804ab6785 Support per-note detuning and panning with Sf2 Player (#6602)
* Add `ArrayVector` class template and tests

* Fix counting of failed test suites

* Support detuning and panning with Sf2 Player

* Restrict panning to supported FluidSynth versions

* Fix data array cast type

* Fix tests for Qt<5.10 and correct mistaken test

* DIsplay warning for FluidSynth < 2

* Remove unnecessary clamp

* Update include guard name
2023-08-31 07:12:00 -04:00
Dominic Clark
3263bfd555 Fix generator expression in strip command (#6762)
* Fix generator expression in strip command

* Add TODO comment for CMake 3.19
2023-08-30 21:01:15 -04:00
MrTopom
fcdf4c0568 Showing Knob value on mouse over (#6835)
* Showing Knob value on mouse over

* Correcting minors source code issues

* Correcting double QTimer include

* Removing blank lines

* Removing space and add one

* Update src/gui/widgets/SimpleTextFloat.cpp

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

* Correcting QTimer

* Remove a parameter that has the default value

---------

Co-authored-by: saker <sakertooth@gmail.com>
2023-08-29 15:32:11 -04:00
sakertooth
9583fcfd48 Adjust assert expressions in Sample 2023-08-29 14:36:46 -04:00
saker
1e6a66f4ac Add mixer LCD channels for Instrument & Sample tracks (#6831)
* Add mixer channel LCD to SampleTrackView

* Increase sizes to compensate for LCD box
The DEFAULT_SETTINGS_WIDGET_WIDTH and
DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT
were both increased by +32 pixels. TRACK_OP_WIDTH
 and TRACK_OP_WIDTH_COMPACT were then changed
 relative to that increase.

* Use Qt layout in SampleTrackView

* Add mixer channel LCD to InstrumentTrackView

* Move LCD box to the right of the track label

* Revert changes to TRACK_OP_WIDTH and TRACK_OP_WIDTH_COMPACT
2023-08-28 13:14:19 -04:00
sakertooth
cb42f0a396 Add cassert include within Sample 2023-08-28 06:38:56 -04:00
sakertooth
622405e3ed Add asserts to Sample 2023-08-28 03:21:21 -04:00
sakertooth
d7f9f593f0 Check if audio file is empty before loading 2023-08-28 03:07:06 -04:00
sakertooth
dbf32148c2 Revert accidental change on SamplePlayHandle L.111 2023-08-28 00:53:14 -04:00
sakertooth
d16b77e198 Use std::atomic_load for most calls to Oscillator::userWaveSample 2023-08-28 00:47:47 -04:00
sakertooth
3688073075 Include memory header in EnvelopeAndLfoParameters 2023-08-28 00:08:44 -04:00
sakertooth
6a53a1005a Use atomic_load within SampleClip::sample 2023-08-28 00:06:14 -04:00
sakertooth
2b378742e2 Include memory header in Oscillator 2023-08-27 23:55:50 -04:00
sakertooth
12fe2b9419 Include memory header in TripleOscillator 2023-08-27 23:37:32 -04:00
sakertooth
53728ce70f Remove old SampleBuffer 2023-08-27 23:31:36 -04:00
sakertooth
0017f66629 Integrate changes into AudioFileProcessor 2023-08-27 23:12:11 -04:00
sakertooth
aca875b0e4 Reduce indirection to sample buffer from Sample 2023-08-27 20:43:00 -04:00
sakertooth
25bb7abbb7 Integrate changes into Patman 2023-08-27 20:33:42 -04:00
sakertooth
6bf4483b95 Remove SampleBuffer include from SampleClipView 2023-08-27 20:27:15 -04:00
sakertooth
253ce15416 Integrate changes into Graph 2023-08-27 20:24:38 -04:00
sakertooth
d3ecea38f3 Integrate changes into SampleClip/SamplePlayHandle 2023-08-27 20:21:08 -04:00
sakertooth
7245b1abc4 Integrate changes into Oscillator 2023-08-27 19:34:16 -04:00
sakertooth
e01b1fca45 Integrate changes into AudioSampleRecorder 2023-08-27 18:01:56 -04:00
sakertooth
51bd371067 Add SampleLoader 2023-08-27 17:57:33 -04:00
sakertooth
aeef0f8a88 Add Sample 2023-08-27 17:16:14 -04:00
sakertooth
49e8852c1c Add refactored SampleBuffer 2023-08-27 17:12:52 -04:00
MrTopom
e2fd288ae7 Change the title for SideBarWidgets to be vertically centered related… (#6833)
* Change the title for SideBarWidgets to be vertically centered related to icon and with no underlining

* Update src/gui/SideBarWidget.cpp

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

---------

Co-authored-by: saker <sakertooth@gmail.com>
2023-08-27 14:11:41 -04:00
Michael Gregorius
0e93f1332b Merge pull request #6832 from michaelgregorius/6828-FixBaseNoteAutomationFix
Fix the base note automation fix (#6828)
2023-08-27 18:42:05 +02:00
Michael Gregorius
4cb09e2b60 Fix the base note automation fix (#6828)
Towards the end of the development for the fix of #6548 (via #6725) the upgrade code was refactored into its own class. While doing so it was forgotten to actually call the `upgrade` method on the `UpgradeExtendedNoteRange` instance. As a result almost all files should currently open in a wrong state with many instruments transposed. This commit fixes this.

Also explicitly check the assertion that BB tracks do not contain other BB tracks.
2023-08-27 18:21:38 +02:00
Hyunjin Song
fc2f6a0b31 Replace the CI status badge with GitHub Actions 2023-08-26 11:53:34 +09:00
Michael Gregorius
7000afb2ea Modifier keys for mouse wheel adjustments (#6769) (#6770)
* Modifier keys for mouse wheel adjustments (#6769)

Give the users the option to use modifier keys (Shift, Ctrl, Alt) to
switch between different scales of adjustment when changing knob values
using the mouse wheel.

The commit implements the following behaviour:

* Using the mouse wheel without any modifier keys makes coarser
  adjustments than the current default, i.e. the range of the
  parameter can be swept with 100 mouse wheel events instead of 2000.
* Pressing the "Shift" key while using the mouse wheel allows making
  coarser adjustments than the default. The range can be swept with
  10 mouse wheel events.
* Pressing the "Ctrl" key allows making finer adjustments than the
  default. The range is swept with 1000 events.
* Pressing the "Alt" key allows even finer adjustments. The range is
  swept with 2000 events (the current default).

Most of these scales are organized in magnitudes (10, 100, 1000) which
should give a very natural feeling to "zone in" on a value.

* Fix indentation of comments

Fix the indention of comments as Qt Creator seems to be incapable of
copy-pasting code in a sensible way.

* Fix comments

Fix the comments by describing better the ideas instead of referencing values.

* Fix format in src/gui/widgets/Knob.cpp

---------

Co-authored-by: saker <sakertooth@gmail.com>
2023-08-25 22:11:03 -04:00
consolegrl
a9f0a533a0 fixes #6759: Tempo Sync Knob - Context menu string don't update on custom tempo (#6827)
* fixed #6759: Context menu string doesn't update

The TempoSyncKnobModel didn't emit any signal when the a
SyncMode::Custom was recaclulated.
Also it looks like someone broke the TempoSyncKnowModel
  bc SyncMode had been renamed to TempoSyncMode and the
  build was screaming.

* fixed #6759: Knob custom tempo

The TempoSyncKnobModel didn't emit any signal when the a SyncMode::Custom was recalculated.
Also it looks like someone broke the TempoSyncKnowModel
  because SyncMode had been renamed to TempoSyncMode and the
  build was screaming.

Recommit, fixed silly mistake where the signal would be emitted twice
on mode change to Custom.

* Update src/core/TempoSyncKnobModel.cpp

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

* Update src/core/TempoSyncKnobModel.cpp

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

* Use function pointers for connect TempoSyncKnob.cpp

* Silly fp mistake fixed in TempoSyncKnob.cpp

* Unfixed second macro call for now: TempoSyncKnob.cpp

---------

Co-authored-by: saker <sakertooth@gmail.com>
2023-08-26 10:16:34 +09:00
saker
a311eed8e8 Add Tap Tempo (#6375)
* Add Tap Tempo Feature (#6375)
Resolves #5181

* Update formatting, use namespaces, etc.

* Use Qt Designer .ui file to handle the UI
Thanks to irrenhaus for the idea
Also added a few buttons I will add functionality for

* Play metronome sound when tapped

* Improve stabilization speed by comparing differences in length between intervals
To improve the speed at which the BPM counter stabilizes at a
certain number, we now compare the differences in length between
the last two taps and the most recent two taps and reset the counter
if the threshold is passed.
I made it so that a difference of 500 ms resets the counter.

* Remove duplicate m_ui
An artifact from my battle with Git and merge conflicts..

* Format TapTempoUi header file

* Add lmms namespace in UI file

* Remove taptempo.ui XML file
Not needed

* Add LMMS_EXPORT to SamplePlayHandle

* Use std::chrono::duration<double, std::milli> for intervals
Co-authored-by: irrenhaus3 <irrenhaus3@gmail.com>

* Use alias for steady_clock
Co-authored-by: irrenhaus3 <irrenhaus3@gmail.com>

* Speed up convergence by accounting for recent intervals

This uses a combination of keeping track of a more accurate BPM,
while also using a BPM difference threshold to move towards the true BPM
more quickly.

After three taps, a "recent interval" is calculated, which is similar
to the latest interval, but less fluctuating since it accounts for
three taps instead of one. This allows for comparing between
the BPM on the display with the recent BPM more closely.

We then compare the difference in magnitude of both BPM's
with the threshold. If the threshold is passed, the counter gets reset.

* Remove semicolon from "QOBJECT;" in plugins/TapTempo/TapTempo.h

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>

* Add newline between using alias and constructor

* Cleanup header files

* Add // namespace lmms::gui comment

* Rename header guards in plugins/TapTempo/TapTempo.h

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Rename header guards in plugins/TapTempo/TapTempo.h

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Rename header guards in plugins/TapTempo/TapTempoUi.h

Will merge this file with ``TapTempoView`` soon.

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Rename header guards in plugins/TapTempo/TapTempoUi.h

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Update plugins/TapTempo/TapTempo.h

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Replace virtual with override in plugins/TapTempo/TapTempo.h

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Merge UI file into TapTempoView

* Pass TapTempo* directly into constructor in plugins/TapTempo/TapTempoView.h

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Update style in plugins/TapTempo/TapTempoView.h

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Add parameter name for keyPressEvent function in plugins/TapTempo/TapTempoView.h

Also reorder the function declarations to match the order in the source file.

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Remove dynamic_cast to TapTempo* in plugins/TapTempo/TapTempoView.cpp

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Restrict C linkage to only lmms_plugin_main and plugin descriptor
Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Simplify algorithm

* Update labels when calling closeEvent

* Add reset button

* Adjust layout

* Format document

* Only allow the tap button to gain focus

* Use icon provided by LMMS

* Add sync button and adjust formatting

* Make the metronome downbeat the first beat

Also simplify code

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Round BPM values when syncing with project tempo

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>

* Change Plugin::Tool to Plugin::Type::Tool

---------

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>
2023-08-25 14:43:09 -04:00
Dominic Clark
f10277715f Classier enums (#6760) 2023-08-24 19:16:02 +01:00
saker
3aed361b82 Core: Replace global Qt declarations with standard equivalents (#6821)
* Replace qAbs with std::abs

* Replace qBound with std::clamp

* Replace qMax with std::max

* Replace qMin with std::min

* Replace qRound with std::round

* Replace qgetenv with std::getenv

---------

Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>
2023-08-24 17:28:34 +01:00
superpaik
d6cf417a4d Change zoom in SongEditor to a Slider Zoom (#6664)
Co-authored-by: Dalton Messmer <33463986+messmerd@users.noreply.github.com>
Co-authored-by: Alex <allejok96@gmail.com>
2023-08-24 17:02:26 +01:00
saker
da14de92fe Fix regressions in #6477 (#6826)
* Fix if statement in ClipView

* Move controllers.begin() to be the first argument
It was the second argument, which means it could've
returned negatives for random access iterators.
2023-08-23 21:52:35 +01:00
saker
9a0add49fb Core Refactor: Replace `QVector with std::vector` (#6477)
* Replace QVector with std::vector in AudioEngine

* Replace QVector with std::vector in AudioEngineWorkerThread

* Replace QVector with std::vector in AudioJack

* Replace QVector with std::vector in AutomatableModel

* Replace QVector with std::vector in AutomationClip

* Replace QVector with std::vector in AutomationEditor

* Replace QVector with std::vector in ConfigManager

* Replace QVector with std::vector in Controller

* Replace QVector with std::vector in ControllerConnection

* Replace QVector with std::vector in EffectChain

* Replace QVector with std::vector in EnvelopeAndLfoParameters

* Replace QVector with std::vector in InstrumentFunctions

* Replace QVector with std::vector in MidiClient

* Replace QVector with std::vector in Mixer

* Replace QVector with std::vector in Note

* Replace QVector with std::vector in PeakController

* Replace QVector with std::vector in PianoRoll

* Replace QVector with std::vector in PluginFactory

* Replace QVector with std::vector in RenderManager

* Replace QVector with std::vector in StepRecorder

* Replace QVector with std::vector in Track

* Replace QVector with std::vector in TrackContainer

* Replace QVector with std::vector in Song

* Adapt QVector to std::vector changes in ControllerConnectionDialog

* Phase 2: Use std::abs in panning.h
Without this, the QVector changes will make the code not compile.

* Phase 2: Replace QVector with std::vector in PeakControllerEffect

* Phase 2: Replace QVector with std::vector in AutomatableModel

* Phase 2: Replace QVector with std::vector in AutomationClip

* Phase 2: Replace QVector with std::vector in ControllerConnection

* Phase 2: Replace QVector with std::vector in EffectChain

* Phase 2: Replace QVector with std::vector in Mixer

* Phase 2: Replace QVector with std::vector in PeakController

* Phase 2: Replace QVector with std::vector in RenderManager

* Phase 2: Replace QVector with std::vector in Song

* Phase 2: Replace QVector with std::vector in StepRecorder

* Phase 2: Replace QVector with std::vector in Track

* Phase 2: Replace QVector with std::vector in TrackContainer

* Phase 2: Adapt QVector changes in EffectRackView

* Phase 2: Adapt QVector changes in AutomationClipView

* Phase 2: Adapt QVector changes in ClipView

* Phase 2: Adapt QVector changes in AutomationEditor

* Phase 2: Adapt QVector changes in PianoRoll

* Phase 2: Adapt QVector changes in TrackContainerView

* Phase 2: Adapt QVector changes in TrackContentWidget

* Phase 2: Adapt QVector changes in InstrumentTrack

* Phase 2: Adapt QVector changes in MidiClip

* Phase 2: Adapt QVector changes in SampleTrack

* Fix segmentation fault in ConfigManager::value

* Fix unintended faulty std::vector insert in AutomationClip::resolveAllIDs

* Resolve trailing whitespace in src/core/StepRecorder.cpp

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>

* Use std::next and std::prev in EffectChain::moveUp/moveDown

* Introduce static "combineAllTracks" function in AutomationClip

* Adjust variable name in Song::automatedValuesAt

* Adjust removal of long step notes in StepRecorder::removeNotesReleasedForTooLong

* Iterate over m_chords by const reference in src/core/InstrumentFunctions.cpp

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>

* Fix StepRecorder::removeNotesReleasedForTooLong again

* Combine the ConfigManager::value overloads using std::optional

* Revise StepRecorder::removeNotesReleasedForTooLong

* Remove redundant std::optional in ConfigManager::value

* Remove trailing whitespace in ConfigManager::value

* Fix: Prevent incorrect use of std::distance when element not found

* Chore: Remove trailing whitespace in edited files

* Only set the id attribute if the controller was found

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>

* Remove extra indents from 84b8fe8a559855ed263b74cc582eab3655250c5f

* Fix compilation issues

* Add LMMS_ prefix for header guard in Track.h

* Undo changes made to MixerView::deleteUnusedChannels

* Simplify code to handle failure of finding tracks
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>

* Split ternary operator into separate if statement
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>

* Undo changes to indentation in MixerRoute

* Do general clean-up
Some of the changes made:
+ Use auto where benefical
+ Fix bug in AutomatableModel::globalAutomationValueAt (for loop should be looping over clips variable, not clipsInRange)
+ Undo out of focus whitespace changes

* Always assign to m_steps regardless if clip is found or not
Even when the clip is not found (i.e., currentClip is -1), m_steps still
gets assigned to.

* Insert at the end of tracks vector in src/core/Mixer.cpp

Co-authored-by: Dominic Clark <mrdomclark@gmail.com>

* Insert at the end of tracks vector in src/core/Mixer.cpp (2)

Co-authored-by: Dominic Clark <mrdomclark@gmail.com>

* Remove redundant template parameter

* Use std::array for zoomLevels

---------

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
Co-authored-by: Dominic Clark <mrdomclark@gmail.com>
2023-08-22 12:08:56 +09:00
saker
2ca05d025c Bump mingw-std-threads submodule (#6817)
* Bump submodule and generate std headers

* Commit submodule update

* Downgrade to earlier commit
Can be upgraded once a proper C++20 MinGW compiler
is available for the docker images.

* Downgrade to the correct commit

* Append mingw_stdthreads to EXTRA_LIBRARIES
Currently for this CMake version, it seems that there is no support to
link other targets to object libraries. I'll add it to EXTRA_LIBRARIES
instead.

* Add LMMS_ prefix to USE_MINGW_STD_THREADS

* Use built-in MINGW CMake variable

* Use lowercase rather than uppercase
2023-08-22 12:08:18 +09:00
Dalton Messmer
5cbf2c5287 Fix LMMS plugin issues (#6670)
* Fix Organic automated harmonic parameter loading

* Fix Kicker automated end distortion parameter loading

* Fix AudioFileProcessor automated interpolation parameter loading

* Fix Vibed automated volume parameter loading

* Improve coding style/formatting

* Fix #6671

* Fix Vibed memory leaks

* Refactor Vibed instrument

* Fix build

* Try to fix build again

* Revert previous commit

* Replace more raw pointers with smart pointers

* Remove unused files

* Minor changes

* Update plugins/Vibed/Vibed.cpp

Co-authored-by: Kevin Zander <veratil@gmail.com>

* Implement suggestions from review

* Minor changes

* Only check plugin data pointer

* Refactor NineButtonSelector

* Fix memory leaks during heavy tempo automation

* Fix build

* Use s_stringCount

* Replace some vectors with arrays

* Use array instead of switch

* Allow compiler to generate move assignment operator

* Fix loading of old automated detune values

* Fix member variable names

* Address review comments

---------

Co-authored-by: Kevin Zander <veratil@gmail.com>
2023-08-22 12:07:09 +09:00
Bimal Poudel
793f096c4f Update DummyCarla.cpp to use CARLA_PLUGIN_EXPORT (#6814) 2023-08-20 15:52:23 +09:00
Dalton Messmer
b62a272d01 Fix segfault when clicking "Auto Detect" in Connection Settings window (#6811) 2023-08-19 15:47:26 +09:00
consolegrl
98c5e6af5d fix: Issue 6807: Marked notes bleed into note... (#6812)
Issue was caused by an obiwan (off-by-one)
The 'if (y > limit)' test was broken by an incorrect inequality,
 should be >=, and a graphical adjustment made previously in the
 'y = ...' statement. I perserved the graphical adjustment and
 fixed the test to be 'if (y >= limit - 1) { break; }'
2023-08-18 16:26:06 +02:00
Michael Gregorius
4ff95072e8 Merge pull request #6725 from michaelgregorius/6548-FixBaseNoteAutomations
Fix automated base notes and their automations (#6548)
2023-08-16 21:14:33 +02:00
IanCaio
e87d44b42c Fixes bug from issue #6002 (#6803)
* Fixes bug from issue 6002

	Since the refactoring of the Copy/Paste features, it was not
possible to paste inside the BBEditor (now Pattern Editor), as reported
on issue #6002. The reason for that is better explained in the issue
discussion.
	This PR fixes this by allowing pasting inside the Pattern Editor
when the clipboard has a single Clip, which is what was allowed on the
previous workflow, while at the same time avoiding the unexpected
behavior of pasting multiple Clips that might invade the positions
reserved for different Pattern Tracks.
2023-08-12 11:54:26 -03:00
Michael Gregorius
5a6799314a Fix builds (#6548)
Add the comment "// namespace lmms" to the closing scope of the lmms
namespaces. The "scripted-checks" are quite strict. Perhaps they should
be renamed to "strict-checks". ;)

Include "cassert" in UpgradeExtendedNoteRange.cpp to hopefully fix the
mingw builds.
2023-08-11 18:44:13 +02:00
Michael Gregorius
5335f6d8c6 Separate class for extended note range upgrade (#6548)
Extract the code that upgrades the extended note range into its own
class. This hides the helper functions that are related to the upgrade
from the other upgrade methods in DataFile.cpp.

The header file is put into the src/core directory as it is not part of
the public interface and therefore should not be included in the
"global" include directory. The whole thing is just an implementation
detail of the upgrade in DataFile.cpp.
2023-08-11 18:33:35 +02:00