Commit Graph

30764 Commits

Author SHA1 Message Date
Robin Gareus
f3fbf58185 Set default transient parent to the main window
This is mainly useful for plugin windows, but also relevant
for other Ardour WM managed dialogs and windows.
2020-09-27 02:07:19 +02:00
Robin Gareus
55df465fb3 VST3: load custom state after restoring port value
This fixes restoring the sate of Spitfire LABS and possibly
other plugins
2020-09-26 21:42:57 +02:00
Robin Gareus
6a780f9cbc VST3: fix pitchbend range 2020-09-26 21:40:09 +02:00
Robin Gareus
751db481a6 Use linear fades for loop-range cross-fades
The cross-over point of an exponential fade occurs further towards
start of the fade. This increases consistency of cross-fades moving
the cross-over point to the center of the fade.

Also looped material is likely correlated in which a linear fade
is more appropriate.
2020-09-25 17:09:25 +02:00
Robin Gareus
c08298e6d8 Fix loop cross-fade glitch #8420
This fixes an off-by one when assigning `fade_length` and
also solves an edge-case with different fade length for
fade-in/fade-out.
2020-09-25 17:09:25 +02:00
John Emmas
7b0fdeda5e VST3: Change the order of some preprocessor directives in our MSVC project
(will simplify things a bit when building Mixbus)
2020-09-25 07:51:34 +01:00
Robin Gareus
929e88aac1 VST3: Prepare to debug plugin bus/channel count 2020-09-24 18:46:03 +02:00
Robin Gareus
86be01c0f9 VST3: Ignore MIDI channel count for a bus
Assume that simply the presence of an Event bus indicates
that MIDI is supported.

This fixes Arturia synths, among others.
see also  https://forum.juce.com/t/vst3-event-bus-channel-count/25051
2020-09-24 18:38:44 +02:00
Robin Gareus
68ee66a4ee VST3: dedicated blacklist files for each architecture 2020-09-24 17:08:32 +02:00
Robin Gareus
3e209bfd33 VST3: prevent plugin copy-construction 2020-09-24 15:58:06 +02:00
Robin Gareus
c51e3ac7c7 VST3: support non-integer indexed presets 2020-09-24 15:57:14 +02:00
Robin Gareus
a060c0a2ef Revert "Expose PluginInfo index (for VST3 shells)"
This reverts commit 04e5ea0f86.
2020-09-23 23:40:33 +02:00
Robin Gareus
5a15a33839 VST3: use TUID/FUID, remove numeric index
This fixes an issue with plugin-shells, in particular those
with variable number of plugins (e.g. waves)
2020-09-23 23:39:10 +02:00
Robin Gareus
b7c9917467 VST3: Fix initial GUI display and window-size 2020-09-23 18:14:57 +02:00
Robin Gareus
b8028f1239 VST3: fix initial display of custom plugin UI 2020-09-23 17:57:53 +02:00
Robin Gareus
704d486324 Revert "Add debug messages for Windows VST3 GUI"
This reverts commit 105c358494.
2020-09-23 17:55:33 +02:00
Robin Gareus
81695b10e4 Take processor-lock to update latency of inactive routes 2020-09-22 23:41:38 +02:00
Robin Gareus
40439b6cc4 Disconnect plugin-signals on plugin-deletion
Use the plugin-insert itself as ScopedConnectionList, don't
clutter up the Route's List
2020-09-22 23:41:11 +02:00
Robin Gareus
4601507165 Collect and queue processor latency updates
This is only relevant when automating a plugin-bypass, due to
ActiveChanged the following could happen from the realtime thread:

#2 ARDOUR::Session::update_latency_compensation (false, false)
#3 PBD::Signal0<void, PBD::OptionalLastValue<void> >
#4 ARDOUR::AutomationControl::actually_set_value
#5 ARDOUR::PluginInsert::PluginControl::actually_set_value
#6 ARDOUR::PluginInsert::connect_and_run
#7 ARDOUR::PluginInsert::automate_and_run

In this specific case the update_latency_compensation()
is called with process-lock held but the caller lied:
  called_from_backend=false
When a delayline update is needed, this can lead to a deadlock,
since the process-lock is acquired again.

Simply postponing the update is preferable since this also
postpones the change when actively recording.

PS. This may need special casing for freewheel export.
2020-09-22 23:35:48 +02:00
Robin Gareus
105c358494 Add debug messages for Windows VST3 GUI 2020-09-22 22:22:06 +02:00
Robin Gareus
2288279e57 No-OP: prefer constants from API header 2020-09-22 22:17:09 +02:00
Robin Gareus
2b139ead8d Cache route's output playback latency
IO::latency iterates over the port-set retrieving the
private_latency_range of each port. The value can cached
since it can only change when connections or latency changes.

see also 40eefeddd6
2020-09-22 21:55:49 +02:00
Robin Gareus
bebca37447 Cache the latency of the metronome's port 2020-09-22 21:42:52 +02:00
Robin Gareus
650b4a6900 Only query MIDI Clock port latency when it changes
Previously there were excessive calls, since MidiClockTicker::reset()
is called in **every** cycle when Mclk is disabled.
2020-09-22 21:15:31 +02:00
Robin Gareus
ecf4a62082 Fix off-by-one in declick fade allocation #8418
This case is only relevant for large sample-rates for
the fade-in curve. see also 6f755c3c02
2020-09-22 16:44:50 +02:00
John Emmas
f4be03ac8f Move MSVC's declaration of VST3_SUPPORT to the right place
(reverts commit #ae2a1c15fa)
2020-09-22 12:21:20 +01:00
John Emmas
8895d19cd7 Build 'ardour-vst3-scanner.exe' with MSVC 2020-09-22 12:15:09 +01:00
Robin Gareus
fe73d03809 VST3: explicitly release GUI resources 2020-09-21 21:19:15 +02:00
Robin Gareus
48037dc545 Prevent concurrent use of VST3X11Runloop
In theory the GUI is single threaded and registration of
events happens only when a plugin GUI is constructed or
destroyed (which happens in the GUI thread).

Except it seems that if a plugin uses reference counting,
un-registration can happen later.
2020-09-21 21:18:50 +02:00
Robin Gareus
8754090c47 VST3: cleanup component, release resources
This fixes a hang at exit (in FreeLibrary, dlclose) for some
VST3 plugins.
2020-09-20 23:06:27 +02:00
Robin Gareus
a2e366ce28 VST3: Release plugin factory before unloading plugin 2020-09-20 22:09:02 +02:00
Robin Gareus
f386d1334a Use shared windows-console setup code 2020-09-20 20:03:05 +02:00
Robin Gareus
25bd4b8ec7 Setup stdio with -mwindows VST scanners 2020-09-20 20:03:01 +02:00
Robin Gareus
140e03bb7d Make windows-console setup code re-usable 2020-09-20 19:57:08 +02:00
Robin Gareus
2b21a571b9 Update Lua scripts to use new APIs 2020-09-20 19:20:32 +02:00
Robin Gareus
89a0258c31 VST3: MIDI-learn, live input events 2020-09-20 19:19:25 +02:00
Robin Gareus
56b94b3fc4 Mark user-created events as live MIDI 2020-09-20 19:19:16 +02:00
Robin Gareus
f9cdf533ba Event API consistency; reorder arguments (time, type, payload) 2020-09-20 19:18:09 +02:00
Robin Gareus
c5d7ed3015 Update GUI, use new write_immediate_event() API 2020-09-20 19:16:52 +02:00
Robin Gareus
2f68656679 Update API to send immediate events
This is to allow passing the EventType to the Buffer, using a
consistent {[Time], Type, size, data} API, that is equivalent
for all classes.

This is particularly useful for Lua scripts and plugin UIs
than can call `write_immediate_event()` while being ignorant
where the data is routed to (MIDI tracks, plugins, processors).
2020-09-20 19:16:43 +02:00
Robin Gareus
7c37a18b75 Update MIDI buffer implementation to retain EventType 2020-09-20 17:21:21 +02:00
Robin Gareus
472fe2b556 Prepare for distinct live-midi event type
The motivation for this is to determine if a given event
originates from a user-controlled live input controller or
from playback from disk or a MIDI file.

This distinction is required for VST3 MIDI learn.
2020-09-20 17:16:53 +02:00
Robin Gareus
472ce90fab JACK backend allows to calibrate latency
However, if jackd is running, we should test if jackd is using
a full-duplex device to establish if latency calibration is
possible -- fix 92f54b3e98.
2020-09-20 17:16:01 +02:00
Robin Gareus
a4b1277f85 Headless windows VST3 scanner
This re-adds a line that was accidentally removed in fab92d313f
2020-09-18 22:37:13 +02:00
Robin Gareus
a91e9c2d52 Fix windows plugin install location 2020-09-18 21:44:34 +02:00
Robin Gareus
cce424b695 Mark some menu items insensitive w/o session
When closing a session without loading or creating a new one,
Ardour's main window and menu are accessible.

 Menu > Session > Properties : crash w/o a session
 Menu > Window > Transport Masters : any interaction causes a crash.
2020-09-18 21:03:56 +02:00
Robin Gareus
57c660836f VST3: Re-activate plugin when latency changes
This is required. From the "RestartFlags" documentation:

> kLatencyChanged:
>   Latency has changed The plug informs the host that its latency
>   has changed, getLatencySamples should return the new latency after
>   setActive (true) was called The host has to deactivate and reactivate
>   the plug-in, then afterwards the host could ask for the current
>   latency (getLatencySamples) see IAudioProcessor::getLatencySamples
2020-09-18 19:39:50 +02:00
Robin Gareus
3ed9a712b9 Bundle VST3 scanner with binary packages 2020-09-18 18:54:45 +02:00
Robin Gareus
216935f16e Remove ALSA debug message in optimized builds 2020-09-18 15:40:44 +02:00
Robin Gareus
d90d5c3701 Make gcc-10 happy (missing <string> include) 2020-09-18 15:38:22 +02:00