It seems 64bit builds for some reason have problems with VST Sync feature on,
workaround seems to be converting VST sync patch from double to floats,
which does work both with 32 and 64bit builds. Double precision
seems to produce odd numbers with 64bit build. (tested on VirtualBox Linux
Mint 14.1 64 bit OS)
(cherry picked from commit 011f87e6e60cccd16f3783e9c4885e03d95c1e56)
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
This patch should bring VST to host synchronization for LMMS.
(e.g. for plugins like dBlue Glitch, TAL Filters).
Synchronization is done via shared memory, missing song time
positions are reccalculated and added to PPQ position sync values
(SHM - common input interface for sync of all VST plugins)
Master channel keeps freezing, when VST effects are placed directly
into Master channels FxChain, on slower computers.
Provided solution prolongs VST initialisation phase, by waiting on two extra messages,
which usually follows initialisation and are possibly not yet implemented well.
IdSampleRateInformation,
IdBufferSizeInformation
This seems to prevent Master channel freezes e.g. on VST effects like Tiny-Q.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
Various fixes improvements:
+ Added support for VST parameters control for windows.
+ New `Close` button for VST parameter controls.
+ Faster GUI for all instruments, effects-loading, not only VSTs,
and both one-instrument track window mode and normal window
mode should be supported.
+ Better integration for VST GUIs on Linux, e.g. plugin window
should not stay always on top of other windows.
+ VST GUI overlook should remain same with different wine setups
( except for whole virtual desktops emulations ).
+ VST effect control window merged with VST effect editor window
should be more easier to control.
+ Little corections at effectviews model updates of instrument
tracks effect chains.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
src/core/RemotePlugin.cpp @ RemotePlugin::process
Above function should be now more thread safe, but functionality remains.
This prevent lmms locks, when automation is connected to lmms VST plugin wrappers controler / knob on Linux.
On win32 build whenever is lmms wrapper parameter controler / knob amended.
plugins/vst_base/VstPlugin.cpp @ VstPlugin::setParam
plugins/vst_base/RemoteVstPlugin.cpp @ RemoteVstPlugin::processMessage
In above functions we dont wait for message confirmation when parameter setter function finish, and dont send such confirmations.
This workaround prevent locks on Linux, whenever there is automation connected and if you try to move with VST plugin
(not via lmms plugins wrapper, but with VSTs internal window) than it freezes, on win32 build it will freeze whenever you connect
automation and than if you move your mouse above this VST plugin window.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
Not all plugins save current program in their chunk (or do not restore
it properly). We therefore have to save and restore the current program
manually.
Closes#3581879.
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.
The RemoteVstPlugin process crashed for plugins with lots of presets
as there was an overflow of the presName buffer. Chosing a bigger buffer
size fixes the problem.
Additionally initialize len variable in loadChunkFromPresetFile().
LMMS VST Support Layer has been greatly advanced as it now features
(automatable) VST controls as well as support for VST presets. This
still needs some work as it crashes with various plugins (e.g. z3ta+).
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
* 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)
The pluginWidget of a VstPlugin (i.e. the VST editor) might be destroyed
outside VstPlugin's control resulting in a dangling pointer. This leads
to crashes for example when changing the model of an EffectView where a
VST plugin is attached, i.e. when re-opening a InstrumentTrackWindow of
an InstrumentTrack with a VST effect inside.
This can be fixed easily by using QPointer.
Closes#3045102.
(cherry picked from commit f4b84a6058)
Various plugins were missing the PLUGIN_EXPORT declaration with their
PluginDescriptor instantiations and lmms_plugin_main implementation
which made some plugins not show up with latest Win32 build.
It's not a good idea to allocate the buffer for VST chunk data on the
stack as chunks might become quite big (several megabytes) and thus
could cause a stack overflow. Fix this by using new/delete.
(cherry picked from commit 5f241e6374)
VstPlugin creates a temporary file for exchanging data chunks of VST
plugins 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.
Fixes problems with plugins which save small data chunks.
(cherry picked from commit 4b8ddcc14f)
There's no need to call plugin dispatcher in hostCallback. It makes
plugins like Garritan Personal Orchestra 4 lock up. After removing
these calls the affected plugins work.
(cherry picked from commit 44e25a6ad5)
Most files and most of the core classes and their methods have been
renamed to match new coding style conventions:
391 files changed, 25400 insertions(+), 25598 deletions(-)
Furthermore splitted some files where model and view classes were
declared or implemented together in the same file.
Should be tested thoroughly as I might have missed renaming some virtual
methods or SIGNAL/SLOT parameters.
(cherry picked from commit 8c9a9dd14c)
If libraries are being used from somewhere other than
/usr/include or /usr/local/include, building vst_remote would fail.
Now it checks CMAKE_INSTALL_PREFIX/include.
(cherry picked from commit 7d0c1ef6c2)
* cleaned up code and improved coding style
* removed old SINGLE_SOURCE_COMPILE macro relicts
* use QString::toUtf8() instead of QString::toAscii() wherever possible
(cherry picked from commit 0bb54199b0)
QString::toStdString() is not aware of locale specific characters (it
just converts to ASCII). Therefore added new macro QSTR_TO_STDSTR which
converts a QString to std::string with UTF8 characters.
Use this new macro in LMMS VST Support Layer and ZynAddSubFX plugin.
This fixes for example VST plugins not being loaded when the path to
the DLL contains non-ASCII (e.g. cyrillic) characters.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit f3e13c4427)
Commit 4ad5add745 introduced a typo which
lead to compilation failure. This commit fixes it.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit c4c94985a6)
Added a typedef for VstMidiEventList so actual type does not have
to be hard-coded each time in the code.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit 4ad5add745)
Don't process MIDI events in GUI thread as this might corrupt MIDI
event array if both GUI and processing thread access it. Fixes
possible crashes.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit e7ab8e5670)
Locking the plugin is now achieved by calling RemoteVstPlugin::lock()
and RemoteVstPlugin::unlock().
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit 2240d6644d)
Different threading models aren't used anymore as SplittedThreadingModel
after all recent improvements works fine for all plugins tested so far.
It even shows that a lot more VST plugins are running now properly.
Therefore all support for TraditionalThreadingModel has been removed
which greatly simplifies code and makes it much more maintainable.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit 41c9318be8)
When saving or restoring settings, prefer chunks over parameters.
This fixes some problems with plugins which get confused e.g. if you
restore individual parameters rather than the whole chunk.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit dffd9ecfbe)
O_BINARY flag is not supported on Linux, therefore define it to 0.
Fixes compilation failure on Linux.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit d6a451bdf5)
When writing chunk to file or read it back from file, open file with
O_BINARY flag. Otherwise on win32 for example line endings (\n) are
converted (\r\n) and with real binary data this screws up things.
Thanks to Oleg Sharonov for pointing this out.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit 48a3d4ebe4)
When input/output count changes, always print new number of inputs and
outputs as debugg message.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit 5838f63d0b)
Reset m_inputs and m_outputs to NULL after deleting the memory they're
pointing to. Fixes possible crash if new input or output count is 0
and the count changes again later.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit 206d906c10)
Some plugins call host callback from within their main function,
causing RemoteVstPlugin::m_plugin not to be set yet. Therefore
explicitely set RemoteVstPlugin::m_plugin if it's NULL. Makes plugins
by Wallander Instruments (and possibly others as well) work.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit 38f7552ce4)
Plugin dispatcher was called without any protection from various threads
leading to regular crashes or deadlocks within the plugin. The plugin
dispatching is now encapsulated into one central function which protects
the dispatcher by a mutex.
Furthermore improved handling of audioMasterIdle and
audioMasterUpdateDisplay in host callback by posting a message to GUI
thread asking for idle processing instead of directly calling plugin
dispatcher.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit e65b282166)
Renamed class remoteVstPlugin to RemoteVstPlugin + other minor coding
style fixes.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
(cherry picked from commit cca39513d0)