Despite of the previously introduced sanitizing it still sometimes happens
that an end frame variable is not greater than the corresponding start
frame variable. Make sure we don't crash by adding more sanity checks in
getSampleFragment().
Closes#629.
An end frame variable always has to be greater than a start frame in
order to prevent crashes due to negative frame counts being calculated
in getSampleFragment() otherwise.
Closes#629.
In order to get a uniform behaviour when starting with a new project or
opening another project, reset volume and panning of last edited note so
new placed notes have default volume and panning.
Closes#644.
When using value from linked model, make sure to fit it into own range
as otherwise this can cause out-of-boundary accesses e.g. in ComboBoxModel.
Closes#505.
This does not work well if you open an instrument window of a single
streamed instrument, close it afterwards and open an instrument window
of a regular instrument due to widget caching/reuse. We therefore have
to find a better solution which allows dynamically showing/hiding tabs
in the TabWidget class. Until then restore the previous behaviour.
This reverts commit ed29f2b6f6.
All classes inheriting from SerializingObject should also provide
according functionality, therefore ensure, they implement methods for
loading and saving settings.
The engine class as the component instance manager is the wrong place to
control the play/pause buttons. Instead emit a signal in the Song class
and update the buttons in a slot in MainWindow. This fixes problems with
GUI/pixmap operations happening outside the GUI thread when exporting a
project.
Closes#435.
In order to keep compatibility with projects created with LMMS < 1.0.0
we maintain a property specifying the base velocity (i.e. the velocity
sent to MIDI-based instruments at volume=100%). For new projects this
always will be 64 while compat code enforces a value of 127 for old
projects.
We can also think about hiding the new groupbox in order to hide
complexity from the user.
Closes#430.
As we have a special semantic for automation pattern playback (i.e. we
don't playback the pattern itself but its container component like
Song Editor, Piano Roll etc.).
Closes#292.
This is a partial revert of 2e799718d6.
As playing test notes generate MIDI events as well, they get recorded
like any other notes resulting in undesired behaviour.
Closes#368.