mirror of
https://github.com/LMMS/lmms.git
synced 2026-05-30 01:35:43 -04:00
Makes the following changes to the Lb302 plugin for increased functionality, maintainability, and readability: - Add note velocity & note panning to Lb302 - Remove evil mutex+dynamic array combo in favor of a real-time safe ringbuffer queue - Use non-static data member initializers where possible - Use `std::numbers::pi` instead of `M_PI` - Use `std::array` and `std::unique_ptr` instead of manual memory management - Change plain-old-data classes with only public members to structs - Change some ints to f_cnt_t to better communicate their purpose and avoid weird implicit casting nonsense - Change floats to sample_t where appropriate to better communicate their purpose - Find suitable homes for loose constants - Prefix standard library math function calls with std:: - Ensure all floating-point literals intended to be floats end in 'f' and are not doubles to appease MSVC - Change uses of SIGNAL and SLOT macros to whatever they should be post-Qt6 upgrade - Tidy code to conform to current code conventions Also adds Hardware.h for low-level performance tools: - busyWaitHint(), supporting x86, ARM, and RISC-V - hardware_destructive_interference_size polyfill, supporting x86, ARM, RISC-V, and PPC - Moved the contents of denormals.h to Hardware.h, renamed disable_denormals() to disableDenormals() - Added ARM support to disableDenormals()
LB303 Bass Synth - Known bugs, issues, and missing features
-----------------------------------------------------------
2007.02.03 - First release
--------------------------
Important note, in the current incarnation there are many behaviors,
constants, and other items that will be changed. This will result
in a change of the instrument's timbre and functionality. Therefore,
it would be wise to not make any masterpieces with the synth at
this point in time.
BUG:
Fix the awful clicking cause by adjacent notes. This problem seems
to be caused by 'unexhausted buffers' That is, the problem manifests
itself to a greater degree when the user "buffer size" configuration
is increased to over 1024 frames or so. The problem is much less
noticeable when the buffer size is set to 64 frames.
BUG:
The synth does not make accomodations for sampling rates other than
44100. This should be easy to fix, but I haven't gotten around to
it; nor do I have the means to test it.
BUG:
I get segfaults now and then. Granted, I've rarely used LMMS
without also using LB302, so I do not know if the problem is actually
in the Bass Synth. I have gotten the backtraces a few times:
...
audioEngine::renderNextBuffer()
audioEngine::nextAudioBuffer()
QOBject::activate_signal()
??()
and
...
instrumentTrack::play()
notePlayHandle()
instrumentTrack::processOutEvent()
fadeButton::activate()
QSingleShotTimer::start()
qStartTimer()
qKillTimer()
QGList::insertAt()
TODO:
Add accent feature. This isn't as bad as it sounds, but will require
some tweaking to get right.
TODO:
LB302 contains code for a short fixed-length default decay. If a
released note is using a user-defined VCA from the instrument
panel, then LB302 should not do anything special. However, if no
envelope is specified, then LB302 should request enough release-frames
in order to apply the built-in exponential decay.
TODO:
The original TB-303's square wave is not 50% duty cycle. The peaks are
supposed to slope down slightly. It would be nice to be able to
configure this. In fact, each waveform could have a parameter knob to
change some aspect of the wave. See Lb302.cpp:643 for more info.
TODO:
Must decide on proper action to take when a slide note is interrupted
by another slide note. Right now, the slide-from frequency is always
replaced with the prior note. However, we may wish to maintain the
current frequency in order to make the sound more continuous.
TODO:
The default filter's distortion could use some work.
effectLib::distortion<> gets the job done, but the coefficients need
to more closely match that of Lb302Filter3Pole's tanh distortion.
TODO:
Slide decay needs a better knob mapping. sqrt()? Lb302.cpp:588
TODO:
Consider making the slide trigger set the note to slide TO as opposed
to the note to slide FROM. I originally did FROM in order to match
the real 303. However, TO may be more intuitive.
TODO:
Various code refactoring, as well as precomputing some values.
TODO:
Remove one of the sawtooth waveforms in favor of the other?