Commit Graph

2279 Commits

Author SHA1 Message Date
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
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
Sergey Fedorov
2ded48598f versioninfo.h: improve recognition of compiler and platforms (#6795) 2023-08-02 23:05:27 -04:00
Kevin Zander
5ccc8d952a Remove redundant nameChanged signal from InstrumentTrack (#6742) 2023-07-02 15:02:37 +09:00
Michael Gregorius
0ebc18941b More whitespace adjustments (#6711)
More whitespace adjustments as proposed in the code review.
2023-06-02 22:17:03 +02:00
Michael Gregorius
fda938fcca Code review changes (#6711)
Remove underscores and whitespace in the Model files.
2023-06-02 20:51:07 +02:00
Michael Gregorius
43319a8d79 Move implementations of Model into cpp file (#6711)
Move the implementation of the Model methods into Model.cpp so that
recompiles after changes are much quicker. Make Model::
isDefaultConstructed const.
2023-05-26 11:11:45 +02:00
Michael Gregorius
75627a15f9 Fix automation crash (#6711)
Fix a crash that occurs if the zooming or snapping model of the Song
Editor is used for automation.

The crash is caused by a failed static_cast to a Model* in
Model::parentModel(). The cast fails because in the constructor of
SongEditor the SongEditor is set as the parent of the zooming and
snapping model:
m_zoomingModel->setParent(this);
m_snappingModel->setParent(this);

This commit is rather a "band aid" fix because it only fixes the crash
by changing the static_cast to a dynamic_cast. However this means that
the name of the automation clip is initially empty.

A better solution would be to not use the Qt parent/child relationships
to implement the model hierarchies.
2023-05-26 10:52:35 +02:00
superpaik
d551938cbd Add confirm removal on mixer channels (#6691)
* Add confirm removal on mixer channels

Add confirm removal popup when the user calls the action "remove channel" on a mixer channel that is in use (receives audio from other channel or track). Set a config variable to keep track if the user don't want to be asked again. Adding a scroll on settings-general tab because there weren't enough space on the area.

* Core Mixer function channel in use

New core Mixer function to check if a given channel is in use (receives audio)

---------

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
Co-authored-by: saker <sakertooth@Gmail.com>
2023-05-10 20:14:24 +09:00
Lost Robot
87a57db593 Add instrument plugins to Song Editor via right click (#6698) 2023-05-06 13:16:07 +09:00
Michael Gregorius
ffe3bb4399 Merge pull request #6607 from michaelgregorius/ImproveReadabilityOfTextFloat
Improve readability of text floats
2023-04-29 16:53:58 +02:00
Michael Gregorius
b90156bedd Coding conventions
Adjust the code style of the adjusted and created classes according to
the coding conventions.
2023-04-09 17:02:26 +02:00
Lost Robot
fb529a19c5 Make note octave highlight in piano roll obey microtonality (#6663) 2023-03-26 12:30:12 -07:00
Johannes Lorenz
5b84b65236 Lv2: Update copyright 2023-02-21 21:03:00 +01:00
Johannes Lorenz
49a6abb343 Lv2: Add/improve some comments 2023-02-21 21:03:00 +01:00
Johannes Lorenz
f48dd0fb1f Fixes #6401: Reload Lv2 plugin on SR change
This also includes banning blop's wavedata plugins, because they crash
on reloading. Reference: https://gitlab.com/drobilla/blop-lv2/-/issues/3
2023-02-21 21:03:00 +01:00
Johannes Lorenz
7649f5ed24 Lv2ControlBase: Remove unused virtuals
They were never used. Possibly they were just in the code because the
code originated from #4662 (where the virtuals would also be
omittable...).
2023-02-21 21:03:00 +01:00
dev
192119621f Save Piano Roll behaviour at stop state 2023-02-18 10:23:06 -06:00
Kevin Zander
534e7edf0f Merge pull request #6603 from messmerd/include-guard-fix
Fix include guards and copyright statements
2023-02-18 09:32:27 -06:00
Lost Robot
8ba6a5f89e Draggable effects (#6648)
Reorder effects in Mixer with the mouse via click and drag
2023-02-18 09:22:16 -06:00
Johannes Lorenz
22eb7a1364 clang-tidy: Apply readability-const-return-type 2023-01-21 17:44:48 +01:00
Hyunjin Song
f89d52fa21 Fix more Qt deprecation warnings (#6615)
* Add <QHash> to PluginFactory.h

* Handle one more deprecated QTextStream::endl

* Replace QLayout::setMargin with setContentsMargins

* Replace Qt::MidButton with Qt::MiddleButton

* Replace QPalette::Background with QPalette::Window

* Fix deprecation warnings in LcdFloatSpinBox
2023-01-18 10:16:28 +09:00
Hyunjin Song
e8e54a7ba8 Remove more global automation from MidiImport (#6605) 2023-01-17 21:17:38 +09:00
Michael Gregorius
17295a4f86 Introduce SimpleTextFloat
Introduce the new class SimpleTextFloat which simply shows a text and
that works like a pseudo tool tip with a narrow margin. It was extracted
from TextFloat to adhere to the single responsibility principle.

The new class is used by:
* Fader: display the current volume when moving the fader
* Knob: display the current value when the knob is moved
* PianoRoll: display the current value when setting the note volume and
  panning

Add stylings for the new widget in style.css.
2023-01-10 19:20:26 +01:00
Dalton Messmer
d89f53b4b0 Fix mistakes 2023-01-07 21:12:23 -05:00
Michael Gregorius
6dfdafe1f7 Improve readability of text floats
Improve the readability of text floats by removing the hard coded pixel
font size. The widget is now composed of three QLabels which are used to
display the title, text and pixmap. Remove the methods paintEvent and
updateSize because the widget is now updated automatically whenever the
QLabels change state.

Merge both versions of TextFloat::displayMessage because one of them was
only called by the other.

The default constructor of TextFloat now delegates to the "full"
constructor. The latter is private because it is only used from within
displayMessage.

The methods setTitle, setText and setPixmap show/hide their
corresponding labels depending on whether there is text or a pixmap to
show.

Adjust the class Fader so that the text float is shown to the right of
the fader. Otherwise the new implementation would have covered the fader
while it is being moved.
2023-01-07 20:43:53 +01:00
Dalton Messmer
2c6d88f799 Add GUARD_H closing comments 2023-01-05 17:58:49 -05:00
Dalton Messmer
92522cf3ab Add missing copyright statement to CustomTextKnob.h/cpp 2023-01-05 14:03:07 -05:00
Dalton Messmer
bbf31a2e73 Add missing copyright statement to MidiCCRackView.h 2023-01-02 22:02:12 -05:00
Dalton Messmer
fe6df8dbaf Add namespace prefix to include guards 2023-01-02 19:51:32 -05:00
Dominic Clark
d95c89760a Support ZynAddSubFx with MSVC (#6561) 2023-01-02 23:42:46 +00:00
PrestonXPitzer
79def0c3b5 Changed Whitespace
removed whitespace in Piano.cpp and Piano.h to comply with LMMS coding convetions
2023-01-01 14:57:24 +01:00
Lost Robot
2f2ba41f28 Microtonality for SF2Player (#6580)
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
2023-01-01 10:28:30 +00:00
saker
a876cf9d00 clang-tidy: Apply modernize-avoid-c-arrays everywhere (#6564)
Co-authored-by: Dominic Clark <mrdomclark@gmail.com>
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
2022-12-30 22:18:14 +00:00
Veratil
edd759b511 Fix deprecated QString.sprintf with QString.arg 2022-12-28 20:36:10 -06:00
Lost Robot
ae55450155 Make shifting notes by octaves respect microtuning (#6545) 2022-11-05 15:42:56 -07:00
Michael Fulghum
a57265cf8d Limit height of while position line to height of all tracks (#6509)
* Position line height fits all tracks when line is moved or updated

* Refactor track height calculation; create connection to update position line height
2022-10-04 14:43:23 +09:00
saker
2f7a6558a1 clang-tidy: Apply modernize-loop-convert everywhere (#6481)
Co-authored-by: allejok96 <allejok96@gmail.com>
Co-authored-by: Dominic Clark <mrdomclark@gmail.com>
2022-09-27 09:27:35 +01:00
Johannes Lorenz
3cc5ec7282 Add check-namespace script (#6438)
This also fixes a lot of code files to be conforming to the script.

Co-authored-by: allejok96 <allejok96@gmail.com>
2022-08-30 02:19:07 +02:00
Craig Raslawski
17f597695b Fix wrong cursor for selected resizeable clips in song editor (#5996)
Fixes #879.
2022-08-28 12:09:52 +09:00
saker
b451e40b51 clang-tidy: Apply modernize-use-using everywhere (#6453) 2022-07-07 10:54:34 +02:00
Dominic Clark
6c3e148fbb Make VST sync always-on and non-global (#6418) 2022-07-04 17:03:17 +01:00
Alex
9705c31773 Transpose midi clips in song editor (#6409)
* Transpose midi clips in song editor

* Fix undo stupidity

* Check boundries when transposing clips

and move transpose function to NoteVector

* Avoid update if nothing has changed

* Make getNoteBounds a separate function

* Rename getNoteBounds to boundsForNotes

* bool operator instead of optional + qobject_cast

* Revert "bool operator instead of optional + qobject_cast"

This reverts commit 98c56a96cf.

* qobject_cast and nullopt
2022-07-04 10:16:22 +09:00
Levin Oehlmann
c075ba93fb clang-tidy: Run modernize-use-emplace everywhere (#6451)
... to avoid constructing and copying temp objects
2022-06-26 08:54:59 +02:00
Levin Oehlmann
28ec71f91a clang-tidy: Apply modernize-use-equals-default everywhere (#6450) 2022-06-26 08:48:24 +02:00
Levin Oehlmann
e72d9d46b8 Add missing gui:: prefixes to types in AudioSoundIo (#6447)
Fixup of #6174 .
2022-06-25 00:53:01 +02:00
Levin Oehlmann
773310384b clang-tidy: Apply modernize-redundant-void-arg everywhere (#6446) 2022-06-23 21:27:23 +02:00