Commit graph

38602 commits

Author SHA1 Message Date
Robin Gareus
92d6cb9933
Fix alloc-dealloc-mismatch (video image) 2023-12-12 20:36:55 +01:00
Nil Geisweiller
5d73567ce2
Add Lua script to reverse MIDI
LUA EditorAction script to chronologically reverse MIDI notes
of selected MIDI regions, alongside MIDI region positions.
 * The positions of the MIDI regions are reversed as well, meaning regions
   at the end appear at the beginning and so on.
 * Individual notes are reversed so the ending of a note corresponds to its
   beginning. Thus notes should be quantized for this effect to yield good
   results.
 * Note that only MIDI notes are reversed. Other MIDI events such as CC or
   SYSEX are left unchanged.
2023-12-12 18:14:36 +01:00
George Witt
aa610fbfa5
Fix GM2 Drum Kit ProgramChange values
The GM 2 Percussion Sound Set specifies that PC #1 corresponds with a value of 00h
2023-12-12 18:10:43 +01:00
Robin Gareus
634aa9900d
UF8 for everyone 2023-12-12 03:38:50 +01:00
Paul Davis
f184acfb9d prevent crash in AudioPlaylist::write() due to lossy time domain convert 2023-12-11 16:52:25 -07:00
Robin Gareus
e7cc096d19
Fix location list order (amend 7ee5a3f24) 2023-12-11 15:54:30 +01:00
Robin Gareus
9f5f7edc5b
Add debug message to check if yabridge is detected 2023-12-10 22:13:38 +01:00
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
fa0d1d98f9
Update Section list (once) in the background
This can accumulate multiple signal emissions into a
single idle update.
2023-12-10 04:10:01 +01:00
Robin Gareus
bdfee53d1f
Fix signal emission for Locations::ripple (2/2) 2023-12-10 04:08:55 +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
fe3827b1d8
Fix crash when session range is created (bug introduced in 7ee5a3f) 2023-12-10 01:48:13 +01:00
Paul Davis
f407d4e3b7 ensure that MidiStreamView calls a color handler for each region
This allows MIDI regions to auto-update during theme editing
2023-12-09 14:07:58 -07:00
Robin Gareus
7ee5a3f24d
Keep location lists ordered by start-time 2023-12-09 02:26:49 +01:00
Robin Gareus
1da5c7f389
Fix ordering of locations
There are two lists, one for ranges, and one for
everything else.
2023-12-09 01:43:40 +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
62f20d126f
Another speedup when multiple locations change
This is mainly relevant for redo, and ripple
when all multiple locations are changed and static signals
are emitted by each Location.
2023-12-08 23:03:38 +01:00
Robin Gareus
857d8096a9
Revert "Keep Location List ordered by start-time"
This reverts commit 67f6363dcd.

This VERY slow when there are many locations in the session
e.g. with #9568 it can take seconds.
2023-12-08 22:14:04 +01:00
Robin Gareus
67f6363dcd
Keep Location List ordered by start-time
Now that Location signal(s) are only emitted when the
drag ended, the list can be kept in sync.

This also adds a further optimization to only update the
list once, even when multiple locations have been changed.
2023-12-08 22:03:22 +01:00
Robin Gareus
067a124fd1
Suspend signal emission of Locations during Drag
This significantly speeds up Location Drag/motion
2023-12-08 21:48:23 +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
7b1997ffda
Speed up Location changes #9568
Section Markers only need to be updated when an actual
section-marker is modified OR flags change.

This also removes duplicate signal subscriptions and
caches sorted Location list when iterating over section markers.
2023-12-08 17:22:32 +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
87181710b2
Drop UI shared_ptr references to Transport Masters
This allows ARDOUR::cleanup to unregister ports before
destroying the Audio Engine. This fixes a crash at exist
with JACK since 0786be8.
2023-12-05 04:37:39 +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
8576db5642
Fix buffer-overflow in power range spectral analysis (#9560) 2023-11-30 19:43:27 +01:00
Robin Gareus
b376f271c4
AAF import tool: fix windows builds 2023-11-29 05:42:31 +01:00
Robin Gareus
de7d0a986b
Foldback: fix memory leak 2023-11-29 02:20:09 +01:00
Robin Gareus
55093b2095
AAF import tool use Ardour style logging, fixes windows builds 2023-11-28 17:38:27 +01:00
Robin Gareus
a8c26dbfa4
Fix localtime_r check (#9554) 2023-11-28 17:05:03 +01:00
jujudusud
5138d174cb French translations 2023-11-28 01:07:08 +01:00
Robin Gareus
1306a698a7
Sanitize MIDI track names, remove unprintable chars #9553 2023-11-28 00:29:19 +01:00
Robin Gareus
02d91a7ff0
Import aaf-session CLI
https://github.com/Ardour/ardour/pull/805
https://github.com/agfline/ardour_aaf_support/tree/aaf
2023-11-27 23:25:19 +01:00
Robin Gareus
e3128e932c
Compile and install libAAF 2023-11-27 23:25:04 +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
3355e753bf
Keep track of LV2 externalUI visibility
This allows Ardour to re-open previously shown plugins,
and toggle externalUI.

This worked in the distant past, before Ardour 3.3 introduced
the Ardour Window Manager.
2023-11-26 20:07:00 +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
Robin Gareus
04be971238
Properly stop message emission when closing external UI 2023-11-26 20:06:07 +01:00
Robin Gareus
282be3d459
Nobody cares about GLIB_2_64 anymore 2023-11-25 13:08:12 +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
253dcb312b make note joining code a bit cleaner and preserve note velocities 2023-11-24 09:29:31 -07:00