Commit graph

21660 commits

Author SHA1 Message Date
Robin Gareus
e419b314a2
RegionFx: handle missing plugin, retain state
Since RegionFx are significantly simpler compared
to processors, missing plugin state can directly be handled
in the implantation without creating a subclass similar to
UnknownProcessor.
2024-08-23 15:42:33 +02:00
Robin Gareus
b6e187193d
RegionFx: abstract Plugin tail API 2024-08-23 15:26:50 +02:00
Robin Gareus
a1ba561cc5
Improve reliability of MIDI event rec-box
Previously there was a race condition. DiskWriter::run()
cleared the gui_feed_buffer before writing new events.
If the GUI thread had not yet picked up the events by then
they were not displayed. Furthermore due to the try-lock,
some events may have been written to the buffer in the first
place.

This fixes missing events (notably stuck notes) in the red
record box while recording MIDI.
2024-08-22 18:34:37 +02:00
Robin Gareus
9465ff16cb
Fix Route Fader (and mute) latency offset #9780
_output latency was not used for those. Processor automation
was not affected.

This also fixes the visual offset of automation vs buttons/slider
when the transport is not running.
2024-08-21 18:54:16 +02:00
Robin Gareus
908a402a75
Drop some shared pointer references after RCU writes
When removing instances from some RCU managed list or vector,
they can still live on as shared_ptr references on the
RCU's dead wood stack.

In many cases this is not an issue, in these cases it's prudent.

see also 44610c7877
2024-08-21 03:57:08 +02:00
Robin Gareus
4d1d938263
I/O Plugin: delete plugin after removing it
Previously this kept a shared pointer reference to the
plugin around, and ports remained registered.

See also 44610c7877 (RCU update)
2024-08-21 03:57:05 +02:00
Robin Gareus
1b07ad731e
RegionFX: use actual plugin tail 2024-08-20 18:58:45 +02:00
Robin Gareus
09a3c325ec
RegionFx: don't crash if plugin is missing on session load 2024-08-20 01:45:11 +02:00
Paul Davis
6de2d8f5c4 macOS: prevent the Quit main menu item from interferring with modal rules 2024-08-19 15:15:45 -06:00
Paul Davis
d455f06f51 fix trailing whitespace 2024-08-19 15:15:45 -06:00
Paul Davis
9e9164f0d0 remove unnecessary header include 2024-08-19 15:15:45 -06:00
Paul Davis
51d95c189f use NSMenuValidation informal protocol to desensitize app menu items 2024-08-19 15:15:45 -06:00
Paul Davis
ce6a2d73d8 use new GDK modal notification to (try to) desensitize global app menu items 2024-08-19 15:15:45 -06:00
Paul Davis
b544ac832c move gdk global for modal notification to be with other gdk globals 2024-08-19 15:15:45 -06:00
Paul Davis
0901b239c1 fix spelling error 2024-08-19 15:15:45 -06:00
Paul Davis
4ad332ae50 fix initial commit 2024-08-19 15:15:45 -06:00
Paul Davis
221fd82d59 initial infrastructure for handling modal dialogs on macOS 2024-08-19 15:15:45 -06:00
Robin Gareus
79ff99ba15
RegionFX: replay control automation (1/2)
This riffs off the previous commit, a simple way to replay
ctrl events without re-evaluating plugin automation line.

There may be a better way to handle this (e.g. replicate the
plugin for display only, evaluate on the fly in the UI thread)

Short of redesigning our disk-reader/playlist/region infrastructure
this is likely a sucks-least compromise for the time being.
2024-08-19 22:46:37 +02:00
Robin Gareus
4ff1de4c75
RegionFX: save and replay Plugin Parameter Outputs
This is somewhat experimental, and only works for plugins
that have DSP/UI separation and use [float] control ports
to pass information to the UI.
2024-08-19 22:40:58 +02:00
Robin Gareus
fdf5b0f8a1
Fix export with RegionFX
Effect processing requires session event pool, and
thread local disk reader working buffers.
2024-08-19 02:57:15 +02:00
Robin Gareus
c16e31012b
RegionFX: include plugin tail with pre-fade Fx 2024-08-18 00:54:36 +02:00
Robin Gareus
4bcf1d31c6
RegionFX: implement pre/post region-fade FX 2024-08-18 00:54:29 +02:00
Robin Gareus
8f5d6295b3
RegionFX: fix plugin cycle times 2024-08-18 00:54:09 +02:00
Robin Gareus
d8725ff3c8
RegionFX: fix crash when custom GUI thread sends change requests
This can happen with VST2s (e.g gvst) and some JUCE based plugins.
Previously that lead to a "programming error: no per-thread pool"
when the DR queues a overwrite buffer session-event.
2024-08-17 16:54:53 +02:00
Robin Gareus
76ee3339ac
RegionFX: fix variable I/O channel map 2024-08-17 16:47:53 +02:00
Robin Gareus
74a909e299
RegionFx: allow touch (for "show on touch") 2024-08-17 16:47:45 +02:00
Robin Gareus
d9752bb2c5
RegionFX: fix replicated channels 2024-08-17 16:47:38 +02:00
Robin Gareus
a2a9ceab92
RegionFX: actually activate plugin on load 2024-08-17 16:47:33 +02:00
Robin Gareus
15c7603fdd
Add API to query plugin tail duration
So far only VST3 plugins have an actual implementation.
2024-08-17 16:47:30 +02:00
Robin Gareus
b4fca7bc1c
Refactor API to allow VST2 plugins to callback to I/O and RegionFx 2024-08-17 16:47:26 +02:00
Robin Gareus
8c4819e588
AU: request offline processing 2024-08-17 16:47:21 +02:00
Paul Davis
35cb60c2dc remove "auto-discover" buttom from Mackie GUI
It could never do anything useful anyway, and deadlocked due to bad
lock usage
2024-08-16 13:12:24 -06:00
Robin Gareus
d4b71a7777
VST3: correctly set offline processing 2024-08-15 15:03:42 +02:00
Robin Gareus
8a8ae7069e
Fix edge-case pre-roll required for looping
This is mainly for the benefit of Mixbus, where input_latency
is not propagated upwards from the master bus (no direct
connection).

In Ardour's case _worst_input_latency >= _worst_route_latency
unless a given track with latent plugin is not connected.

Previously looping became out of sync (normal playback was not
affected) when a track had a latent plugin.
2024-08-14 21:50:58 +02:00
Robin Gareus
3bdf378df3
Add some additional Lua bindings 2024-08-12 21:36:55 +02:00
Robin Gareus
58120f75d5
Add API to check if backend was used previously
This is backported from LiveTrax, yet potentially handy
for future auto-connect policy in Ardour as well.
2024-08-12 21:26:42 +02:00
Robin Gareus
84506a041c
Move Mute automation with region(s) #9762
Mute and Panner are the only automatable Route owned controls
(that are not managed by a processor). So they need special
casing to be moved when moving a region.
2024-08-09 16:03:39 +02:00
Robin Gareus
15912fea77
Remove outdated monitor-modes PDF, refer to the manual 2024-08-07 01:16:57 +02:00
Robin Gareus
b121ee157e
Update Auto-Input meter policy
This replaces rule #17, 27, 43 and 59 on
https://manual.ardour.org/appendix/monitor-modes/

"Meter (What you see)" changes to 'Disk (Audio)'
aka "what you hear" in those cases.

This way "what you see" is always "what you hear".
Monitoring inputs is more conveniently done using
the Recorder Page.
2024-08-07 01:15:50 +02:00
Robin Gareus
76b25163bd
Fix YTK filemanager recently-used (Windows, macOS)
g_get_user_data_dir() folder does not exist on macOS
compare to gtkfilechoosersettings.c which creates
g_get_user_config_dir().
2024-08-06 20:51:56 +02:00
Robin Gareus
558e32e639
VST3: handle offline FX processing callbacks
This fixes potential deadlocks, when not using rt
process threads.
2024-08-06 20:51:55 +02:00
Paul Davis
3f1486fa12 coreselection: fix thinko
The core selection can be (a) stripables (b) automation controls (c) possibly a combination of both

Any given selection op might pass (a) or (b) or (c), so we need to handle the
case where (a) is null.
2024-08-05 20:14:28 -06:00
Robin Gareus
c2bf45a033
Fix triggerbox cues when looping
This correctly handles the case when a cue marker is at the
same position as loop-end. Previously the cue was triggered
even though transport looped
2024-08-03 20:21:53 +02:00
Robin Gareus
dc5753118c
Fix LTC TC master for incoming 30fps LTC
By default timecode.rate = 30. When 30fps LTC is received,
::detect_ltc_fps() never returned true (FPS changed), and
the TransportMaster never entered "locked" stage.
2024-08-02 23:29:13 +02:00
Paul Davis
b21dd1212e redesign API and internals of CoreSelection for more universality
We now have two basic methods for CoreSelection

* when selecting a stripable, use ::select_stripable_and_maybe_group() with
  appropriate arguments to cover the group selection aspects.

* when selecting an automation control that is part of a stripable, call
  ::select_stripable_with_control()

The old, more simply named methods (set/add/toggle etc.) have all been
made private, and their internal implementations changed somewhat.

This commit includes changes to control surfaces that use CoreSelection directly.
2024-08-02 11:50:21 -06:00
Paul Davis
af5c99dd05 move definition of selection operations in to ARDOUR namespace
This is a rare commit that I think should be done for GUI and libs at the same time
2024-08-02 11:50:21 -06:00
Robin Gareus
5d02970de8
Clarify new session dirty state
New unnamed sessions need to remain dirty so that the GUI
asks to save or delete the session.
2024-08-01 23:26:57 +02:00
Ben Loftis
03971be30d tweak MMC behavior: ffwd should start rolling immediately; but disallow ffwd during active recording 2024-08-01 12:34:58 -05:00
Ben Loftis
ff9a55df97 add a preference for MMC FastWind which allows skipping to markers 2024-08-01 12:34:58 -05:00
Robin Gareus
a76b2ed1bb
Rename JACK to "JACK/Pipewire" on Linux (1/2) 2024-07-31 04:38:01 +02:00