Robin Gareus [Fri, 22 Nov 2019 21:12:48 +0000 (22:12 +0100)]
Enable some key release event forwarding
This is needed for the virtual MIDI keyboard to trigger note-off events
Robin Gareus [Fri, 22 Nov 2019 21:11:55 +0000 (22:11 +0100)]
Virtual MIDI keyboard, when visible, gets to handle keyboard input first
Robin Gareus [Fri, 22 Nov 2019 19:06:43 +0000 (20:06 +0100)]
Save VST paths after successful scan
Ardour only saves Config when the session is saved.
When changing the VST Path and starting a plugin-scan the newly
discovered plugins would otherwise not be avalable unless
the session is explicitly saved after a scan.
Robin Gareus [Fri, 22 Nov 2019 19:05:04 +0000 (20:05 +0100)]
Inform LV2 plugins about main window ID
Robin Gareus [Fri, 22 Nov 2019 19:01:32 +0000 (20:01 +0100)]
Add support for LV2/KX transient-ID option
Robin Gareus [Thu, 21 Nov 2019 22:37:31 +0000 (23:37 +0100)]
Fix buffer-overflow when vari-speeding
Session::process() can call split-cycle which offset the
buffer pointers. When vari-speeding at speed > 1.0, the
engine also splits the cycle every n_samples, to not exceed
the configured buffersize. This needs to take prior buffer
offsets into account.
Robin Gareus [Thu, 21 Nov 2019 16:49:20 +0000 (17:49 +0100)]
GUI: Use new boost::optional API
get_value_or() has been deprecated since boost 1.56
Robin Gareus [Thu, 21 Nov 2019 16:48:56 +0000 (17:48 +0100)]
Use new boost::optional API
get_value_or() has been deprecated since boost 1.56
Robin Gareus [Thu, 21 Nov 2019 16:43:32 +0000 (17:43 +0100)]
Bump boost version requirement
1.56 is needed for boost::optional::value_or
Robin Gareus [Thu, 21 Nov 2019 01:54:19 +0000 (02:54 +0100)]
Fix multi-channel de-click
_declick_amp gain needs to be reset for each channel before
the test (_declick_amp.gain() != target_gain) if de-clicking
is needed.
Paul Davis [Wed, 20 Nov 2019 16:37:14 +0000 (09:37 -0700)]
add mixer actions for toggle disk & input monitoring; bind to d and i in mixer bindings
Robin Gareus [Tue, 19 Nov 2019 15:20:28 +0000 (16:20 +0100)]
Fix declick offset position for multi-channel tracks
Paul Davis [Tue, 19 Nov 2019 04:38:46 +0000 (21:38 -0700)]
DiskReader::_declick_offs should only advance once per ::run() call
Paul Davis [Tue, 19 Nov 2019 04:38:25 +0000 (21:38 -0700)]
DiskReader::_declick_amp needs to repeat the same work for each audio channel handled
Paul Davis [Tue, 19 Nov 2019 04:29:32 +0000 (21:29 -0700)]
fix transport FSM to stop first and declick later
Paul Davis [Tue, 19 Nov 2019 03:47:47 +0000 (20:47 -0700)]
small changes to make declick out triggered by just stopping
Robin Gareus [Tue, 19 Nov 2019 02:33:28 +0000 (03:33 +0100)]
Fix some script icons for non-square buttons
Robin Gareus [Tue, 19 Nov 2019 02:19:08 +0000 (03:19 +0100)]
Fix Lua Pangolayout ellipsis width
Robin Gareus [Tue, 19 Nov 2019 01:52:35 +0000 (02:52 +0100)]
Consistent toolbar button height
Robin Gareus [Tue, 19 Nov 2019 01:47:11 +0000 (02:47 +0100)]
Improve toolbar layout consistency
Directly pack Lua Script buttons into top-level table,
use same size-constraints.
Use consistent Lua Action button width, in particular for buttons 10..12.
prefer "a" instead of "10" for default numeric label
Paul Davis [Mon, 18 Nov 2019 22:38:18 +0000 (15:38 -0700)]
unset _reversed whenever RTMidiBuffer gets ::clear()'ed
Paul Davis [Mon, 18 Nov 2019 20:06:16 +0000 (13:06 -0700)]
add missing NULL check
Robin Gareus [Mon, 18 Nov 2019 19:21:40 +0000 (20:21 +0100)]
Latency compensation is independent of transport-logic
This also fixes a concurrency issue when when non-realtime-stop
and graph-reorder or other rt-latency changes coincide.
Paul Davis [Mon, 18 Nov 2019 19:01:26 +0000 (12:01 -0700)]
use reverse-reading of MIDI data in DiskReader
Paul Davis [Mon, 18 Nov 2019 18:40:59 +0000 (11:40 -0700)]
support backwards reading of MIDI from RTMidiBuffer
Paul Davis [Mon, 18 Nov 2019 18:40:06 +0000 (11:40 -0700)]
fix typo/thinko in logic to decide if MIDI buffers in DiskWriter require the butler (to write to disk)
Robin Gareus [Mon, 18 Nov 2019 14:10:15 +0000 (15:10 +0100)]
Fix automation lookup when rolling backwards
Robin Gareus [Mon, 18 Nov 2019 14:09:43 +0000 (15:09 +0100)]
NO-OP: simplify code
find_next_ac_event, needs to find the next event *after* (but not
at) start.
std::upper_bound returns an iterator pointing to the first element
in the range [first, last) that is greater than value.
This is equivalent to using std::lower_bound an iterating until
finding the first element greater than.
Robin Gareus [Mon, 18 Nov 2019 14:06:59 +0000 (15:06 +0100)]
Automation event lookup when rolling backwards
When rolling backwards we need to be able to find
the *next* event before "start".
Robin Gareus [Sun, 17 Nov 2019 13:51:33 +0000 (14:51 +0100)]
Tweak LFO script
* thin automation to prevent too dense events
* add icon (cosine wave)
Paul Davis [Sat, 16 Nov 2019 03:42:15 +0000 (20:42 -0700)]
remove debug output
Paul Davis [Sat, 16 Nov 2019 03:40:23 +0000 (20:40 -0700)]
fix questionable and not entirely intended change that was a part of
dad47e445cb349
Paul Davis [Fri, 15 Nov 2019 22:58:29 +0000 (15:58 -0700)]
better transport master behavior when working with sample-clock-synced transport masters
Paul Davis [Fri, 15 Nov 2019 22:57:13 +0000 (15:57 -0700)]
improve behavior when synced to JACK transport
Heuristic and actions when a locate is needed are different for
JACK transport than TC
Paul Davis [Fri, 15 Nov 2019 22:54:41 +0000 (15:54 -0700)]
improve initial coordinate with JACK transport state
Paul Davis [Fri, 15 Nov 2019 22:52:20 +0000 (15:52 -0700)]
better debugging message
Paul Davis [Fri, 15 Nov 2019 22:51:58 +0000 (15:51 -0700)]
consolidate setting of "get roll after locate" in TFSM
Paul Davis [Fri, 15 Nov 2019 22:50:33 +0000 (15:50 -0700)]
NO-OP: move brace
Paul Davis [Fri, 15 Nov 2019 22:50:05 +0000 (15:50 -0700)]
when synced to JACK transport, transport requests go there first.
Paul Davis [Fri, 15 Nov 2019 22:49:08 +0000 (15:49 -0700)]
fix behavior of Session::maybe_stop() when synced to JACK Transport
Paul Davis [Fri, 15 Nov 2019 22:48:29 +0000 (15:48 -0700)]
make comment more accurate
Paul Davis [Fri, 15 Nov 2019 22:47:29 +0000 (15:47 -0700)]
consolidate Session::locate() and Session::do_locate()
The first no longer needs to handle requests by passing them to
JACK transport
Paul Davis [Fri, 15 Nov 2019 22:16:50 +0000 (15:16 -0700)]
no need for MidiClockTransportMaster::starting() method
Paul Davis [Fri, 15 Nov 2019 22:15:41 +0000 (15:15 -0700)]
improve behavior of JACK transport sync callback.
Do not call transport actions directly, just report back to JACK
on transport status.
Paul Davis [Fri, 15 Nov 2019 22:14:54 +0000 (15:14 -0700)]
add a bit of debugging to JACK transport code
Paul Davis [Fri, 15 Nov 2019 22:14:09 +0000 (15:14 -0700)]
fix resampling ratio when stopped (corner case - not typically called)
Paul Davis [Fri, 15 Nov 2019 22:12:49 +0000 (15:12 -0700)]
move DiskReader::inc_no_disk_output() into .cc to allow for easier debugging
Paul Davis [Tue, 12 Nov 2019 01:23:22 +0000 (18:23 -0700)]
fix crash with -D slave caused by too-early use of a transport master's _port member
Paul Davis [Tue, 12 Nov 2019 01:22:45 +0000 (18:22 -0700)]
fix oddly damaged code (vs. 5.x) for EngineSlave core methods (JACK transport)
Paul Davis [Tue, 12 Nov 2019 01:21:47 +0000 (18:21 -0700)]
eliminate hacky design for being able to deliver the correct time as JACK timebase master
Paul Davis [Tue, 12 Nov 2019 01:02:37 +0000 (18:02 -0700)]
fix up the creation & state restore of the TransportMasterManager
Paul Davis [Tue, 12 Nov 2019 00:52:48 +0000 (17:52 -0700)]
put JACK time master option back in the menus
Daniel Appelt [Thu, 14 Nov 2019 09:08:13 +0000 (10:08 +0100)]
Add script to create LFO-like plugin automation
Robin Gareus [Thu, 14 Nov 2019 20:50:00 +0000 (21:50 +0100)]
Fix cycle-end position when not rolling
When stopped start_sample == end_sample.
This fixes accidental automation lookup,
as well as plugin time/position information.
Robin Gareus [Thu, 14 Nov 2019 20:37:14 +0000 (21:37 +0100)]
Relax LV2 time-info re-transmission condition
Allow beat (quarter-note count) to drift by 1/100 beat before re-sync.
This prevents excessive re-transmissions
Robin Gareus [Thu, 14 Nov 2019 20:15:30 +0000 (21:15 +0100)]
LV2 extension for host's time-scale vari-speed
Ardour 6 internally always runs at speed 1.0 (or -1.0, or stopped 0.0).
There is no vari-speed that scale "BPM" or "n_sample" time progression
per cycle.
Instead Ardour 6 vari-speed mechanism transparently re-samples I/O.
So process-time is scaled only relative to wall-clock time.
From a plugin's POV this is similar to "freewheeling": The plugin
processes data as if the host plays at speed 1.0. While the host
plays this data at a different rate.
Some plugins may like to be informed about the host's actual
playback rate.
Currently this is mainly for the benefit of github.com/x42/repitch.lv2.git
Robin Gareus [Thu, 14 Nov 2019 19:03:22 +0000 (20:03 +0100)]
Initialize uninitialized variables
This also ensures that musical-time information is initially
transmitted to a plugin.
Robin Gareus [Thu, 14 Nov 2019 18:39:48 +0000 (19:39 +0100)]
Allow vari-speed slowdown down to 2%
Robin Gareus [Wed, 13 Nov 2019 22:00:12 +0000 (23:00 +0100)]
Fix MIDNAM device list for plugin-provided names
Robin Gareus [Wed, 13 Nov 2019 21:14:19 +0000 (22:14 +0100)]
Amend previous commit - latch toggles only while rolling
Robin Gareus [Wed, 13 Nov 2019 21:02:07 +0000 (22:02 +0100)]
Automation watch toggle buttons and enforce latch
Robin Gareus [Wed, 13 Nov 2019 16:21:51 +0000 (17:21 +0100)]
Remove boolean automation special case
Previously setting a boolean-control to "write" and roll did not
create an automation-point.
The state was not correctly captured.
The boolean-control needed to be toggled explicitly to create
an automation point.
Robin Gareus [Wed, 13 Nov 2019 15:57:28 +0000 (16:57 +0100)]
Fix automation-write when locating
When locating while writing automation, begin a new write-pass,
and add a guard point at the locate target position.
NB set_in_write_pass takes 3 arguments: (write_enable, add_point, when)
the last two default to false, 0.
Robin Gareus [Wed, 13 Nov 2019 15:53:46 +0000 (16:53 +0100)]
Fix bool-automation anchor
Typo sneaked in from
ff2f93497...
cc7de475f2
Robin Gareus [Tue, 12 Nov 2019 18:34:12 +0000 (19:34 +0100)]
Tweak layout of Plugin-Preset dialog
Robin Gareus [Tue, 12 Nov 2019 16:00:50 +0000 (17:00 +0100)]
Allow to override plugin-provided MIDNAM
Robin Gareus [Tue, 12 Nov 2019 05:29:05 +0000 (06:29 +0100)]
Skip custom MIDNAM files in generic MTAV list
Robin Gareus [Tue, 12 Nov 2019 05:28:02 +0000 (06:28 +0100)]
Add API to query if a given MIDNAM is plugin-provided
Robin Gareus [Mon, 11 Nov 2019 23:07:51 +0000 (00:07 +0100)]
Indicate the numeric peak-hold is always digital-peak
Robin Gareus [Mon, 11 Nov 2019 22:37:11 +0000 (23:37 +0100)]
Only retain control-port connections
When MIDI input follows selection, ports that provide music-data
should be disconnected, even if they *also* provide control-data
Robin Gareus [Sun, 10 Nov 2019 21:33:46 +0000 (22:33 +0100)]
Prefs > Plugins > Scan should discover new plugins
First argument is `cache_only`. `false` means to discover news ones.
Christopher Arndt [Sat, 9 Nov 2019 23:49:18 +0000 (00:49 +0100)]
Log warning if host does not support midnam/bankpatch extensions
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
Christopher Arndt [Sat, 9 Nov 2019 23:47:57 +0000 (00:47 +0100)]
Fix segfault: don't try to use midnam:update extension if host doesn't support it
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
Robin Gareus [Sat, 9 Nov 2019 05:34:31 +0000 (06:34 +0100)]
Ask xjadeo to use ArdourMono font for OSD
Robin Gareus [Sat, 9 Nov 2019 05:30:46 +0000 (06:30 +0100)]
Remove invalid error message
This clause is in NO_VFORK, vfork_exec_wrapper is irrelevant there
Robin Gareus [Sat, 9 Nov 2019 05:28:55 +0000 (06:28 +0100)]
Fix child-process communication (video monitor in particular)
103ef2ba08e5 introduced an API to write raw data (const void*)
to a child process, along with the previous API to
write (std::string const&)
VideoMonitor uses write_to_stdin("fixed text"), and g++
interprets this to use the (const void*) API instead
of the std::string, which breaks communication.
Robin Gareus [Sat, 9 Nov 2019 04:09:21 +0000 (05:09 +0100)]
Fix endless loop when drag/copy locked region
Robin Gareus [Sat, 9 Nov 2019 04:03:38 +0000 (05:03 +0100)]
Preview video frame when dragging
Robin Gareus [Sat, 9 Nov 2019 00:35:55 +0000 (01:35 +0100)]
Add convenience methods to test for active drags
Paul Davis [Fri, 8 Nov 2019 23:56:59 +0000 (16:56 -0700)]
fix crash if Splash::pop_back_for() is called without splash on-screen
Robin Gareus [Fri, 8 Nov 2019 21:49:46 +0000 (22:49 +0100)]
Fix Metronome: use loop-range only when looping
Robin Gareus [Fri, 8 Nov 2019 21:49:23 +0000 (22:49 +0100)]
Fix tempo-grid calculation: prevent duplicate events, enforce range
Robin Gareus [Fri, 8 Nov 2019 20:01:28 +0000 (21:01 +0100)]
Fix uninitialized value
ARDOUR::LV2Plugin::init -> lilv_state_restore () -> set_port_value ()
compares new against current value
Paul Davis [Fri, 8 Nov 2019 19:39:58 +0000 (12:39 -0700)]
fix crash caused by storing clock modes while loading a session
The store would delete any existing node of the same name,
which was the node being used to set the mode in the first
place.
Robin Gareus [Fri, 8 Nov 2019 16:49:37 +0000 (17:49 +0100)]
Ignore latency of inactive routes
Robin Gareus [Fri, 8 Nov 2019 16:36:52 +0000 (17:36 +0100)]
Remove unused signal
Robin Gareus [Fri, 8 Nov 2019 16:28:51 +0000 (17:28 +0100)]
Click: pre-allocate memory for grid-point lookup
Robin Gareus [Fri, 8 Nov 2019 16:16:04 +0000 (17:16 +0100)]
Fix metronome when looping
Robin Gareus [Fri, 8 Nov 2019 16:08:47 +0000 (17:08 +0100)]
Fix loop/pre-roll
Pre-roll to fill buffers only needs to be done once when starting
to play or when locating.
Seamless looping just continues. Every processor takes the loop
position into account locally.
Paul Davis [Thu, 7 Nov 2019 06:55:46 +0000 (23:55 -0700)]
remove stacktrace
Paul Davis [Thu, 7 Nov 2019 06:54:47 +0000 (23:54 -0700)]
remove debug output
Paul Davis [Thu, 7 Nov 2019 06:54:34 +0000 (23:54 -0700)]
do not transition "back" to Rolling by calling start_transport() if a locate was for loop-end
We never stopped the transport, so there's no reason to start it again. Doing so causes alignment problems
because all tracks have their ::run() ranges reinitialized
Paul Davis [Thu, 7 Nov 2019 05:12:40 +0000 (22:12 -0700)]
fix unconditional note resolution during DiskReader::realtime_locate()
When looping, we do not want to resolve notes at the end of the loop via ::realtime_locate() -
::get_midi_playback() has already taken care of this. But when not looping, we need this. So,
add an argument to tell all interested parties whether the locate is for a loop end or not
Paul Davis [Thu, 7 Nov 2019 00:35:30 +0000 (17:35 -0700)]
move all responsibility for autostart into StartupFSM and out of engine dialog
Paul Davis [Thu, 7 Nov 2019 00:05:07 +0000 (17:05 -0700)]
remove unused API
Paul Davis [Wed, 6 Nov 2019 23:51:03 +0000 (16:51 -0700)]
implement intended auto-start logic for startupFSM
Paul Davis [Wed, 6 Nov 2019 23:32:46 +0000 (16:32 -0700)]
if user uses Ctrl/Cmd-w to close a dialog during startup, treat that as a request to exit
Paul Davis [Wed, 6 Nov 2019 23:25:30 +0000 (16:25 -0700)]
add a signal to Gtkmm2ext::Keyboard to allow (possible) handling of close-current-dialog
Paul Davis [Wed, 6 Nov 2019 23:00:00 +0000 (16:00 -0700)]
fix unconditional note resolution during DiskReader::realtime_locate()
When looping, we do not want to resolve notes at the end of the loop via ::realtime_locate() -
::get_midi_playback() has already taken care of this. But when not looping, we need this. So,
add an argument to tell all interested parties whether the locate is for a loop end or not
Robin Gareus [Wed, 6 Nov 2019 19:05:50 +0000 (20:05 +0100)]
Use strict-i/o on master-bus by default
This precludes issues with multi-out-plugins adding an excessive
number of ports and changing master-panning.