Commit graph

20220 commits

Author SHA1 Message Date
Paul Davis
baf307838c push2: change ordering within destructor to avoid event loop thread drawing-after-delete 2023-05-04 12:34:37 -06:00
Robin Gareus
617caf9e98
CPM: precent concurrent protocol activision
This can happen when a device is already connected
while Arodur is stating. The butler thread may activate it
(immediately post-engine), while the GUI thread tries
to do the same later when restoring state.
2023-05-04 18:44:02 +02:00
Ben Loftis
912f9e5ea3 provide functions for both linear and ramped tempo-twists 2023-05-04 09:22:28 -05:00
Robin Gareus
1b6e4b0b84
Implement marker copy/paste section 2023-05-04 06:25:59 +02:00
Paul Davis
b936fd12cd temporal: reset the tempo map in sections bounded by BBT markers (if any)
This avoids total SNAFUs caused by the impossibility of globally ordering
by BBT time.
2023-05-03 21:55:23 -06:00
Paul Davis
faac648502 temporal: add TempoMap::{next,previous_}meter() 2023-05-03 21:55:23 -06:00
Robin Gareus
34ec1e57ac Fix macOS builds (libusb_hotplug_event parameters) 2023-05-04 02:49:33 +02:00
Robin Gareus
336f51e1f0
Push2: implement MIDI port probing, auto-enable 2023-05-04 00:57:16 +02:00
Robin Gareus
da9ed129e3
Contourdesign: Implement USB probe/match 2023-05-04 00:20:45 +02:00
Robin Gareus
a8f5f5636f
FP8: implement MIDI port probing, auto-enable 2023-05-04 00:20:38 +02:00
Robin Gareus
97272481b8
CPM: Activate hotplugged libusb ctrl-surface 2023-05-04 00:20:31 +02:00
Robin Gareus
161d82869a
CPM: Implement automatic ctrl-surface activision 2023-05-04 00:20:15 +02:00
Robin Gareus
65346496f5
Refactor Ctrl Surface API
* reserve "probe" to actually probe for devices
* use separate probe for libusb and MIDI port devices
* use "available" to check if surface can be used
* allow both methods to be NULL
* remove unused ControlProtocolDescriptor* argument

Most surface just return `true` for available.
2023-05-03 15:38:42 +02:00
Robin Gareus
7c02ab9937
CPM: fix locks, do not reacquire descriptor 2023-05-03 02:05:58 +02:00
Robin Gareus
287a21c09e
Add API to query hardware port name
In case of internal backends this allows to retrieve the
Device name for a given (hashed unique) port-name.

As opposed to "pretty-name" (which defaults to hw-port-name),
this cannot be changed by the user.

It is intended to be used when probing for control surfaces.
2023-05-02 23:39:27 +02:00
Robin Gareus
2bdf51e02d
Implement cut/paste section markers
This does not include partial ranges (selection only
include either range-start or range-end).

Copy/paste also remains to be done
2023-05-02 23:36:51 +02:00
Ben Loftis
a7c4ab3247 fix thinko in canvas logic (fixes mouse cursor on desensitized playhead) 2023-05-01 08:49:27 -05:00
Robin Gareus
847f1e54c1
Clean up ctrl surface API
Remove unused fields, no mandatory surfaces
2023-05-01 02:22:45 +02:00
Robin Gareus
c55e17da99
Fix misleading doxygen comment
Previously this was used as documentation for peak_meter()
2023-04-29 21:03:56 +02:00
Paul Davis
0ddacb8ea2 when abort()-ing due to a failed assert in tempo map code, dump the map 2023-04-28 15:57:42 -06:00
Robin Gareus
4ccaa81671
Fix cut/copy section: ripple requires a region split 2023-04-28 22:55:54 +02:00
Paul Davis
907d3f82a7 temporal: fix grid generation in the presence of MusicTimePoints 2023-04-27 19:54:44 -06:00
Paul Davis
e7f4c9dcb5 temporal: fix removal (and thus moving) MusicTimePoints 2023-04-27 19:54:14 -06:00
Robin Gareus
64b480dd65
ARD: shutdown message is not an error 2023-04-27 15:35:22 +02:00
Robin Gareus
dd969dfe8c
Fix worst-case and I/O latency report
In case there are any unconnected tracks, the track's output is
assumed to align to the master bus (see Route::update_signal_latency).

For this to work correctly the master bus port's public latency
has to be set first.

This fixes e.g. the following issue: add a latent plugin to
the monitor section. Then toggle its bypass or remove it.
Previously the worst-case latency remained unchanged.
2023-04-27 01:43:20 +02:00
Robin Gareus
4b77ecbe83
Sanitize XML values to be valid UTF-8 (#9317)
This prevents any non UTF-8 strings to leak into
Ardour XML files, which can make the session unloadable.
2023-04-26 17:43:52 +02:00
Robin Gareus
df298c6046
Add API to sanitize UTF-8 strings 2023-04-26 17:25:24 +02:00
Robin Gareus
5e967c02a9
VST3: fix manually setting parameter (amend 52a73fdb3) 2023-04-26 00:19:36 +02:00
Robin Gareus
52a73fdb33
VST3: fix manually setting parameters
VST3PI::performEdit already updates the shadow data, so
since 979f9876a7
VST3Plugin::set_parameter effectively did nothing (unless a user
rapidly moves the control slider, in which case the next process
cycle sets a previous value).
2023-04-25 23:34:58 +02:00
Robin Gareus
595e2e2914
VST3: notify GUI when plugin parameter names change 2023-04-24 22:32:35 +02:00
Robin Gareus
82447431f4
VST3: properly debug ParamTitlesChanged 2023-04-24 20:58:07 +02:00
Robin Gareus
3b4f9a231f
VST3: debug ParamTitlesChanged 2023-04-24 19:38:17 +02:00
Robin Gareus
95de61f74e
Fix race condition when closing a session
~Session calls AudioEngine::remove_session(), which fades out,
then unsets the session, and then in libs/ardour/audioengine.cc:460
```
session_removed.signal(); // wakes up thread that initiated session removal
```

Session d'tor continues, and calls Port::PortDrop(), which
unregisters all ports one at a time.

Concurrently, AudioEngine continues, and calls PortManager::silence_outputs
which gets all ports first (!), and then iterates over them.

There is a race condition which can lead to
DummyAudioBackend::get_buffer: Assertion `valid_port (port)' failed
2023-04-24 17:43:08 +02:00
John Emmas
40738b2bee A couple of extra requirements for DEBUG_THREAD_PRINT 2023-04-24 14:51:04 +01:00
John Emmas
81d7a51498 Minor change to commit #35b5861195 2023-04-24 12:40:36 +01:00
Robin Gareus
649ad0f052
VST3: update parameter and Bus names on plugin's request
This is currently only the backend implementation,
the GUI is not yet notified of the change
2023-04-24 01:54:35 +02:00
Paul Davis
c95c11e186 remove debug output 2023-04-23 11:34:28 -06:00
Paul Davis
35b5861195 try to avoid output pthread_t as-is, due to MSVC etc. 2023-04-23 11:26:00 -06:00
Paul Davis
8cc16f2b81 convert std::cerr output to DEBUG_TRACE 2023-04-22 14:38:44 -06:00
Paul Davis
ec5320c5f1 transport master: do not unregister port when session goes away
TransportMasters are independent of the session, and thus their port lifetimes should be
also.
2023-04-22 14:38:44 -06:00
Robin Gareus
a7ca4cf8a1 CoreAudio: subscribe to device-alive property
This notifies the user about device disconnect and properly
shuts down the backend.
2023-04-22 19:36:37 +02:00
Robin Gareus
7f198c7c2f
Amend 4dc4d53: fix missing use/lib includes for luabindings 2023-04-22 02:18:05 +02:00
Damien Zammit
4620d138ee import_pt: Look up tracks by name instead of by number
This allows existing tracks with correct names to be the target for import.
2023-04-22 10:09:55 +10:00
Robin Gareus
4dc4d53004
Fix windows debug builds (obj file too large)
This fixes a "too many sections" issue
```
Fatal error: can't write 159 bytes to section .text of build/libs/ardour/luabindings.cc.1.o: 'file too big'
x86_64-w64-mingw32-as: build/libs/ardour/luabindings.cc.1.o: too many sections (36781)
```
2023-04-22 02:03:20 +02:00
Paul Davis
8629aea237 push2: shift held while using touch strip sends modulation, not pitch bend 2023-04-21 17:20:17 -06:00
Paul Davis
2aee4765e9 don't try to print pthread_self() 2023-04-21 15:38:40 -06:00
Paul Davis
4052537e0f midisurfaces: make connection_handler() private 2023-04-21 15:38:40 -06:00
Robin Gareus
27155732ff
MIDI input input follows selection groups
This also mitigates an issue that selecting a track in
a group may select other tracks. Previously the last
selected track's input was connected to MIDI ports, which
is usually not the track that the user clicked on.
2023-04-21 22:50:49 +02:00
Paul Davis
f718279949 surfaces & event loops: i really mean no more request buffer factories 2023-04-21 13:55:58 -06:00
Paul Davis
b0586763ba libpbd: changes to pre-registration of signal emitting threads
There is no need to preallocate request buffers for these threads - the event
loops that require them can allocate them when they discover and register the
pre-registered threads. This also means that event loops do not need to
register request buffer factories.
2023-04-21 13:43:46 -06:00