Lmms routes all midi notes to ZSAF on channel 0, however the CC messages
not routed, and could erronusoly be sent on other channels. This would
lead to ZSAF not acting on these midi commands
This pull request routes All Midi CC messages to channel 0
fixes#1953
Well, this commit got a bit out of hand, what with 26 files changed. Oh well.
Basically, we're using the buffermanager to dispense temporary buffers for playhandles and audioports to use.
This allows us to change the way playhandles work. Earlier, playhandles of the same track were waiting in line
to push their output to the audioport. This was of course inefficient, so now they just register themselves to the port,
then the port handles mixing the buffers.
Caveat: this is still a work in progress, the vol/pan knobs on instruments are temporarily non-functional - will be fixed in
the next commit, but I have to get some sleep now.
LMMS now properly builds and runs with Qt5. Various deprecated functions
had to be replaced like QString::toAscii()/fromAscii(). Also occurences
of FALSE/TRUE have been replaced with false/true.
LmmsStyle now derives from QProxyStyle and sets a style instance as base
style (Plastique for Qt4, Fusion for Qt5).
MOC files are not included anymore but added as regular source files.
What's missing is support for embedding VST plugins into a subwindow
inside LMMS on Linux/X11 due to missing QX11EmbedContainer class in Qt5.
Build instructions can be found in INSTALL.Qt5
Minimum version requirement for Qt4 has been raised to 4.6.0 for best
API compatibility between Qt4 and Qt5.
- currently only affects Vestige
- no idea whether this can also be used for Zyn and OpulenZ, I'm not sure if Zyn has any kind of mechanism for communicating frame offset to the synth, as for OpulenZ, @softrabbit would know the answer better
- basically, I made it happen by simply adding an extra parameter in the processMidi{In|Out} functions, which is 0 by default, and made the necessary changes in instrumentTrack and nph to utilize it
- I based this against 1.1 because I didn't think it's a very big change, and I don't see much possibility for things going wrong here, since we're basically just using the existing functionality in Vestige (there already was a frame offset being communicated to the remote plugin, just that it was always set to 0). However, if @tobydox thinks this is better to bump up to 1.2, I can rebase it for master...
When opening the ZynAddSubFX GUI the buffer size information was not
retrieved properly and caused problems when setting a low global buffer
size in LMMS. We update the buffer size in ZynAddSubFX manually now as
as a temporary workaround until the VST synchronization feature gets
stripped out of the RemotePluginClient class.
Closes#335.
Even though ZynAddSubFX does not support updating its pitch wheel range
via MIDI events we can set it manually using provided internal functions.
Closes#394.
The MIDI event handling in InstrumentTrack was complex and buggy. It has
been simplified now such that processInEvent() tries to handle note on,
note off and key pressure events. The actions taken should result in
equivalent calls to processOutEvent() by NotePlayHandle instances. The
processOutEvent() function sends according MIDI events to the attached
instruments. All unhandled MIDI events are directly forwarded to the
instrument in processInEvent().
It's possible that some corner-cases are not handled yet with the new code
and we have regressions now.
Furthermore renamed midiTime/midiEvent to MidiTime/MidiEvent to match
coding style.
Closes#72.
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.
As controller connections are not fully restored via
AutomatableModel::loadSettings(), a call to
ControllerConnection::finalizeConnections() is neccessary to do so.
Normally this function is called at the end when loading a project but
when the user just toggles ZASF's UI settings are saved/loaded without
finalizing connections which results in connected knobs which are not
reacting to the controller they are connected to.
Closes#544.
When sending MIDI events to the ZynAddSubFX engine do not statically
send them on channel 0 but on the MIDI channel which is set as output
MIDI channel of the instrument track. This adds some flexibility when
it comes to multipart ZynAddSubFX presets which are connected to
different MIDI channels.
The code for managing programs/presets of RemotePlugin instances was
very confusing, mainly within the VstPlugin and RemoteVstPlugin class.
I therefore started to reorganize and rewrite functions.
* win64-vst:
VST support layer: fixed non-working 64 bit VST plugins
VST support layer: added 32 bit VST plugin support for Win64
Win64Toolchain: added 32 bit compiler configuration
ZynAddSubFX: use new RemotePlugin::init() method
RemotePlugin: added support for running remote process multiple times
(cherry picked from commit 65c073ec63)
We must not only restore the controller knobs but also send updates
to ZynAddSubFX. However this only applies to knobs that were modified.
Therefore save and remember which knobs this applies for.
(cherry picked from commit b2cc802528)
The filter resonance controller erroneously was labeled with something
like "cutoff" which is definitely wrong. Use "resonance" instead.
(cherry picked from commit 1546b7cec0)
Commit 534c4debb5 introduced a regression.
If knobs have a song-global automation or controllers attached, they
save these settings in a sub XML node which confused the ZASF preset
loader which assumed the first child node would always be the ZASF
preset data. Fix this by explicitely searching for an XML element named
"ZynAddSubFX-data".
Closes#3057275.
(cherry picked from commit 4e695a4ea8)
After introducing the control knobs it's not always desired to forward
all MIDI Control Change events to ZynAddSubFX. Therefore added an LED
checkbox which allows to disable forwarding of such events.
Closes#3055332.
(cherry picked from commit 0b7e37ca6a)
There's no reason for not forwarding MIDI events such as NoteOff,
ControlChange etc. when muted. Therefore only do not forward NoteOn
when muted.
(cherry picked from commit 39918f8835)
When adding the new knobs for automatable parameters of ZynAddSubFX,
I forgot to include them in the save/load routines.
(cherry picked from commit 534c4debb5)
Added knobs for some MIDI controls that are recognized by ZynAddSubFX.
This allows to automate some basic parameters of ZynAddSubFX inside LMMS.
(cherry picked from commit 7a4f110af3)
* zynaddsubfx-master:
FLTK/CMakeLists.txt: fix CMAKE_MODULE_PATH, don't use 3rdparty code
ZynAddSubFX/FLTK: updated to SVN revision 7680
ZynAddSubFX: check whether QDomDocument::setContent() succeeded
ZynAddSubFX: completely reinitialize config after changing working dir
ZynAddSubFX: set working directory before setting preset directory
ZynAddSubFX/CMakeLists.txt: use global binary dir as last include dir
ZynAddSubFX/CMakeLists.txt: remove accidently added subdirectory
ZynAddSubFX: resynced with upstream (version 2.4.1)
ZynAddSubFX/FLTK: updated to SVN revision 6970
Misc: Minor changes to filter_ to reduce warnings (cherry picked from commit e2b1eb9b1077e6516c0cc4e2283e5c886bed0e58)
Cleanup: Separated Presets into Presets/PresetsArray
ZynAddSubFX: fixed commit d61283ad93
ZynAddSubFX/FLTK: updated to SVN revision 6943
small changelog fix (cherry picked from commit c8d411b5f7e7a295286c1ac2c09ae22f15a1db51)
VirKeyboard: Fixed possible segfault
small changes on Bandwidth on Reverb (cherry picked from commit d0b0a4e00a44559a4e78035fd04568bd4bab9651)
ZynAddSubFX: new QtXmlWrapper, a QtXml-based XML backend for ZASF
(cherry picked from commit 278b70384e)
On non-Linux platforms configuration file was saved in the application
path which definitely is not desired and also will not work in many
situations. Therefore always save ZynAddSubFX configuration file in
LMMS working directory.
(cherry picked from commit 000f67d01d)
It's now possible to hide the ZynAddSubFX UI by simply closing its main
window instead of going back to LMMS and toggle the "Show UI" button.
Furthermore moved code for GUI thread into a non-static member function
of RemoteZynAddSubFx and removed the old code for handling IdHideUI
messages.
(cherry picked from commit fe7486750b)
Fixed some spelling errors found by Lintian while checking the Debian
package of LMMS. Thanks to Patrick Winnertz for pointing out this issue.
(cherry picked from commit 9fd3dacb67)
LMMS' ZynAddSubFX plugin creates a temporary file for exchanging XML
data with the remote process. After calling QFile::write(...) data
has not neccessarily been written due to QFile's internal write buffer.
Therefore explicitely call QFile::flush() so all data is guaranteed
to be written.
Closes#2877916.
(cherry picked from commit 17b388d482)
After cherry-picking massive changes to ZynAddSubFX (and not resolving
conflicts properly) some 0.4.x specific code did not compile anymore.
This commit fixes those issues.
While regular instruments were excluded from processing when muted
this did not happen for InstrumentPlayHandle-based instruments. Muting
for exampling tracks with VSTi's inside did not decrease CPU usage.
Checking whether related InstrumentTrack is muted before calling
Instrument::play() fixes this issue.
Closes#2857426.
(cherry picked from commit 6940d19969)
While fixing the name of the plugin library in commit
883836aa8a the plugin descriptor
structure has not been updated.
(cherry picked from commit 5c96adbd6d)
Added a new GUI-less mode to ZynAddSubFX instrument plugin which allows
to let ZynAddSubFX audio processing happen within LMMS, giving a much
better realtime behaviour.
As soon as showing up the GUI settings of GUI-less ZynAddSubFX instance
are saved and a traditional RemoteZynAddSubFx process is being launched
and the settings are applied there.
(cherry picked from commit f1d383d04d)