Commit Graph

16343 Commits

Author SHA1 Message Date
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
132aae385a clear PostTransportStop from post_transport_work immediately after Session::non_realtime_stop() has finished its work 2020-07-05 17:48:16 -06:00
c1226eca73 add more info to DEBUG_TRACE output 2020-07-05 17:48:16 -06:00
0c7895298d Add Dotted option to a-delay, because dotted intervals cannot be expressed via the integer Divisor param 2020-07-05 15:24:38 -05:00
Edgar Aichinger
e35aaf5c28
update german translation 2020-07-01 15:47:52 +02:00
7fa7df0111
Remove unused variable
SoftwareMonitoring is handled by AudioTrack::get_input_monitoring_state
2020-06-30 23:25:41 +02:00
a3e30f72f0
Fix copy/paste mistake 2020-06-30 17:01:25 +02:00
1ecaffa642
Expose some more theme options to LV2 plugin UIs 2020-06-30 16:45:14 +02:00
92f54b3e98
Add API to query if systemic latency can be measured 2020-06-30 03:34:26 +02:00
a0bdf87720
Fix potential deadlock when adding sidechain port
Previously add_remove_sidechain() released the process-lock
(to create the I/O ports), while keeping a processor writer-lock.

Meanwhile the auto-connect thread may be woken up to perform
a latency update. This thread takes the process-lock and
then stalls, waiting for a processor reader-lock.

Then add_remove_sidechain() continues and tries to re-acquire
the process-lock.
2020-06-26 17:46:57 +02:00
fbcb0b6443
Add method to reset plugin statsistics 2020-06-26 13:01:45 +02:00
a006b8c412
Fix time_t <> long int ambiguity, 32bit builds
See 7cf68eaf72 for a detailed explanation.
2020-06-25 20:14:17 +02:00
7f5b3b9e33
Thin recent plugin stats, don't stats accumulate forever 2020-06-25 06:43:41 +02:00
148ca92518
Emit Signal when plugin-stats change 2020-06-25 04:59:00 +02:00
85034d0bca
Pass through DnDTV signal_drag_motion event 2020-06-25 02:24:02 +02:00
6d83e47860
Fix Plugin-preset saving when preset exists
Previously the GUI explicitly called remove_preset() before
saving a plugin-preset. This functionality is now moved
into the backend.

This fixes a case when a user tries to save/replace factory presets
and works around https://github.com/lv2/lilv/issues/37
2020-06-24 23:59:09 +02:00
4717f7806d issue 8186 strip controls reset then show on select
Causes motor controls to jiggle on all strips
	when select changes. Fixed
2020-06-23 20:25:49 -07:00
2685728f59
Start collecting plugin stats and recently used plugins 2020-06-24 04:02:17 +02:00
40aac796e9
NO-OP: Plugin Tag/Status indent and const'ness 2020-06-24 03:24:54 +02:00
Porrumentzio
2ca1f55d6b
Updated and reworked Basque translation 2020-06-23 22:09:07 +02:00
91013a114b
Fix some compiler warning, -Wsign-compare
This also partially reverts 76c7e87c02.
2020-06-23 22:05:40 +02:00
Olivier Humbert
49352d0732
Fix an issue (reported by waf i18n_pot) in cs.po 2020-06-23 21:30:10 +02:00
Nikolaus Gullotta
76c7e87c02
Make Session::session_name_is_legal less magical 2020-06-23 14:27:42 -05:00
c313b006cf
LV2: keep track of supported properties
Register all plugin props that we may be interested in
to _property_values, and later intercept all messages for
registered properties (not just atom_Path).
2020-06-23 20:48:50 +02:00
Nikolaus Gullotta
cf0f1fd6c3
Fix undefined behaviour in Session::session_name_is_legal
The for loop was checking out of bound indicies causing some perfectly
legal session names to be identified as illegal
2020-06-23 13:33:51 -05:00
32aa290578 issue 8243 select gets feedback past selected strips
make sure to drop old references when route is changed
2020-06-23 09:03:19 -07:00
399192da4c OSC add width feedback to strips
Also detect panner type change
2020-06-22 23:29:11 -07:00
452607711b
Invalidate LV2 state on any property change
This amends 417c780d4, LV2 property changes to intercept messages
from custom UIs
2020-06-22 18:52:44 +02:00
417c780d44
Mark session as modified when LV2 properties are changed 2020-06-21 17:37:00 +02:00
1674261f89
On plugin internal-state change, mark preset as modified 2020-06-21 17:36:01 +02:00
ff8a6dd328
Fix mismatching parenthesis in translatable string 2020-06-21 16:59:28 +02:00
John Emmas
8cea355906 Moving Controllable::set_interface() into a 'cc' file makes it easier to fix our MSVC build issue (with min + max) 2020-06-20 09:38:00 +01:00
203e20a8df On solo_section ('A' key), invalidate playlist when we stop. Fixes #8253 2020-06-19 17:11:40 -05:00
4053e8cb76 update german translation 2020-06-19 12:12:43 -06:00
71f088dbbd move virtual method requiring std::min from header into .cc
The method is virtual so it could never have been inlined anyway
2020-06-18 16:26:44 -06:00
0d8fac079d The presence of "using std::***" in any header file is not acceptable. Do not revert or change this.
Revert "Partially revert commit #23feb0491e"

This reverts commit 3b5546cfce.
2020-06-18 16:19:18 -06:00
John Emmas
3b5546cfce Partially revert commit #23feb0491e
For MSVC, the 'using std::' statements are needed when building anything which #includes 'pbd/controllable.h' (never quite figured out why...)
2020-06-18 12:46:05 +01:00
23feb0491e
Remove using std::min/max from header 2020-06-18 01:05:48 +02:00
c424e4d61c
Allow to set group-override with common set_interface() API 2020-06-18 00:42:09 +02:00
ad234b1853
US2400: fix pan_azimuth direction by setting rotary flag 2020-06-18 00:19:29 +02:00
aa4d357201
CC121: fix pan_azimuth direction by setting rotary flag 2020-06-18 00:10:08 +02:00
fbe8075117
Update monitoring
This partially reverts 208c781248
in order to fix monitoring when using punch-in/out.

This also allows to revert to Ardour 5 style MIDI exclusive
Input or Disk monitoring when not using layered-recording.
2020-06-17 23:51:13 +02:00
Olivier Humbert
e34d940ab3
Update French translation for libardour 2020-06-17 19:35:22 +02:00
0f95bf001d
Remove unused API (Input Metering)
Input metering is now handled by Track::prep_record_enabled()
explicitly setting meter positions.
2020-06-16 22:42:16 +02:00
d557fa5e33
Automatically meter MIDI track inputs on rec-arm 2020-06-16 22:28:19 +02:00
175b665c97
Add Lua bindings to write immediate MIDI events 2020-06-16 04:22:23 +02:00
3294b1ce08
Allow to select pan-automation lanes - #8234
The GUI uses ::axis_view_by_control() if a controllable when
the CoreSelection contains a controllable.

CoreSelection::get_stripables() saves and looks up controllable
by PBD::ID. Panorama automation controls were previously
not found, since they are not directly owned by the route.
2020-06-14 20:31:50 +02:00
650fd31332
Improve debug message 2020-06-12 05:08:40 +02:00
9708987003
Fix automation write-mode (overwrite existing automation)
AutomationWatch::transport_state_change() is called at a time
when transport has just started to roll, but may not yet be rolling
(count-in, latency-preroll).

Later, after pre-roll is complete and transport starts moving,
AutomationWatch::transport_state_change() is not called again.

Thus set_in_write_pass(true); is never called, and writing
automation assumes that all changes happen while stopped.

In 'write" mode, guard points are added for each change, when
the transport is stopped.

Before this change, this happened at periodic intervals even
when rolling.
2020-06-12 05:08:29 +02:00
d33cc4a3dd
Document transport state semantics
This also adds transport_state_rolling() which can be used
from a TransportStateChanged callback.
2020-06-12 05:02:06 +02:00
5ce12a38e6
Retain connections of ctrl-data ports
Previously "Follow selection" disconnected a MIDI port from
control surfaces, even when it was marked as "MidiPortControl".
2020-06-11 23:24:55 +02:00
6677e9787e
Reserve generic MIDI control surface port-name 2020-06-11 23:19:05 +02:00
0e37759495
Synchronize preset changes of plugin-instances
When adding or removing a plugin preset, all instances
of the same plugin need to be notified to update their
preset list.
2020-06-11 19:42:37 +02:00
1c24e9abef
Bump LV2 plugin version (and mark them stable)
> An odd minor or micro version, or minor version zero,
> indicates that the resource is a development version.

from http://lv2plug.in/ns/lv2core#minorVersion
2020-06-10 21:33:53 +02:00
Luciano Iam
8ff4bcfd68
WebSockets: improve JS client message handling code 2020-06-10 19:47:37 +02:00
Luciano Iam
a26a9018fd
WebSockets: code refactor
Terminology used by server and client was starting to diverge.

C++ classes ArdourStrips and ArdourGlobals classes have been
renamed to ArdourMixer and ArdourTransport respectively.

State node values for transport functionality have been simplified
and prefixed with 'transport_' to match what was done for strips.
2020-06-10 19:47:37 +02:00
Luciano Iam
ae4df127ad
WebSockets: implement a JavaScript object-oriented client API
Replace previous callback based basic client with an easier
to use object-oriented API that further abstracts the low level
details of the WebSockets Server surface messaging protocol.

All built-in web surface demos were updated to use the new API.
2020-06-10 19:47:37 +02:00
5296ed141f
Fix support for older libwebsocket versions
LWS_WITH_EXTERNAL_POLL a new optional define for libwebsocket 4.x.
Earlier versions always supported it, without the compile-time define.

This fixes support for libwesocket 2.x (Debian, Ubuntu), and 3.x.
Also for Windows, LWS_WITH_GLIB is not available.
2020-06-10 15:58:47 +02:00
f0d5d1323a
Fix MIDI tracer time display for async and transport-master ports 2020-06-10 00:16:54 +02:00
4c5ad08e81
Add mono separate regions to source-list
The "whole-file" property is now mainly used as indicator whether
a region should be in the source list.
2020-06-09 22:49:12 +02:00
Nils Philippsen
f6e38219bc
Don't refer to never used external variable
Signed-off-by: Nils Philippsen <nils@tiptoe.de>
2020-06-09 21:11:21 +02:00
Nils Philippsen
2a456c1921
Add cycles_t type definition on ppc64
Signed-off-by: Nils Philippsen <nils@tiptoe.de>
2020-06-09 21:11:21 +02:00
72d45c154a
Do not allow ctrl chars in file (or session) names (1/2) 2020-06-09 20:30:51 +02:00
Hiroki Inagaki
e848afe2ec
Update Japanese translation 2020-06-09 17:48:09 +02:00
Vincenzo Reale
c87edcbf04
Adding appdata and gtkmm2ext Italian translations 2020-06-09 17:44:15 +02:00
Vincenzo Reale
f27e7dadf5
Italian translation update 2020-06-09 17:43:28 +02:00
Matthias von Faber
e3dcd1f5d7
Only try using __pthread_get_minstack on glibc
This is a glibc-only extension, so don't bother on other platforms.
Also, according to POSIX, PTHREAD_STACK_MIN is defined in limits.h, so
include climits just to be safe.
2020-06-09 17:39:24 +02:00
Matthias von Faber
662ff1bd39
Fall back to non-realtime threads again
Makes Ardour start into sessions again when realtime scheduling is
unavailable.
2020-06-09 17:39:24 +02:00
Matthias von Faber
4b7efac3dc
Report true error when tasklist threads cannot be created
pthreads doesn't use errno, so the error message was misleading.
2020-06-09 17:39:24 +02:00
Peter Kovář
630a3d07d2
Added support for the original Contour Design ShuttlePRO 2020-06-09 17:29:01 +02:00
c7edc28383
Keep aux-send names when duplicating tracks 2020-06-07 21:39:50 +02:00
c7bce4b685
NO-OP: whitespace 2020-06-07 18:25:18 +02:00
21b8885fe9
Remove debug output (also fix some builds, missing stdio.h) 2020-06-07 18:18:58 +02:00