13
0
Commit Graph

16714 Commits

Author SHA1 Message Date
Hector Martin
55c2c9db7e Add sanity assert in MidiBuffer::insert_event to check for overflow 2020-11-10 21:03:42 +09:00
Hector Martin
a568b3c7c2 Complain when MidiBuffer::merge_from fails due to buffer full
We were previously dropping MIDI data silently
2020-11-10 21:03:42 +09:00
Hector Martin
0979097cae Check for MIDI buffer overflow when merging into an empty buffer
This can happen if the buffers have different sizes.
This fixes crashes that bisected to 7c37a18b7, but it is not the root
cause; it just happened to make things worse.
2020-11-10 21:03:42 +09:00
f2d04dfb1f
Fix VST2 default and initial control parameter values 2020-11-10 00:08:03 +01:00
Hector Martin
0e509fa09f
Correctly sort concurrent MIDI events
This fixes an bug introduced in 7c37a18b7
2020-11-09 20:40:59 +01:00
bb468ee4de
Update jackd.exe registry key
This ensures compatibility with upcoming jack > 1.9.16,
current jack 1.9.16, as well as older versions.
2020-11-09 20:06:49 +01:00
John Emmas
5f082e2c9d Add an extra option when querying Windows registry keys
(this option will be needed when 32-bit Ardour is running in 64-bit Windows)
2020-11-09 11:35:35 +00:00
f95439a502 add spinlock to RCU manager to protect concurrent reader() and update() calls 2020-11-08 11:28:10 -07:00
01f9332458
Fix RCU Unit-test on macOS/X
Apple's pthread does not implement barriers
2020-11-07 10:37:52 +01:00
88fc0ed392
Add RCU unit test 2020-11-05 02:24:54 +01:00
62e47fb57c
Add Lua binding for unit-tests to sync with process-cb 2020-11-04 19:08:59 +01:00
c87ef15e82
ALSA: configure capture settings before playback
This fixes an issue with some soundcards e.g. "AxeFx III".
Device configuration fails unless set_hwpar() is performed
for the capture device before configuring the playack
device (half duplex is fine, too).
2020-11-04 14:46:49 +01:00
b8b232cfab
VST3: query latency when plugin is activated regardless of Vst::kLatencyChanged 2020-11-02 01:58:05 +01:00
8ab62937ca
VST3: verbose scan option 2020-11-02 01:57:03 +01:00
35414fcef0
VST3: yet another attempt at state-retore #8460 2020-11-02 01:46:08 +01:00
66c19647df
NO-OP: fix typos 2020-11-01 12:25:22 +01:00
cf0904f752
Handle vfork/exec failure
Don't call atexit, exit without cleanup.
2020-10-31 22:33:10 +01:00
a9bd7b2848
Remove unused compile-time option to not use vfork 2020-10-31 22:30:45 +01:00
edc70200c4
VST3: add generic uname -m fallback 2020-10-31 20:26:34 +01:00
7896c30508
Fix cmdline parameter escape 2020-10-31 13:42:14 +01:00
John Emmas
40ed19767a In a Windows build, support launching both older and newer versions of Jack (Stephane's + Filipe's) 2020-10-31 08:01:55 +00:00
John Emmas
5c06fdf1de In an MSVC build, modify our VC project to use weak Jack
(needed to support Jack v1.9.16)
2020-10-31 07:59:09 +00:00
f509a7e003
Extend convenience API to query windows registry 2020-10-30 13:15:06 +01:00
1219271321
Cont'd work on implicit solo restore
This is an update to b90f057e6e, allowing processors
to configure when ports change. Fixes loading old sessions with
variable i/o polarity invert.
2020-10-29 19:55:27 +01:00
b90f057e6e
Fix restoring implicit solo on session load
When a route's output is connected to multiple busses, re-establishing
port-connections on session-load calls Route::output_change_handler
multiple times.

Implicit solo counts are saved and restored by the route's SoloControl,
however the output_change_handler invalidated it on session load.

Since connections are restored iteratively, counting soloed downstream
routes will yield an incorrect result until all connections are
established.

This fixes the issue that implicit solo is lost on session-reload
in case a route has multiple connections with different up/downstream
solo states.
2020-10-28 22:31:26 +01:00
7826a1a2a2
Increase plugin-scan progress display frequency 2020-10-27 22:21:49 +01:00
722294075d
VST3: fix UTF-16 host message 2020-10-26 18:33:10 +01:00
b119758161
fix debug messages in prev commit 2020-10-25 20:31:50 +01:00
da1782d56e
VST3: Keep preset in sync with plugin GUI
When a user loads a preset using the plugin's own GUI, update
Ardour's preset dropdown.
2020-10-25 19:50:22 +01:00
6c14e568f0
Streamline copying plugin state
Do only load (dlopen) plugin module when instantiating plugin.
Previously new instances were loaded, not used, and unloaded.
2020-10-25 13:14:02 +01:00
ddcf3eb684 Generic Midi encoders fixed 2020-10-24 16:06:04 -07:00
421c52ba7d
Fix bounce and freeze
* Include main-out channel-count when bouncing the output
* Do not de-activate disk-reader and mains-out when freezing a track
* Ignore meter when counting channels
2020-10-24 05:44:29 +02:00
54829492ca
Fix glib/glibmm includes 2020-10-24 04:14:38 +02:00
f7cc5e1f38
Search for JACK on windows using the registry 2020-10-24 04:01:54 +02:00
32d2ea6c41
Replace static registry lookup with library method 1/2 2020-10-24 03:57:16 +02:00
8852069ead
Consolidate code: add library method to query Windows registry 2020-10-24 03:56:47 +02:00
76c86ee96d
VST3 path customization
Allow to add custom VST3 search to default. the VST3_PATH environment
variable is use to pre-seed this path at first start.
2020-10-24 03:36:41 +02:00
c6222caea6
VST3: Implement verbose scan option 2020-10-24 03:21:25 +02:00
2e98c57fb8
Finalize experiment: always propagate solo via sends
See also caf057f06d
2020-10-23 00:24:06 +02:00
8b6e1d78f9
Fix external/sidechain send solo propagation
Since caf057f06d sends propagate solo, however so far
only internal-sends properly cleaned up after disconnect or
removal.
2020-10-22 23:52:01 +02:00
32a0c6a3ff
Drop TMM ports when closing session, or backend goes away
TMM ports cannot exist without a backend.
This fixes crashes where the PortEngine is re-initialized
(backend change):

Previously, TMM ports were only dropped (and recreated)
in TMM::restart() called from ARDOUR::init_post_engine().
When starting a new backend the old one is already destroyed,
but TM still held reference to Ports owned by that backend.
Calling the port's d'tor caused a memory corruption trying to
acquire the backend's port_callback_mutex:

e.g. When creating new session with a different backend
from a running instance, or unit-test after call to
AudioEngine::destroy(): https://pastebin.com/4D6pLA5s
2020-10-22 07:38:00 +02:00
8bc3e86066
Clean up TMM at exit 2020-10-22 07:38:00 +02:00
f3fbb96d6a
Fix VST3 PSL channel-index order
While Ardour uses separate indices when naming tracks and busses
("track 1", "track 2", "bus 1", "bus 2"), the indices are contiguous
(0: "track 1", 1: "track 2", 2: "bus 1", 3: "bus 2").
2020-10-22 01:37:40 +02:00
a266a2d5b9
Use session API to set solo
This is required so that ::update_route_solo_state() is called
to propagate solo/mute state
2020-10-18 15:28:10 +02:00
72736289c8
NO-OP: rename API rename
CP selection API is now implemented as functions, not signals.
2020-10-18 14:47:05 +02:00
84bf97aa49
Update ControlProtocol API, use CoreSelection
* replace signal-emission with direct calls to CoreSelecton
  using BaseUI's session pointer
* remove unused leftmost strip API
* use CoreSelection for first-selected strip
* Accessing CoreSelection does not modify the session
  (allow access from const callbacks)
* replace static calls in P2 surface

This removes indirection and dependency on the GUI for
managing strip selection.
2020-10-18 14:44:38 +02:00
9b382fe1c5
VST3: use CoreSelection API
This implements bc78629788 properly, without relying
on libardour_cp static methods.
2020-10-18 14:36:09 +02:00
26a1d55f7a
Implement _first_selected_stripable as part of CoreSelection 2020-10-18 14:29:12 +02:00
e6fe0e8cca
Prepare for static CP API removal 2/2
This partially reverts bc78629788
2020-10-18 14:28:45 +02:00
Edgar Aichinger
1f7e4ee76a
update german translation 2020-10-17 18:21:30 +02:00
8de420aab9
Enable AVX FPU unit-tests 2020-10-17 18:18:22 +02:00
01c278a00c
Fix unit-test builds
For the time being (since bc78629788) vst3 plugin uses
the Control Protocol API for track selection and focus, and
hence users of libardour also need to use libardour_cp
2020-10-17 18:18:05 +02:00
Ayan Shafqat
1a7dc947a2
Fix for issue #8442
AVX optimized routine applying gain for Linux was causing SIGSEGV.
It was root caused to premature optimization on frames < 8, and
this commit fixes this issue.
2020-10-17 10:03:26 -04:00
b03bfbbbb7
VST3: fix utf8 -> utf16 string conversion 2020-10-16 17:58:45 +02:00
bc78629788
VST3: add support to focus/select tracks 2020-10-16 17:17:00 +02:00
1fa05b4764
Generate header before building dependency graph 2020-10-16 02:35:51 +02:00
e391352b6d
Use predefined "testcommon" target for unit-tests 2020-10-16 02:32:30 +02:00
516a1b0d2e
Use unique target names for unit-test build rules 2020-10-16 02:31:39 +02:00
dbd4607b13
VST3/ARM use uname -m not RPM Terminology
https://github.com/steinbergmedia/vst3sdk/issues/66
2020-10-15 23:32:52 +02:00
768b76bcfa
Add workaround for softube console1 2020-10-15 21:48:56 +02:00
3b7b6a720d
VST3: remove redundant query interface 2020-10-15 21:46:45 +02:00
c8c1e5d825
VST3: fix host query interface support 2020-10-15 21:10:00 +02:00
09a4dcee68
VST3: fix controller state restore
This partially reverts 9e7cfdd880, VST3 host-checker
uses complete state for the controller.
2020-10-15 20:45:26 +02:00
3271a96100
VST3: allow to debug TUID support 2020-10-15 20:40:35 +02:00
e1b38058a8
Fix FPU unit-tests 2020-10-15 19:38:10 +02:00
16d9e72c31
Fix OSX unit-test compile 2020-10-15 06:00:17 +02:00
fe8a05d6c9
libpbd signals.h depends on signals_generated.h
This fixes building with large concurrency where signals_generated.h
may otherwise be generated to late.
2020-10-15 05:45:51 +02:00
5daed56439
Fix NEON FPU unit-tests 2020-10-15 04:14:44 +02:00
547032afac
Fix alignment unit-tests and ARM/NEON alignment 2020-10-15 03:55:42 +02:00
8ff7e18d78
Fix native builds on RPi with --dist-target=armhf 2020-10-15 03:07:34 +02:00
61310a9184
Enable AVX unit-tests 2020-10-14 23:08:28 +02:00
cc935ab34e
Add basic FPU unit test 2020-10-14 22:52:43 +02:00
e4e94e77c9
Transmitter::Debug implementation 1/2
This also sorts switch() and listen_to() statements in order
of severity: debug, info, warning, error, fatal, throw.
2020-10-13 21:58:26 +02:00
9a4237ba83
Add debug transmitter
This is in preparation to conveniently duplicate debug messages
to Window > Log. For cases where stdout/err is not easily accessible.
2020-10-13 21:27:16 +02:00
9ddd83d829
VST3: cont't work on PSL extensions
* fix notification strings
* optional mute/solo controls (master bus)
2020-10-13 20:20:23 +02:00
6baecca57b
VST3: debug PSL callbacks 2020-10-13 15:56:32 +02:00
c5618f01d6
VST3: only expose Mixbus sends via PSL extensions 2020-10-13 03:49:19 +02:00
4b3b13457e
Fix typo in previous commit 2020-10-13 01:37:37 +02:00
0fac4843db
VST3: tweak PSL extensions 2020-10-13 01:30:48 +02:00
48e4855304
VST3: do not show bypass control inline 2020-10-13 01:25:58 +02:00
63ad43dbd9
VST3: update callback debug messages 2020-10-13 01:25:43 +02:00
3caf0ac5da
VST3: use either info-handler or info-listener, not both 2020-10-13 01:24:05 +02:00
0400ae2047
Fix VST3 debug message
get_info() is not yet available during Plugin::init().
set_info() is only called after from VST3PluginInfo::load() after
the plugin was instantiated.
2020-10-12 19:06:30 +02:00
396d2df127
Fix LuaProc API usage (typo in 10b05df189) 2020-10-12 04:14:48 +02:00
7ec10f7771
Update variable-i/o channel assignment, separate sidechains
We need to be able to distinguish
 * 2 ins: mono + sidechain
 * 2 ins: stereo input
2020-10-12 03:26:33 +02:00
17f0b87648
Fix Apple Carbon #define interference 2020-10-11 21:40:31 +02:00
c6387c1ac9
Split long chain of Lua bindings (fix clang 12 builds) 2020-10-10 01:26:04 +02:00
4da9441691
Fix clang/C++11 builds, add missing override 2020-10-10 00:18:41 +02:00
c2125eedc6
VST3: add debug messages 2020-10-09 22:18:05 +02:00
b8157580c6
VST3: fix PSL callback subscription 2020-10-09 21:48:52 +02:00
9e7cfdd880
VST3: use read-only substream to restore state 2020-10-09 20:58:43 +02:00
5a25db34ae
VST3: implement Read-Only sub-stream 2020-10-09 20:55:41 +02:00
0edd0c2abc
Do not bind pure virtual functions, use indirection
This fixes Windows/MSVC builds, where linking fails due
to binding a pure virtual function.
2020-10-09 18:23:53 +02:00
734a31accf
VST3: announce support for implemeted features 2020-10-09 17:45:15 +02:00
e8c6d20b18
Factor out namespace 2020-10-09 14:13:07 +02:00
85acfb0842
Use explicit cast to bool 2020-10-09 14:12:58 +02:00
37475308ee
VST3: store all input controls (not only automatable ones) 2020-10-09 14:12:52 +02:00
d0ec83fb35
Fix mistake in 10b05df189 2020-10-09 05:14:28 +02:00
323fe16d4d
Improve AU debug facilities (1/2)
Use a common prefix "AudioUnit" but allow to only debug setup/config
changes without regular process-callback debug clutter.
2020-10-09 02:29:19 +02:00
10b05df189
Rename plugin pin I/O API (NO-OP)
This allows to distinguish Processor::configure_io from the
Plugin API with the same name. Despite the identical name,
both functions serve different purposes.
Likewise the ::can_support_io_configuration() API is renamed.
The signature of that function call has already diverged.

The Plugin-API has to handle optional busses (e.g. side-chain)
and replication. The PluginInsert processor provides context.

This change is in preparation for AudioUnit and VST3 busses.
Currently a stereo-input (1 bus) cannot be distinguished from
mono + sidechain (2 busses).
2020-10-09 02:19:43 +02:00
64391334a4
NO-OP: Remove unused API implementation 2020-10-09 02:06:50 +02:00
e4bbb1bc81
VST3: Implement ContextInfo (console) extension 2020-10-08 15:36:36 +02:00
65c433dce2
VST3: Implement PSI extensions
* Register classes
* Implement automation-state notification
* Implenent parameter slave
2020-10-08 15:36:35 +02:00
042f0a192f
VST3: Add PreSonus Plug-In Extensions 2020-10-08 15:36:35 +02:00
9746a63625
VST3: implement ChannelContext::IInfoListener 2020-10-08 15:36:35 +02:00
bbbd6a36ec
VST3: set owner (prepare for context-info extensions) 2020-10-08 15:36:35 +02:00
6e6eb4c13e
Fix VST3 scan message (use bundle, not module name) 2020-10-08 15:35:50 +02:00
53d406e47d
VST3: Implement ISizeableStream and IStreamAttributes 2020-10-08 04:18:53 +02:00
6dc909696f
Allow src/dst MIDI buffer offsets
This is needed for ARDOUR::PluginInsert::automate_and_run
when processing is split on events.
2020-10-08 04:18:50 +02:00
9419d6f76f
VST3: implement optional IEditController interfaces 2020-10-08 03:05:09 +02:00
fa3051fb24
Better version of previous commit (fa3ae33a1f)
Since the file-modification timestamp of the module-path is used
if the cache is up-to-date, the file must exist.
For macOS/X bundles the mandatory file as per VST3 spec is Info.plist
2020-10-08 00:09:12 +02:00
fa3ae33a1f
VST3: relax bundle-name requirement on MacOS 2020-10-07 18:50:39 +02:00
c0b4e575d9
VST3: add support for hiding parameters 2020-10-07 17:49:55 +02:00
a28b1f548e
Add interface to inform plugins about replicated instances
This allows for asking plugins to synchronize internal state
that isn't visible to the host between plugin instances.
2020-10-06 23:34:25 +02:00
7ab664d5a4
Properly emit Plugin::DropReferences (1/2) 2020-10-05 19:57:14 +02:00
df55af6483
Fix include path prefix 2020-10-05 19:57:08 +02:00
John Emmas
6155558c76 Add a new #include path to our MSVC project (libardour) 2020-10-03 11:23:54 +01:00
ec2eedacc6
Fix C++89 builds, (vst3 interface needs nullptr) 2020-10-02 20:42:40 +02:00
c069709939
VST3: do not create persistent view to test has_editor()
This is a better variant of 05d2a0f4a4. Mainly becuase
some plugins crash when view->remove() is called for a
view that was never attached.
2020-10-02 16:45:49 +02:00
05d2a0f4a4
VST3: explicitly close and release view
A call to VST3Plugin::has_editor() can create the view of
a plugin. If the GUI is never displayed, the view would
not have been released, which can lead to crashes when
unloading the plugin.
2020-10-02 15:29:04 +02:00
3c4801bc96
VST3: common factory instantiating and release
This may address some issues with multiple references
(and incremental releases) of a plugin's factory.
2020-10-02 15:01:01 +02:00
6e89df412a
VST3: Fix another potential crash when removing a plugin 2020-10-01 23:39:59 +02:00
46e895aaad
Re-brand a-* plugins as Ardour Community Effects (ACE) 2020-09-30 21:59:20 +02:00
e4cb7a14e8
VST3: reduce debug output 2020-09-30 17:10:24 +02:00
00b5b61a43
VST3: implement some restart component flags
Re-order handling of the flags, do not return early,
and log warnings for unhandled flags.
2020-09-30 17:09:32 +02:00
814eca48af
VST3: disable MIDI busses before removing plugin
There is anecdotal evidence that some plugins require this
to exit cleanly.
2020-09-30 16:43:42 +02:00
8209b4b948
VST3: handle zero length plugin state 2020-09-30 04:41:59 +02:00
5e882afe10
Fix dereferencing empty vectors 2020-09-30 03:18:19 +02:00
71212e0c81
Remove debug/profile message in optimized builds 2020-09-29 16:46:29 +02:00
dcc14e9f6c
Never write #ifdef'ed code after 4am 2020-09-28 17:23:32 +02:00
d4b774e935
VST3: partially revert debcda25b4 implicit notifications to self 2020-09-28 04:35:10 +02:00
ff26258461
Fix sloppy typing 2020-09-28 03:41:48 +02:00
117184c3bd
Fix 32bit alignment in prev commits
this amends
  f52c5ca3ac
and
  5abe677fea
2020-09-28 03:20:14 +02:00
f52c5ca3ac
ARM RTMidiBuffer alignment 2020-09-28 03:12:38 +02:00
5abe677fea
Fix ARM MIDI buffer alignment
Both TimeType (8byte) and EventType (4byte) are written
in an un-aligned buffer (usually 3 byte MIDI messages).
This caused an Illegal Instruction for 32bit ARM builds
2020-09-28 01:23:02 +02:00
7e1ce160e9
ARM 32bit enum alignment (used in MIDIBuffer)
Evoral::EventType is written directly into a uint8_t buffer
by dereferncing a pointer-type:
*(reinterpret_cast<Evoral::EventType*>((uintptr_t)...)
2020-09-28 01:21:43 +02:00
37ec50cbf8
Remove C++11ism 2020-09-27 20:42:23 +02:00
5cbc5cc52a
VST3: setProcessing, setActive calls are optional 2020-09-27 20:30:44 +02:00
debcda25b4
VST3: use a dedicated connection list 2020-09-27 20:29:36 +02:00
1d6d4dc7b8
VST3: add set-dirty/state-changed support 2020-09-27 18:01:50 +02:00
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
6a780f9cbc
VST3: fix pitchbend range 2020-09-26 21:40:09 +02:00
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
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
929e88aac1
VST3: Prepare to debug plugin bus/channel count 2020-09-24 18:46:03 +02:00
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
68ee66a4ee
VST3: dedicated blacklist files for each architecture 2020-09-24 17:08:32 +02:00
3e209bfd33
VST3: prevent plugin copy-construction 2020-09-24 15:58:06 +02:00
c51e3ac7c7
VST3: support non-integer indexed presets 2020-09-24 15:57:14 +02:00
a060c0a2ef
Revert "Expose PluginInfo index (for VST3 shells)"
This reverts commit 04e5ea0f86.
2020-09-23 23:40:33 +02:00