* Fix LADSPA effects memory leak
* Fix buffer overflow in PianoView
* Avoid using invalid iterators in AutomationClip
* Fix memory leaks in SimpleTextFloat
* Handle potential case where QMap::lowerBound(...) returns end iterator
* Implement suggestions from review
* 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
* 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>
* 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>
* Fixed issue #5734 (FreeBoy Division by zero).
Added comments and used more descriptive variable names for noise
channel initialization block.
Also indented the nested for loop to improve code clarity.
The reasons for doing this can be found in this answer:
https://softwareengineering.stackexchange.com/a/362796
* Better initial div_ratio guess
Allows us to skip r = 0 and a conditional in the loop below.
---------
Co-authored-by: Spekular <Spekular@users.noreply.github.com>
Fix the uninitialized variable pCurPreset by setting it to nullptr.
Please note that it looks as if the nullptr is now being passed to the
function fluid_sfont_iteration_next_wrapper. However, the function does
not use the parameter anyway and then the variable is set to the result
of that function.
* 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