Commit graph

20867 commits

Author SHA1 Message Date
Robin Gareus
4402e2a3a8
Add workaround for yabridge threading
* yabridge runs the plugin's process function in a dedicated
  bridged thread. Ardour's process thread is not (it just waits)

* When a plugin calls `restartComponent` from the realtime
  thread. yabridge uses a host notification thread to perform
  the callback.
  Unlike other VST3 implementations that use a notification thread
  (eg. JUCE), yabridge blocks and waits for the notification to
  complete before the realtime thread can continue.

This leads to a deadlock.

However, we know that yabridge always synchronizes the
callback and concurrent calls are prevented by yabridge's design.

https://github.com/robbert-vdh/yabridge/issues/266
2023-12-10 22:08:59 +01:00
Robin Gareus
f191d8ba94
Further consolidate locations signal emissions 2023-12-10 04:10:45 +01:00
Robin Gareus
0f3e3b5243
Fix signal emission for Locations::ripple (1/2)
Locations::ripple can never add/remove markers, hence
Locations::changed is not applicable.

That signal is to indicate when more than one location is
added or removed from the location list.
2023-12-10 04:08:30 +01:00
Robin Gareus
1de91fa0fb
Significantly reduce signal emission for Location undo
Undo sets the state of ALL Locations, which resulted in
at least two signals for each Location (name changed,
start+end changed), even if there was no change.
2023-12-08 23:48:37 +01:00
Robin Gareus
153c7e289d
Add explicit API to copy Locations
This is in preparation to reduce signals during
Location Drag motion (which operates on a copied
Location, that causes [static] signal emissions,
but the location itself is not in any list).
2023-12-08 21:47:03 +01:00
Robin Gareus
0c5bbfa62d
Location: add API to use cached sorted location list
Every call to ::next_section() copies the location list
and sorts all the regions.

If the session has a significant amount of Locations and
Section Marker (#9568 has 300+) sorting them each time
when iterating over sections is significant.
2023-12-08 17:22:28 +01:00
Robin Gareus
ebc887e33d
Continue export-roll to flush buffers
This is required when using plugins to write data.
2023-12-08 17:22:24 +01:00
Robin Gareus
a13a797600
Ignore "stop at end" when exporting
Exporting a dedicated Range should not be constrained by
session markers. This fixes at least 2 issues:

* export could be cut short when using latent plugins
* exporting a range crossing the session end marker was cut short
2023-12-08 17:22:09 +01:00
Robin Gareus
963c104cca
Change default sample-rate to 48kHz
44.1kHz is dead; many soundcards do not support it anymore.
2023-12-08 17:21:57 +01:00
Robin Gareus
004097075a
ControlGroup cannot just create Controls that don't exist
The call as-is can only create route-owned controls, and
even if it would succeed, the created ACs won't necessarily
be controlling anything.
2023-12-06 04:49:16 +01:00
Robin Gareus
0786be859d
Retain TransportMaster Ports across sessions
Unloading a session should only remove session-ports.
This fixes Timecode master sync when switching snapshots
or sessions.
2023-12-03 20:38:31 +01:00
Robin Gareus
4194313e4b
Make Timecode master connection order independent
When a user first connected a port to the Timecode master
input and then disconnected a previous port, the Timecode
master assumed it was not connected.
2023-12-02 23:42:27 +01:00
Robin Gareus
dacf488c86
Fix callback order of port-dis/connections
Previously the port-engine was a LIFO. Changes were pushed back
and then popped-back. This causes issues when re-connecting
Transport Masters.

The GUI does the following when changing connections:
1. disconnect all
2. connect to new port

which lead to TransportMaster::connection_handler being called
in reverse order: connect, disconnect, and the transport
master was assumed to not be connected.

--

Now connections queue is a FIFO and code was consolidated.

(Note, we cannot use a std::deque because it does not support
memory pre-allocation with ::reserve)
2023-12-02 23:34:58 +01:00
Robin Gareus
1386b3b73f
Revert s/frame/sample/ for LTC frame 2023-12-02 22:45:33 +01:00
Robin Gareus
a8c26dbfa4
Fix localtime_r check (#9554) 2023-11-28 17:05:03 +01:00
Robin Gareus
1306a698a7
Sanitize MIDI track names, remove unprintable chars #9553 2023-11-28 00:29:19 +01:00
Robin Gareus
7593551e49
Import libAAF into Ardour's source-tree
tools/update_libaaf.sh - libaaf v0.1-85-g3e4c2cd
2023-11-27 23:24:54 +01:00
Robin Gareus
47e437c2aa
Bootstrap libAAF support 2023-11-27 23:18:22 +01:00
Robin Gareus
73b44532f1
Allow to override visibility tracker
This is in preparation to keep track of external UI plugin UIs
2023-11-26 20:06:35 +01:00
Nils Philippsen
e995daa375 Fix failure to build with libxml2 version 2.12
This declared some xmlError pointers const, which probably was always
assumed, but not made explicit.

Signed-off-by: Nils Philippsen <nils@tiptoe.de>
2023-11-25 00:30:04 +01:00
Paul Davis
f01f4eeded MIDI state tracking doesn't care about size 2023-11-20 21:40:12 -07:00
Paul Davis
cb91334cc6 basic work to permit "MIDI catchup" for MIDI state at any point on the timeline
This currently does nothing and cannot be enabled
2023-11-20 21:32:49 -07:00
Robin Gareus
4d7c4bf183
Clearlooks: GtkCList is deprecated and not used by Ardour 2023-11-19 20:28:44 +01:00
Paul Davis
da175cc2e8 temporal: remove TempoMap::insert_time() and use shift() instead
The former was incorrectly implemented, and the latter has already been tested more
in real life.

We should likely remove ::remove_time also and use shift() there too, but that
requires testing negative shifts more broadly.
2023-11-19 12:14:10 -07:00
Paul Davis
5723c9bf9c temporal: slightly more debug info when computing quarters from superclock 2023-11-13 22:32:15 -07:00
Paul Davis
04523dee97 temporal: NOOP reindent #ifdef'ed out code 2023-11-13 22:32:15 -07:00
Paul Davis
ce4d1ffe51 temporal: after loading an old tempo map, reset it to compute omega etc. 2023-11-13 22:32:15 -07:00
Paul Davis
fbc578fdb6 temporal: use "pulses" info from old tempo maps
Note: pulses are whole notes
2023-11-13 22:32:15 -07:00
Paul Davis
f8d86c8d19 temporal: add a new ::set_tempo() method for use when loading older tempo maps 2023-11-13 22:32:15 -07:00
Robin Gareus
5b7e008cad
Fix missing sources after cleanup/rec #9536
Ardour accidentally removed nascent source-files during cleanup.
This can lead to missing files when recording directly after a
cleanup.

This also ensures that there are no duplicates in the
dead-sources (file sources unused in the current snapshot) list.
2023-11-13 22:15:42 +01:00
Robin Gareus
bbbd023895
Add flag to hide internal plugins from user 2023-11-09 02:01:54 +01:00
Robin Gareus
5b77e348e7
Allow to clear LV2 plugin scan info 2023-11-09 02:01:14 +01:00
Paul Davis
9e4a695689 temporal: fix error in computation of timecnt_t::end() for specific conditions
parens were in the wrong place - we need to add the ::magnitude() of
the tick-based duration AFTER conversion of audio-time position to beats, not
before.
2023-11-06 20:38:08 -07:00
Paul Davis
58652f6268 launchpad pro: use "first fader" concept from lpx
we control the CC number sent by launchpad faders, and 0x20 is too large
because it causes the faders to overlap with some of the CC values
sent by RHS pads. Parametize the first fader and use it everywhere
2023-11-06 12:33:36 -07:00
Paul Davis
144756e602 launchpad: extend Dominik's LP Pro pad patch to LPX/Mini 2023-11-06 10:31:22 -07:00
dominik martinez
93a6849bdd lppro: Don't unbang trigger until pad is released
This was causing issues with cues when clips were set to gate triggering. A pad
long press was causing the clip to release. Additionally, remove an extra timer
that was being set.
2023-11-06 10:31:22 -07:00
Robin Gareus
3e8cde5ad6
Always allow playback w/o session-range 2023-11-06 16:49:46 +01:00
Paul Davis
3fc126b891 launchpads: add namespacing to make 1-source-2-surfaces work for X and Mini 2023-11-04 09:30:26 -06:00
Paul Davis
9b511ce973 launchpad: work on a single implementation for both Mini and X devices
This is not complete, because the symol names are identical, and there's no way (yet)
to ensure which versions Ardour will use if both are dynamically loaded.
2023-11-04 09:30:26 -06:00
Paul Davis
c4f8c84a75 region: in definition of ::end() use a slightly faster but entirely equivalent expression 2023-11-03 15:11:38 -06:00
Paul Davis
7d0b223330 region: end().decrement() IS nt_last(), so remove the explicit decrement call 2023-11-03 15:11:38 -06:00
Paul Davis
d309ab31e8 playlist partition_internal() uses exclusive end semantics
Do not pass "end-1" to it from Playlist::cut()
2023-11-03 15:11:38 -06:00
Robin Gareus
b27c804a7c
Prevent duplicate entries in recent session
This can happen with snapshots or after save-as with
.ardour session files having different "Names" in the same path.

Or simply by saving a session on macOS in /tmp (which is really
/private/tmp).
2023-11-01 23:17:47 +01:00
Paul Davis
53ad83c91c some extra debugging output for MerryIO to try to produce 2023-11-01 00:25:51 -06:00
Robin Gareus
a57076d203
Fix MIDI input monitoring without connections
This was seemingly accidentally committed in 07d7e0bf54.
MIDI Monitoring works now with MIDI devices that are not
connected to a Track or Bus.
2023-10-31 22:35:05 +01:00
Paul Davis
43c5f0ab46 launchpad X: 98% functionality 2023-10-31 09:56:40 -06:00
Paul Davis
dec9282110 midisurface: use correct virtual method for note off
This likely needs checking for all surfaces that inherit from MidiSurface. It is clearly
the correct thing to have in the code, but existing behavior might be predicated on
the former incorrect connection
2023-10-31 09:56:40 -06:00
Paul Davis
f45aec903b launchpad X: better general code design for Novation's use model 2023-10-31 09:56:40 -06:00
Paul Davis
e9858773ca launchpad X: change design of fader bank implementation to match the X way (not the Pro way) 2023-10-31 09:56:40 -06:00
Robin Gareus
6dd1ad24ab
IOPlug: implement reset to default values 2023-10-31 07:41:23 +01:00