Paul Davis
c0a1aec516
start removal of NoteFixer code
...
Plan is to always read MIDI directly from rendered version. MidiPlaylistSource needs
attention before MidiPlaylist::read() can be removed
2019-11-02 16:32:18 -06:00
Paul Davis
addebc3240
move ownership of an RT MIDI buffer from DiskIO to MidiPlaylist
2019-11-02 16:32:18 -06:00
Paul Davis
5c0fd05c52
fix reallocation/copy sizes for direct index and blob pool
2019-11-02 16:32:18 -06:00
Paul Davis
604fc35e16
clear RTMidiBuffer before re-rendering into it
2019-11-02 16:32:18 -06:00
Paul Davis
0573e7cdf0
alter where note resolution happens when a re-rendering is scheduled for a MIDI track
2019-11-02 16:32:18 -06:00
Paul Davis
2cf9ad8f8c
refactor SessionEvent and DiskIO so that we pass around boost::shared_ptr<Track> rather than Route
...
(this the raw pointers used inside SessionEvent)
2019-11-02 16:32:18 -06:00
Paul Davis
5b92ef4353
remove unnecessary fwd decl
2019-11-02 16:32:18 -06:00
Paul Davis
5cd9c86d58
add RAII-style write protection while rendering MIDI playlist into RTMidiBuffer
2019-11-02 16:32:18 -06:00
Paul Davis
c55e23e7aa
change MidiPlaylist::dump() into ::render(); change type of initial argument
2019-11-02 16:32:18 -06:00
Paul Davis
3f8fbf22e6
fix initialization order
2019-11-02 16:32:18 -06:00
Paul Davis
73e9560eef
add extra info to output of RTMidiBuffer::dump()
2019-11-02 16:32:18 -06:00
Paul Davis
b017f20141
correct size computation for RTMidiBuffer, and reduce expansion amount
2019-11-02 16:32:18 -06:00
Paul Davis
08ab8fc58a
remove unused member variable
2019-11-02 16:32:18 -06:00
Paul Davis
088e4bca5a
reimplement RTMidiBuffer using a highly optimized data structure
...
Reduces load time of Glass MIDI piece with 48k note events by about 35%. Improves data
locality. Omits size for all 3 byte or less MIDI events, uses implicit size. No limit
on size of sysex.
Relies on the fact that the data structure is always filled linearly in time, and
never modified.
2019-11-02 16:32:18 -06:00
Paul Davis
e87e0ec028
add a MidiStateTracker to DiskReader and use to handle transport stop note resolving
2019-11-02 16:32:18 -06:00
Paul Davis
67beff22ce
trivial cleanups
2019-11-02 16:32:18 -06:00
Paul Davis
22da779322
introduce new all-in-RAM MIDI datastructure and use it for MIDI playback
2019-11-02 16:32:18 -06:00
Paul Davis
e0493814ec
fix the way Session::auto_loop_changed() works to put back various things removed since 5.x
2019-11-01 21:25:20 -06:00
Paul Davis
e4caef2c72
if a complete refill is called for, DiskReader cannot internal seek
2019-11-01 21:25:20 -06:00
Paul Davis
6c37ab411c
last piece of seamless-loop removal
2019-11-01 15:57:50 -06:00
Paul Davis
833927a4ea
don't send TFSM event LocateDone after a locate-for-loop-end
...
See comment for explanation
2019-11-01 15:56:06 -06:00
Paul Davis
a072228de5
remove seamless looping as an option (it's now the only kind of looping we support)
2019-11-01 14:04:28 -06:00
Paul Davis
fb2f1aa8e1
cut down on DEBUG::Transport noise
2019-11-01 14:04:28 -06:00
Paul Davis
0f6ad823de
if looping, squish DiskReader::playback_sample into loop range
2019-11-01 14:04:28 -06:00
Paul Davis
d30f2180bf
transportFSM: when locating due to end-of-loop, skip declick and do not transition states
2019-11-01 14:04:28 -06:00
Robin Gareus
a5140f4558
Handle Lua DSP script load failure (unknown plugin)
...
This handles a very specific edge-case: A script that was
successfully parsed before, fails load on session state restore.
2019-11-01 15:54:36 +01:00
Robin Gareus
7852047dca
Fix XML-writer edge-case (empty content)
2019-11-01 15:39:44 +01:00
Robin Gareus
eca27d8218
Fix MIDI Timestretch
...
* skip notes outside of region-range (source-start, region-length)
* handle tempo-ramps properly, apply map to stretch-fraction
* fix region properties after stretching
(position needs to be re-set first, to set a midi-region's
quarter-note position, which is used by the length calc)
2019-11-01 05:40:30 +01:00
Julien "_FrnchFrgg_" RIVAUD
3cae11936f
Highlight the currently selected item in ArdourDropdown & co
2019-10-31 14:38:26 +01:00
Julien "_FrnchFrgg_" RIVAUD
016db85fa1
Workaround a GTKMenu bug in ArdourDropdown & co.
2019-10-31 14:21:57 +01:00
Julien "_FrnchFrgg_" RIVAUD
07458155a2
Work around an initialization bug of GTK menus
2019-10-31 11:34:36 +01:00
Julien "_FrnchFrgg_" RIVAUD
eaba4fa593
Update |offset| instead of changing the formula
...
So that the test to see if it fits also takes the new offset into
account.
2019-10-31 10:42:37 +01:00
Julien "_FrnchFrgg_" RIVAUD
fb9203998b
Align vertical centers of widget and active menuitem
2019-10-31 10:29:43 +01:00
Julien "_FrnchFrgg_" RIVAUD
7d48b20652
Fix a thinko in x position of menu popups
...
This has lasted without being noticed because menus that big are not
common.
2019-10-31 10:29:43 +01:00
Robin Gareus
5e4d641488
NO-OP: whitespace
2019-10-31 00:22:26 +01:00
Robin Gareus
98db30efb1
Declare helper function static (don't export)
2019-10-31 00:22:12 +01:00
Julien "_FrnchFrgg_" RIVAUD
3a16b89219
Try harder to put the active item under the mouse (ArdourDropdown)
2019-10-30 23:56:36 +01:00
Robin Gareus
27a3b93152
Update latency-compensation when re-ordering processors
...
When re-ordering processors, the route's own latency does not
change (at first).
But it might if sends or plugins with side-chains a involved.
2019-10-30 23:51:53 +01:00
Robin Gareus
e2f5ce6f61
NO-OP: whitespace/comments
2019-10-30 23:45:27 +01:00
Paul Davis
0711c87bfa
missing part of working looping
2019-10-29 16:20:04 -06:00
Paul Davis
2b2b003d50
get looping to work again
2019-10-29 16:20:04 -06:00
Paul Davis
c368c26519
fix handling of deferred events in transportFSM
...
tfsm events live on intrusive lists, with only 1 hook, which means they
can only be on one list at a time, and cannot be deleted while part of
the list. This wasn't being addressed properly when deferring (and
undeferring) events.
2019-10-29 16:20:04 -06:00
Robin Gareus
78cf0e5235
Customize Lua GC, add object-memory-lock API.
...
Add custom API to prevent Lua Objects from being garbage collected.
This is intended to for Ardour LuaBridge bindings (~1MB Objects:
tables, functions and userdata).
The bindings are persistent and the gc can skip them in mark & sweep
phases. This is a significant performance improvement for garbage
collection.
Note. The next version of Lua (5.4) will come with a generational-gc
rather than an incremental, so extending the API at this point in time
is acceptable.
2019-10-29 05:45:43 +01:00
Robin Gareus
130211a4bd
Update Lua to upstream 5.3.5
2019-10-29 05:36:24 +01:00
Paul Davis
814272bbac
improve debug output
2019-10-28 17:34:38 -06:00
Paul Davis
594f344cca
fix thinko
2019-10-28 17:34:23 -06:00
Paul Davis
e2bb59a3e3
limit waveview render threads to 8
2019-10-28 17:24:21 -06:00
Paul Davis
7d3c2a4fee
provide a mechanism to decide if Session::update_latency_compensation() is being called as part of a callback from the backend.
...
If it is, do not call AudioEngine::update_latencies() to avoid JACK1-style deadlock
2019-10-28 17:23:54 -06:00
Paul Davis
706a9ab59f
fix mistakenly-placed semi-colon
2019-10-28 17:21:46 -06:00
Paul Davis
b97e2d5013
to avoid deadlock in JACK1 scenarios, do not invoke AudioEngine::update_latencies() from update_latency_compensation() if called from a process thread
2019-10-28 16:55:29 -06:00