In order to provide smooth muting functionality (i.e. immediate proper
sound when unmuting) always render audio buffers for MIDI-based
instruments. This is more important than potentially reduced CPU usage
while muted.
Closes#69.
When opening the Piano Roll for the first time and clicking on "A", you
would expect the same note that is previewed in the preview pane (A5),
but it is instead one octave lower (A4).
Fixed this by adusting INITIAL_START_KEY.
Closes#94.
This updates knobs to feel smoother and allow the user to have finer
control over the value of the knob by multiplying the mouse drag delta
by a smoothness factor.
Also since it is significantly easier to point the knob where you want
it, I removed the magnet effect. This can easily be put back in; try it
out and see what you think.
The FX chain background should look consistently and not change with
various numbers of inserted effects. Also IMHO we don't need extra
frames here. The drop shadow for the effects should be fixed as well.
Instead of creating a DetuningHelper instance for every note (which sums
up to thousands of AutomationPatterns) create them on-demand when opening
automation editor or loading settings.
There's no need to initialize an automation pattern with the value of the
model if it's default already. This fixes tons of dummy automation patterns
being saved for every note (as part of the note detuning feature).
In order to avoid data loss because of full disks or other storage
failures write a temporary file first, rename current file to backup
file and rename temporary file to current file.
Closes#26.
Now that we solved the problem with wrong default values in newly
introduced models when loading older projects we can safely implement
the new PeakController features.
This reverts commit 9cb52ccf0d.
When loading older projects where a particular model did not exist and
thus did not save any data do not load the possibly invalid default data
but reset to default value of model.
The new displayOffset property is an offset which is always added to the
value of model so we can display values in a user-friendly way if they
internally start at 0.