13
0
Commit Graph

16715 Commits

Author SHA1 Message Date
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
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
81695b10e4
Take processor-lock to update latency of inactive routes 2020-09-22 23:41:38 +02:00
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
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
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
bebca37447
Cache the latency of the metronome's port 2020-09-22 21:42:52 +02:00
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
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
fe73d03809
VST3: explicitly release GUI resources 2020-09-21 21:19:15 +02:00
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
a2e366ce28
VST3: Release plugin factory before unloading plugin 2020-09-20 22:09:02 +02:00
25bd4b8ec7
Setup stdio with -mwindows VST scanners 2020-09-20 20:03:01 +02:00
140e03bb7d
Make windows-console setup code re-usable 2020-09-20 19:57:08 +02:00
89a0258c31
VST3: MIDI-learn, live input events 2020-09-20 19:19:25 +02:00
56b94b3fc4
Mark user-created events as live MIDI 2020-09-20 19:19:16 +02:00
f9cdf533ba
Event API consistency; reorder arguments (time, type, payload) 2020-09-20 19:18:09 +02:00
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
7c37a18b75
Update MIDI buffer implementation to retain EventType 2020-09-20 17:21:21 +02:00
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
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
a4b1277f85
Headless windows VST3 scanner
This re-adds a line that was accidentally removed in fab92d313f
2020-09-18 22:37:13 +02:00
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
216935f16e
Remove ALSA debug message in optimized builds 2020-09-18 15:40:44 +02:00
d90d5c3701
Make gcc-10 happy (missing <string> include) 2020-09-18 15:38:22 +02:00
d5496de98a
VST3: use kOffline for freewheeling 2020-09-17 21:06:46 +02:00
824e54f399
Mark session as dirty when meter-type changes 2020-09-17 21:06:46 +02:00
John Emmas
ae2a1c15fa Add VST3 support for building with MSVC 2020-09-17 18:45:12 +01:00
7963214710
Use C-compatible isprint() - fixes MSVC builds 2020-09-17 17:29:50 +02:00
a8c9bdbbd0
Fix w32 builds (VST stdcall API) 2020-09-17 12:55:18 +02:00
fab92d313f
Fix linking vst3 scanner app (Linux-ARM, OSX/PPC, OSX/i386) 2020-09-17 12:20:31 +02:00
6b4dc3268f
VST3: Implement plugin-provider 2020-09-17 00:10:17 +02:00
15e564c54a
VST3: scanner application 2020-09-16 22:49:20 +02:00
2a9795113b
VST3: Plugin discovery 2020-09-16 22:49:20 +02:00
84a86fa21a
VST3: Implement host classes 2020-09-16 22:49:20 +02:00
9bd8c43693
VST3: Load and instantiate 2020-09-16 22:49:20 +02:00
0ca0b4f335
VST3 skeleton 2020-09-16 22:49:19 +02:00
9c5f13f3fa
Import VST3 interface 2020-09-16 22:49:19 +02:00
c01b7b7842
Detect LV2 categories by URI 2020-09-15 19:32:30 +02:00
8dbc16a929
Remove unused LV2 configuration checks 3/3
LV2 has been mandatory since 6.0 (04ccd328dc)
2020-09-15 17:35:09 +02:00
c5014d9d9e
Remove unused LV2 ifdef 1/3
LV2 has been mandatory since 6.0 (04ccd328dc)
2020-09-15 17:01:32 +02:00
0c10ec3c75
Case-insensitive compare name to detect plugin duplicates
In some cases LV2/VST and VST2/VST3 use slightly different naming
conventions e.g. "MDA ..fx"  vs "mda ..fx".
2020-09-15 16:40:30 +02:00
dcea35191c
Consolidate code: use API to print plugin-type 1/2 2020-09-15 16:03:33 +02:00
d72423fdc8
Add API to format plugin-type 2020-09-15 16:03:19 +02:00
68b23b9f82
Skip presets lookup for empty prest URI 2020-09-14 23:37:22 +02:00
e9c90bc1b2
Update Plugin API, extend IOPortDescription c'tor 2020-09-14 23:37:22 +02:00
1a50b6b8ea
Update Plugin API to allow timestamped parameter changes
This is in preparation for VST3 automation.
2020-09-14 23:37:21 +02:00
04e5ea0f86
Expose PluginInfo index (for VST3 shells) 2020-09-14 23:37:21 +02:00
b8f883e608 prevent Session range markers from being hidden 2020-09-14 15:07:42 -06:00
2ef673b15e
Add convenient Lua binding to query automation 2020-09-13 23:58:23 +02:00
1f356e2883 CoreAudioSource: print more information in the case of errors 2020-09-09 17:23:02 -06:00
1b55648131
Do not report timestamps smaller than zero to plugins
This can happen during pre-roll when buffers are filled
to start audible playback at zero.

While the position argument is signed for all plugin-standards,
it seems that some do not support negative timestamps before
00:00:00:00. (e.g. https://github.com/falkTX/Carla/issues/1236)

Furthermore TempoMap::bbt_at_sample() returns 0 for all negative
timestamps, but it was possible tthat tempo-map transmission,
as well as beat-position returned negative values.
2020-09-06 16:00:20 +02:00
Edgar Aichinger
dc05230039
Update German translation
Use English verbs as German nouns for edit modes:
https://discourse.ardour.org/t/export-wishes-and-sticking-tracks-together/104476/22
2020-09-06 14:45:07 +02:00
802ddf344a
Remove unused mutex (amend a80064981e) 2020-09-06 05:43:03 +02:00
b40826792a
Fix port-connection callbacks on engine restart
When the engine is restarted, ports are re-established,
and previously queued port-connections need to be cleared.

This caused a bug:
 * when the engine is stopped all ports are disconnected.
   _port_connection_queue contains all disconnections
 * engine is stopped so _port_connection_queue is not processed
 * engine-restart re-etablishes ports and appends those connections
   to _port_connection_queue
 * process-callback processes the list in **reverse** order
```
   while (!_port_connection_queue.empty ()) {
      _port_connection_queue.pop_back ();
   }
```
 * ARDOUR::PortManager::connect_callback() is first called
   with connected() and the disconnected()
 * All ports are assumed to not be connected
   Port::_externally_connected == 0 for all ports

Result:

 * vari-speed playback resampling does not work (only external
   I/O is reampled), split cycles processing (looping) fails
   since AudioPort::get_audio_buffer() does not apply the
   _global_port_buffer_offset
2020-09-05 23:06:00 +02:00
a80064981e
NO-OP: Consolidate PortConnect code into shared parent class 2020-09-05 23:05:57 +02:00
17ab174277
Slightly increase vari-speed resampler quality
This also increases i/o delay to 16 samples (was 11)
2020-09-05 23:05:53 +02:00
1a3da7e132
Keep processing while locating #8392
Previously when locating process_can_proceed() was set to true,
and routes were not processed while transport states are cleared.
As a result live input was also not processed.

This is no longer needed because the DiskReader handles seeking
directly.
2020-09-05 05:32:22 +02:00
Vincenzo Reale
969a5bf2c1
Italian translation update 2020-09-04 02:19:48 +02:00
Luciano Iam
9c08c058a3
WS: crash bugfix related to missing strip panner
Surface made Ardour crash when a client connected
and some session track was not a VCA nor had a panner,
like MIDI strips.
2020-09-04 01:59:53 +02:00
7a9d4b1f64
Tweak default declick fade length #8341 2020-09-04 01:50:58 +02:00
63a117bf93
And another boost/C++11 fix
This fixes Undefined symbols:
"ArdourSurface::hash_value(ArdourSurface::NodeState const&)", referenced from:
  boost::hash<ArdourSurface::NodeState>::operator()(ArdourSurface::NodeState const&) constin client.cc.1.o
  boost::hash<ArdourSurface::NodeState>::operator()(ArdourSurface::NodeState const&) constin server.cc.1.o
2020-08-31 08:28:50 +02:00
a9c2350e87
Fix yet another C++11ism 2020-08-31 07:52:48 +02:00
39110463f3
Amend cdd48926d1 use ScopedConnectionList directly 2020-08-31 07:41:11 +02:00
b9cfb31205
Fix control-list editing (#8384)
This fixes segfaults as well as corrupt listes when copy/pasting
due to invalid iterators.

::mark_dirty() must be called with WriterLock, and
::rt_safe_earliest_event_linear_unlocked() must not be called
while _events is being modified. The Sequence iterator
(only user of that function) does not ensure this. Only the
sequence read-lock is taken.
2020-08-31 07:39:45 +02:00
883d4ebd31
Fix previous commit (MIDI alignment) 2020-08-31 01:38:04 +02:00
b326b8e462
Fix MIDI Capture alignment
When recording audio, simply not writing to the ringbuffer
offsets the recording accordingly.
When recording MIDI, absolute timestamps are used, so the recording
has to be offset by the accumulated difference.

Previously this went unnoticed because tests using the Dummy
backend the accumulated offset never exceeded 1 cycle.
2020-08-31 01:19:41 +02:00
cdd48926d1
Remove more libwebsocket C++11isms
* amend previous commit, fix runtime_error implementation
* Do not copy-construct classes that have a PBD::scoped connection list.
  Replace std::map::emplace[C+11], an store shared pointers the std::map.
* Update ArdourMixerStrip is-a ScopedConnectionList (not has-a)
2020-08-30 22:57:43 +02:00
8eb4dcb675
Fix websocket C++11ism 2020-08-30 21:15:33 +02:00
af79240c81
Namespace libwebsocket surface classes
Using the global names-pace for classes named "Json", "TypedValue",
"ArdourTransport", "ArdourMixerPlugin" etc is not acceptable.
2020-08-30 21:15:07 +02:00
Luciano Iam
665e0686e5
WS: noop use a namespace for JSON utilities
Instead of a class with static methods

Also correct some whitespace to prevent triggering of OCD cycles
2020-08-30 19:29:28 +02:00
Luciano Iam
aa38491b7d
WS: move VCA detection to mixer strip interface
Expose the wrapped Stripable the least as possible
2020-08-30 19:29:28 +02:00
Luciano Iam
e510c0cb75
WS: consistent naming of strip/plugin/param identifiers
Rename all {object}_n variables and arguments to {object}_id

Parts of code were using the former convention, now use the latter everywhere
Another step towards supporting visual position agnostic identifiers in the future
2020-08-30 19:29:28 +02:00
Luciano Iam
c32a5917f3
WS: handle strips and plugins removal 2020-08-30 19:29:27 +02:00
Luciano Iam
a8f917e7e2
WS: prepare for handling object disconnections
Use maps instead of vectors for holding strips and plugins
This allows to deal with "holes" after objects are removed

Also paves the way for a future improved way of identifying
individual strips and plugins
2020-08-30 19:29:27 +02:00
Luciano Iam
7521d8ab6f
WS: add some meaningful error messages 2020-08-30 19:29:27 +02:00
Luciano Iam
3509fe1589
WS: use an object-oriented internal API for the mixer
- This allows to better handle strips & plugins connection lifecycles
- Coherent with the JS client design
2020-08-30 19:29:27 +02:00
Luciano Iam
4a4734fbb1
WebSockets: properly release strips and plugins when removed
This should fix some crashes reported by the beta testing team
2020-08-30 19:29:27 +02:00
7cdefbe8e7
Amend 0c7895298d, fix parameter order #8388
Plugin parameters may only be added, but no re-ordered since
Ardour uses numeric indices for automation.
2020-08-30 19:15:59 +02:00
dc553c49b4
Revert "Rename a-eq a-comp a-exp a-delay a-reverb to ACE (Ardour Community Effects)"
This reverts commit 0036785d5a.
2020-08-30 19:15:59 +02:00
87f7dcc5f6 OSC Panner feedback crash with no panner
both select and route feedback now test for both
	route and panner (not VCA)
2020-08-29 17:08:56 -07:00
mx
262281bc1f
Use soundtouch for vocal audio time stretching (1/2) 2020-08-26 19:04:58 +02:00
34159e4594
Fix ARM runtime NEON detection 2020-08-24 22:03:28 +02:00
a0a4477c84
Fix aarch64 builds 2020-08-24 21:26:38 +02:00
Ayan Shafqat
1f878636c8
Adding NEON detection during runtime 2020-08-24 02:06:35 +02:00
773a1a0725
Fix optimized armhf builds
Apparently gcc-6.2 with -O3 and -mfpu=neon can use ARM instructions
that requires 64bit alignment (here vst1.64) with data that
is not 64bit aligned (g->strcache) https://i.imgur.com/vYktsUn.png

So we need to be able to build "arm_neon_functions.cc" with
-mfpu=neon, while not automatically using NEON for the rest
of the codebase, unless explicitly asked for.
2020-08-22 02:35:19 +02:00
22065b4331
Inform about NEON acceleration 2020-08-21 21:12:32 +02:00
8875e8b1d9
Fix aarch64 builds
the proper check using compiler flags would be
  defined(__ARM_NEON) || defined(__aarch64__)
however explicit wscript defined "ARM_NEON_SUPPORT" is prefereable.
2020-08-21 08:16:11 +02:00
fb5abde677
Use specific build-target for ARM/NEON routines 2020-08-21 03:39:56 +02:00
Ayan Shafqat
98023fcfe8
NO-OP: whitespace 2020-08-21 03:30:20 +02:00
Ayan Shafqat
c8c57f14bf
Adding ARM NEON optimized routines
This commit adds ARM NEON optimized routines for the following procedures
below:

*_compute_peak
*_find_peaks
*_apply_gain_to_buffer
*_mix_buffers_with_gain
*_mix_buffers_no_gain
*_copy_vector

NEON optimized routines have a prefix of: arm_neon_
2020-08-21 03:29:39 +02:00
1cc9573dba OSC toggle roll make return to zero optional 2020-08-20 16:26:07 -07:00
b8da1d0265 fix toggle_roll will only start but not stop PH 2020-08-20 16:26:07 -07:00
harrison
365cc92cba Check whether a VST param should be automated when building the list of automatables 2020-08-20 12:52:42 -05:00
0036785d5a Rename a-eq a-comp a-exp a-delay a-reverb to ACE (Ardour Community Effects) 2020-08-20 12:52:42 -05:00
e53db181d2 a-comp, a-exp: threshold should be referenced to the input (bottom) axis 2020-08-20 12:52:42 -05:00
b80cb0f382 a-comp, a-exp: the moving dot should represent input-to-output 2020-08-20 12:52:42 -05:00
01ac9d63e8 a-comp, a-exp: Tweak meter bar range for consistency with inline-ui 2020-08-20 12:52:42 -05:00
dfe2270c9f
Revert "WebSockets: properly release strips and plugins when removed"
This reverts commit f007ba6b46.
2020-08-19 23:59:38 +02:00
aa69fe49f5
Fix crash when removing master-bus output channels #8371
Previously when the master-bus had more outputs than inputs,
Ardour crashed when the monitor-section was set up.

Removing a master-bus output port calls
  Route::output_change_handler (master-bus)
 -> Session::reset_monitor_section
which first removes the corresponding monitor-section input,
then output port. The latter triggers
  ARDOUR::Route::output_change_handler (monitor-bus).

All with the process-lock held, so at this point in time Ardour
has removed the port-reference but the port still exists in the
backend.

Now the monitor-bus processors are re-configured and
the channel-count is updated. The port that was just removed
and triggered the ::output_change_handler() callback is
re-created.

unable to create port 'Monitor/audio_out 2': failed constructor

This fix changes the monitor-section to use strict-i/o (for plugins)
and also use master-bus output (not input) when configuring
processors.
2020-08-19 22:26:36 +02:00
481cf37052
RT-safe jack transport time-master
Prefer a try-lock, instead of locking the tempo-map.
2020-08-19 19:07:41 +02:00
Stefan Westerfeld
ad8eb4d05b
Set JACK transport bar_start_tick field. 2020-08-19 19:04:11 +02:00
Emilio Norrmann
d21337a3a4
fixed typo 2020-08-19 19:02:37 +02:00
Luciano Iam
f007ba6b46
WebSockets: properly release strips and plugins when removed
This should fix some crashes reported by the beta testing team
2020-08-19 19:01:18 +02:00
c8bc9a25b3 Added strip feedback for new automation states
for mute, trim and panner
2020-08-19 09:45:44 -07:00
5ce796f0b5 Added strip feedback for new automation states
for mute, trim and panner
2020-08-19 09:45:44 -07:00
ab0217f3a2 Added touch to more stripable controls
pan azimuth and width
	mute and trim
2020-08-19 09:45:44 -07:00
d5016f80d3 Added automation control to the rest stripable controls
Pan azimuth
	Pan Width
	trim
	mute
2020-08-19 09:45:44 -07:00
fcd347fe0c
Fix --no-nls, i18n include order in libs -- #8361
Ardour's "pbd/i18n.h" needs to be included last,
after any include that may indirectly pull in getext or libintl.

For that reason "pbd/i18n.h" must not be used in header files either.
2020-08-19 17:39:32 +02:00
af254b8ff9
Fix Lua AudioRom read (buffer overflow) 2020-08-19 00:17:45 +02:00
65ecc1b40e
Do not interpolate away explicit MIDI automation points #8362 2020-08-15 01:57:01 +02:00
e4c56a0371
Remove unused API
These are longer be used since Seuqnce has a "force_discrete"
boolen that needs to be taken into account in addition to
user-configurable ControlList _interpolation mode.
2020-08-15 01:56:42 +02:00
7ab67c42dc Fixes OSC panner issues: 8338 and 8246
8338 - crash with midi and no audio strip
		detect no panner
	8246 - send feedback of panner type
2020-08-12 08:08:39 -07:00
68f1ec348d
AVX gcc compatibility
`_mm256_cvtss_f32` is only available in avxintrin.h of gcc-8 or
later. There it is defined as

```
extern __inline float
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
_mm256_cvtss_f32 (__m256 __A)
{
  return __A[0];
}
```

While explicit `vcurrent[0]` works with gcc-5 and gcc-6,
older gcc-4 fails with the following
 error: invalid types 'float __vector__[int]' for array subscript
2020-08-11 16:14:19 +02:00
01dbbb86c3
AVX/SSE compatibility
This fixes symbol mangle for window builds, and offers backwards
compatibility with older systems where the inline _mm256_cvtss_f32
is not defined in avxintrin.h
2020-08-11 15:12:50 +02:00
Ayan Shafqat
03abc1076e
Adding AVX optimized routines for Linux
This commit adds AVX optimized routines for the following
procedures below:

*_compute_peak
*_find_peaks
*_apply_gain_to_buffer
*_mix_buffers_with_gain
*_mix_buffers_no_gain

AVX optimized routine has the prefix of: x86_sse_avx_

Note: mix_buffer_with_gain and mix_buffers_no_gain may prefer
SSE implementaion over AVX if source and destination pointers
are aligned to 16 byte boundaries. Therefore, it will be optimal if
_all_ audio buffers are allocated to 32 byte boundaries to take
full advantage of AVX ISA extension.
2020-08-11 02:28:28 +02:00
0ddaf3fe68
Get previous commit to actually compile :) 2020-08-10 19:18:01 +02:00
ac97e5710a
Fix edge-cases when loading old (v2, v3) sessions
Previously when loading old session Route::init() of the master-bus
was called without the "MasterOut" or "MonitorOut" flag being set.

Various conditions that relied on is_master() or is_monitor()
during initialization failed when loading those sessions, leading
to subtle breakage.
2020-08-10 19:12:32 +02:00
90f8212af7 Merge branch 'fb-sys' 2020-08-09 09:10:58 -07:00
d3685784aa
Fix numeric sort: use decimal or hex (but not octal)
This fixes sort order of plugin-presets or parameter
scale-points with leading zeros.
2020-08-09 14:45:39 +02:00
5c6e8954ed Add pre/post fader to foldback send creation
add position param to send creation
	default all to prefader as first step
2020-08-08 18:41:03 -07:00
5193052d8a Fix OSX builds (i18n)
i18n must be included last, after all template  specialization.
Otherwise the following happens:

In file included from ../libs/pbd/pbd/i18n.h:22:
../libs/pbd/pbd/compose.h:122:6: error: call to function 'operator<<' that is neither visible in the template definition nor found by argument-dependent lookup
2020-08-06 21:38:00 +02:00
c54b36c3ff AU: only set render callbacks for connected busses
This fixes an issue with Renoise Redux. The plugin reports the following:

Reported Channel Capabilities (explicit):
      [2, 2]  [1, 2]  [0, 2]

When it is added to an Arodur MIDI track, the 0 in, 2 output variant is
chosen, since Ardour MIDI tracks don't have audio by default.

However the render callback was set uncondionally for all busses. This
lead to issues with this specific plugin.
2020-08-06 20:30:44 +02:00
357095b920
AU scan: only update config when discovering new plugins
When reading cached info only, crash protection is not needed.
2020-08-06 17:59:16 +02:00
56934284e7
Start engine for plugin scan test
This is needed for various cases. The sample-rate needs to be known,
and reading/writing config includes TFSM state, which needs an engine.
2020-08-06 17:56:08 +02:00
c6a8b848c9
Do not run plugin discovery for unit-tests
This fixes issues on MacOS (and Windows) unit-tests. The
unit-test run readless without proper UI thread. Discovering new
AU or VST can stall the app indefinitely or cause crashes.

NB. LADSPA, LV2 (and Lua) plugins are scanned regardless. Also
VST and AU cache files are read. The unit-test however only lists
LADSPA plugins.
2020-08-06 16:51:27 +02:00
6742a0961c
Ask LuaProc to drop references
This fixes a circular shared_ptr<> reference that prevents
plugin destruction.

LuaProc may hold references to Route that contains the plugin
or the PluginInsert of the LuaPlugin. These are only dropped
when the interpreter collects garbage.

Previously this happened in the d'tor or LuaProc, but while the
Plugin has a reference to the Insert, the Insert is not deleted
and the d'tor is never called.
2020-08-05 22:39:06 +02:00
c2618903ae
Allow to overload drop_references()
This is useful in cases where an object owns child objects
which in turn hold a reference to the parent.

In this case PluginInsert has-a Plugin, which may have a reference
to the insert or the Route.
2020-08-05 22:35:35 +02:00
bfccf7ba18
Don't clutter up recent list with test sessions 2020-08-05 21:55:36 +02:00
73165aae95
Fix XMLTree double-free
XMLTree's d'tor frees all child element of the document root
2020-08-05 20:27:53 +02:00
57ef7334ef
Fix invalid iterator reference when removing plugins
processors.erase (i); invalidates the iterator and references
to the object, so we first need to try-cast and disconnect.
2020-08-05 20:24:13 +02:00
189faf557f
Rename Loudness Volume Ctrl to LAN Amp 2020-08-04 21:32:57 +02:00
8b5737b8d2
Increase precision of numeric dB entry
This follows 5a41ca8fdf and df1e6fda2d.
Even though this kind of precision is rarely needed, rounding
to a single digit is inconsistent with various places that display
more than one digit, or allow more accurate control.
2020-08-01 09:57:18 +02:00
7e5e9e46a1
Consolidate calls to IO::latency 2020-08-01 00:17:54 +02:00
41c503768b
NO-OP: comment formatting
Use asterisks to separate indent (tabs) and alignment (spaces)
in comments. Also remove trailing whitespace.
2020-08-01 00:17:23 +02:00
Nikolaus Gullotta
13f041536d
Honor "Auto Play" setting when locating from Session::goto_start
Because TransportFSM's MotionState is `WaitingForLocate` when calling
Session::goto_start, transport_was_stopped was set incorrectly
2020-07-29 10:33:29 -05:00
76894b0ac3 When consolidating a Range of midi, the resulting region should fill the Range (not stop at the end of midi content) 2020-07-28 12:29:27 -05:00
e9ff843bb1
Implement master/loudness volume processor
This provides for a better user-experience than using a-amp.
Particularly since a-amp only has a 20dB range and can be automated.
2020-07-27 21:56:41 +02:00
b49656213d
Prefer const reference (amend f564c92493) 2020-07-26 17:15:15 +02:00
a8c29991d6 Assign a take_id to Bounced regions, so a multitrack bounce can be sorted/recognized in a list 2020-07-26 09:53:47 -05:00
4f6c71f275 Use the Track name in captured_for property (was processor:playlist which was obtuse) 2020-07-26 09:53:47 -05:00
f564c92493 Prompt user for name of Range and Region bounces (libardour part) 2020-07-26 09:53:47 -05:00
16c2df08ae When bouncing, use a TAG rather than changing the region name. 2020-07-26 09:53:47 -05:00
5a41ca8fdf
Amend df1e6fda2d, limit digits for numeric dB entry 2020-07-22 23:18:51 +02:00
df1e6fda2d
Fix SliderController numeric entry to use dB for gain 2020-07-22 21:43:14 +02:00
73089f6034
Add Lua bindings for the various TSFM states 2020-07-22 14:57:15 +02:00
a2f4521e77 Short-circuit gain interpolation if the change is negligibly small 2020-07-21 18:37:32 -05:00
fa495b7727
Account for additional TLS on macOS/X
On GLIBC systems pbd_stack_size() adds __pthread_get_minstack,
this is no available on mac systems, causing issues with some
libraries used by plugins.
2020-07-21 23:10:01 +02:00
5f3626d46f
Increase timeout for export-preparation
In some rare cases the butler may be busy for a long time
(e.g. seek in a large session may still be active when
export is started).

8 second timeout seems reasonable to prevent the app from hanging
without desktops showing a "unresponsive" popup in case the
timeout is reached for some reason (e.g the engine dies, and
no TFSM transition can happen).
2020-07-21 22:54:05 +02:00
Olivier Humbert
d2f74456c3
Update fr.po 2020-07-21 07:11:29 +02:00
Luciano Iam
e7e4fb3a81
WS: Use Ardour native scale for pan knobs 2020-07-21 06:49:28 +02:00
4dffe6e26e
Make master-output-volume optional 2020-07-21 05:50:30 +02:00
5ff3453b30
Update Ardour*Spacer to use theme color 2020-07-21 04:42:07 +02:00
e8e143bb32
Add a horizontal separator widget 2020-07-21 04:41:16 +02:00
001072e7d0
Implement ArdourKnob visual sensitivity 2020-07-21 02:18:39 +02:00
ba0dac92f2
Add a main-outs volume control and dedicated master-volume
This is intended for loudness normalization - #8318 to add
additional gain as last step.
2020-07-21 02:18:38 +02:00
ebc8e47a71
Add support for MainOutVolume in main-outs delivery 2020-07-21 02:18:38 +02:00
d5f2dd4e7f
Add MainOutVolume parameter type
This is similar to TrimAutomation, except intended to be available
on the master-bus' output, or a Route's _main_out delivery.
2020-07-21 02:18:38 +02:00
a36a93fe4f
NO-OP: whitespace 2020-07-21 02:18:34 +02:00
d794f39e20
Update post-export analysis to report max short/mom loudness 2020-07-20 05:16:51 +02:00
a26be84a5e
Update EBU VAMP plugin, report max short/mometary loudness 2020-07-20 05:16:04 +02:00
9d119b5ac5
Allow export-graph for analysis only
This is in preparation for #8318 to allow loudness analysis
of an export-range without actually writing a file.
2020-07-19 20:43:35 +02:00
15fcb5c782 Transport: engaging loop play while rolling with no audio tracks now works
At present only audio data from disk readers is declicked. MIDI tracks with audio output should
likely also be declicked, at which time Session::need_declick_before_locate() will require
amending
2020-07-18 17:30:06 -06:00
c778ded411
Auto-connect MIDI track/bus when output ports change
previously this subscription was handle done in
Route::add_routes() -> add_routes_inner() for MIDI tracks only.

Since f6c0b02d9f this was only done when adding
tracks, after any instruments were loaded (and fanned out).
2020-07-19 01:07:57 +02:00
f5727e50d1
Another attempt at fixing the auto-connect race condition 2020-07-19 01:05:35 +02:00
7f20e9c705
Fix auto-connect thread race-condition 2020-07-19 00:40:34 +02:00
f6c0b02d9f
Overhaul MIDI auto-connect #8317, #8307
This consolidates instrument creation for midi tracks & routes.
If an instrument is added, output auto-connect is postponed until
after the instrument plugin is added. Also when a multi-channel
instrument is fanned-out, the track outputs are not auto-connected.

This also subscribes MIDI-Busses to auto-connect when an instrument
is loaded or replaced at a later time.
2020-07-18 23:27:11 +02:00
a7a938275f
Add API to query if an instrument was fanned out
Since fan-out happens (interactively) in the GUI thread,
we need to keep track of this, in order to prevent later
auto-connection of the track to the master-bus.
2020-07-18 22:59:43 +02:00
e4232197fe
Revert recent auto-connect hack
..forth and back..
1882c1ba7e
dabd5715e9
fac8d84786

This needs a [much] better solution:

e.g. Wait until instrument is instantiated (ports are created),
then auto-connect, and finally fan-out
(or alternatively skip auto-connect for fanned-out tracks).

Currently both auto-connect as well as fan-out and port-creation
take place asynchronously.

Also MIDI track subscribe to &Session::midi_output_change_handler,
(MIDI busses don't).
2020-07-18 22:11:31 +02:00
4bbe6f20de
Auto-connect MIDI-Busses to master 2020-07-18 21:45:43 +02:00
1882c1ba7e
Add instrument before adding route #8317
This may (or may not) fix #8317. Usually changing I/O triggers
an auto-connect. The actual issue seems that auto-connect
thread runs before the ports are created.
2020-07-18 21:43:02 +02:00
fb9f1eff12
Add debug flags to track down #8317 2020-07-18 20:09:14 +02:00
6d6db90b60
Remove delay when engaging record while rolling 2020-07-17 17:08:59 +02:00
9242bc55a5
Do not emit StateSaved signal for backup saves
StateSaved() is mainly used for updating window title and
the snapshot list, unrelated to .pending or backup saves.
2020-07-17 16:55:16 +02:00
0b89d69de1
Copy state files for backup, instead of serializing
This should speed up backup saves of large session files.
2020-07-17 15:22:40 +02:00
c6b87972b1
Remove unused libsmf seconds/time API
This significantly speeds up parsing MIDI files with complex
tempo-maps. e.g. "Black MIDI Trilogy_2.mid" has 24134 Tempo
changes. Prior to this commit parsing that file took over 5 minutes.
now it loads in under one seconds (libsmf only; libardour still
add overhead, and now needs about 30-40 seconds, previously
it took about 10 mins).

The problem was that every call to `smf_track_add_event_pulses()`
calls `seconds_from_pulses()` which calls `smf_get_tempo_by_seconds()`
which iterates over the tempo-map:

  for every midi-event { for ever tempo until that midi-event {..} }

This does not scale to 3.5M events and 24k tempo-changes.
2020-07-16 18:38:03 +02:00
ba7db8759b
SMF: remove unused variable (from 803dab7d87) 2020-07-16 18:35:43 +02:00
9fcb51de2e
Use signed int for atomic operations part II -- #8314 2020-07-16 18:07:14 +02:00
803dab7d87
SMF: various backports from libsmf PR7
see also https://github.com/stump/libsmf/pull/7

* Fix validity checks of escaped data
* Handle non-EOT-terminated tracks.
* Fix buffer overflow on tempo change event
* Fix memory leaks in case loading fails
* Fix a logic errors in extract_escaped_event()
* Fix the assertion problem `is_sysex_byte(status)`
* Make libsmf more tolerant to malformed MIDI files.
  (fixes import of files generated by NoteEdit)
2020-07-16 18:00:40 +02:00
23e6dd5f6b
NO-OP: backport some libsmf doc and warnings 2020-07-16 17:58:04 +02:00
43158047ed
SMF: use glib macros for endian conversion 2020-07-16 17:57:59 +02:00
6d950d15ba
Use signed int for atomic operations -- #8314 2020-07-16 16:13:21 +02:00
baa8cd1b52
Fix LV2 buffersize option interface
https://lv2plug.in/doc/html/group__options.html specifies
a NULL terminated array of options (not a single option).

Since the call is the "instantiation" LV2 threading class, and
a single fixed value is passed with a direct call into the
plugin, using a stack-allocated LV2_Options_Option is sufficient.
2020-07-16 15:57:42 +02:00
c03f3d81a6
Allow Lua DSP scripts to override strict-i/o
This is handy for 1in, 2out plugins or 2in, 1in out (and multiples
thereof).
2020-07-13 00:52:59 +02:00
472e8a0d7b When copying a Range of MIDI, special-case the midi start+end in beats. This will likely get cleaner after nutempo. 2020-07-12 11:18:22 -05:00
f89ef872dd
Increase a-fluidsynth polyphony 2020-07-12 06:33:34 +02:00
9d390f38bf
Cache MIDI generator port latency
This reduces excessive, expensive calls to get_connected_latency_range()
2020-07-12 01:50:01 +02:00
ce47898639
Queue latency updates for initial connection
This may fix an issue with latency not being set correctly
on initial session-load (more common with Mixbus/JACK).
2020-07-12 01:48:45 +02:00
1796ee60b2
Clean up b5e479df and expose API to queue latency-updates 2020-07-12 00:38:56 +02:00
b5e479dfc3
Handle JACK latency callbacks in sync with process thread #8304
This is only relevant with JACK, where different implementations
use threads for the latency callback.

With jack 2, jack_port_register() blocks and the jack_latency_callback
arrives in a different thread: https://pastebin.com/mitGBwpq
with jack 1 the callback arrives in sync

In either case this usually happens while
_adding_routes_in_progress == true and Ardour holds the process-lock,
because jack2 can process in parallel with reconfiguring latency

See also 1983f56592
2020-07-12 00:15:26 +02:00
97025cf5a3
Improve debug message (tracking down JACK latency updates) 2020-07-11 23:38:44 +02:00
156c1e354a
Fix recursive locks when removing procs with a sidechain - #8301
When removing a plugin-insert that has a sidechain on a bus
that is implicitly soloed the following happens:

 * Route::remove_processor() takes a  WriterLock(_processor_lock)
 * The sidechain input is disconnected
 * Route::sidechain_change_handler() is called which calls
 * Route::input_change_handler()
 * Since the route is implicitly soloed, propagation is attempted
   which calls
 * Route::direct_feeds_according_to_reality()
   which takes ReaderLock(_processor_lock)

Recursive locks, reader-lock after writer-lock don't cause
a deadlock, releasing the reader-lock effectively also
releases the writer-lock...
2020-07-11 22:10:43 +02:00
edfca68494
Auto write-activate automation in latch mode
This allows to use of control-surfaces without touch-sensitivity
or mouse-wheel to write automation on demand (until transport stop).
2020-07-09 22:33:09 +02:00
ce8846d13f
Fix polygon redrawing -- #8148
Polygons used PolyLine::render() to render the path.
However since 7bb8ca1e76, the PolyLine path is constrained
(for automation lanes), and closed shaped polygons were not
always completely redrawn.
2020-07-09 02:10:28 +02:00
4d76388b8d
Remove no-inplace check from rt-context
This may fix a crash due to concurrency when _in_map changes
while the plugin runs and calls ::check_inplace()
2020-07-08 22:49:50 +02:00
308d138144
Fix audible blibs due to inconsistent monitor state -- #8275
It is possible that Route::monitoring_state() returns
  (MonitoringDisk | MonitorSilence)

This lead to various cases where there were is a direct comparison
(ms == MonitoringDisk). DiskReader::run tests for MonitoringDisk
to check if the buffer needs to be zeroed while locating.

Likewise Route::process_output_buffers() also explicitly tests
for both MonitoringDisk and MonitoringDisk.

The issue was likely introduced in fbe8075117 (although
it may have been possible in earlier version when using hardware
monitoring as well).
2020-07-07 18:53:36 +02:00
Vincenzo Reale
2379b2a5cf
Italian translation update 2020-07-06 20:28:02 +02:00
06b71a50a1 Revert "clear PostTransportStop from post_transport_work immediately after Session::non_realtime_stop() has finished its work"
This reverts commit 132aae385a.

This commit was not properly thought out, and may not even have addressed a real problem.
2020-07-06 11:33:53 -06:00