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.
Len Ovens [Wed, 6 Nov 2019 16:27:21 +0000 (08:27 -0800)]
Session should not be accessed when not there.
Paul Davis [Wed, 6 Nov 2019 16:28:23 +0000 (09:28 -0700)]
remove debug message
Paul Davis [Wed, 6 Nov 2019 16:27:49 +0000 (09:27 -0700)]
move at-exit messages about pool utilization to DEBUG_TRACE
Paul Davis [Wed, 6 Nov 2019 16:07:12 +0000 (09:07 -0700)]
resolved notes need to use cycle-relative time
Paul Davis [Wed, 6 Nov 2019 16:03:55 +0000 (09:03 -0700)]
be sure to move effective_start while loop-reading MIDI
Paul Davis [Wed, 6 Nov 2019 15:58:09 +0000 (08:58 -0700)]
fix DiskReader::get_midi_playback() when looping
Although at the Session level we never run "through" the loop end,
latency compensation means that that start/end sample values passed to
Processor::run() may cross the loop end. Fix how we handle this so
that we do not read data from after the end of the loop
Paul Davis [Wed, 6 Nov 2019 15:56:50 +0000 (08:56 -0700)]
improve comment about warning message
Paul Davis [Mon, 4 Nov 2019 21:35:18 +0000 (14:35 -0700)]
fix a bad transition in the transportFSM.
Paul Davis [Mon, 4 Nov 2019 19:57:19 +0000 (12:57 -0700)]
avoid use of Port::port_offset() everywhere except Port::flush_buffers() and Port::get_buffer()
Split cycles are run as if they are an entire self-contained cycle, starting at zero and running for "nframes".
We adjust the timing and position of data only when retrieving and writing it to Port buffers.
Paul Davis [Mon, 4 Nov 2019 19:52:34 +0000 (12:52 -0700)]
rename method argument to better reflect its intended role
Paul Davis [Sun, 3 Nov 2019 17:55:47 +0000 (10:55 -0700)]
when resolving notes for a locate, use zero as the timestamp, not the current Port::port_offset()
All _immediate_events data gets written to the output buffer at the end of the current (split) cycle anyway, so the
timestamp is irrelevant (as long as it is zero, and will therefore be read by ::snapshot_out_of_band_data()
Robin Gareus [Sun, 3 Nov 2019 16:48:36 +0000 (17:48 +0100)]
Virtual-keyboard: momentary pedal (no toggle)
Paul Davis [Sun, 3 Nov 2019 16:20:50 +0000 (09:20 -0700)]
another notable cleanup/simplification of DiskReader's MIDI handling
Note that we resolve notes from the tracker directly into the output buffer. This happens
after an edit causes a buffer overwrite
Paul Davis [Sun, 3 Nov 2019 16:20:00 +0000 (09:20 -0700)]
comment fix
Paul Davis [Sun, 3 Nov 2019 14:58:28 +0000 (07:58 -0700)]
immediate events time reference for zero is the start of the run() cycle, not absolute sample time
Robin Gareus [Sun, 3 Nov 2019 14:18:04 +0000 (15:18 +0100)]
Correctly flush MIDI buffers on cycle-split
Robin Gareus [Sun, 3 Nov 2019 14:02:00 +0000 (15:02 +0100)]
Clarify MIDI-port event-timestamp debug-message
Robin Gareus [Sun, 3 Nov 2019 13:42:10 +0000 (14:42 +0100)]
Fix timecode generation after split-cycles
John Emmas [Sun, 3 Nov 2019 13:45:24 +0000 (13:45 +0000)]
Add/remove source(s) in our MSVC project (libardour)
John Emmas [Sun, 3 Nov 2019 13:42:21 +0000 (13:42 +0000)]
Accommodate some recently moved/renamed folders and source files (libevoral)
Robin Gareus [Sun, 3 Nov 2019 13:15:11 +0000 (14:15 +0100)]
Fix build -- 'printf' was not declared in this scope
Robin Gareus [Sun, 3 Nov 2019 03:11:43 +0000 (04:11 +0100)]
Fix compiler warning
Paul Davis [Sun, 3 Nov 2019 01:35:35 +0000 (19:35 -0600)]
for now, show how long MIDI rendering takes
Paul Davis [Sun, 3 Nov 2019 01:35:25 +0000 (19:35 -0600)]
use playback filter when rendering MIDI; respond to changes in filter by re-rendering
Robin Gareus [Sat, 2 Nov 2019 23:28:53 +0000 (00:28 +0100)]
Auto-connect input should not disconnect other ports
This fixes an issue with existing MIDI routing between MIDI tracks
and/or busses. Automatic MIDI connections should only dis/re-connect
ports that are explicitly configured in Preferences > MIDI Ports
and leave all other connections alone.
Robin Gareus [Sat, 2 Nov 2019 22:52:29 +0000 (23:52 +0100)]
Virtual-keyboard: "Tab" to sustain (still undocumented)
Paul Davis [Sat, 2 Nov 2019 22:20:32 +0000 (16:20 -0600)]
part 1 of replicating semantics of ARDOUR_UI::toggle_roll() in BasicUI::toggle_roll()
This can be done better, even without sharing code
Paul Davis [Sat, 2 Nov 2019 22:12:28 +0000 (16:12 -0600)]
improve operation of ARDOUR_UI::toggle_roll() for loop mode (particularly when loop-is-mode)
Paul Davis [Sat, 2 Nov 2019 22:12:08 +0000 (16:12 -0600)]
comment update
Paul Davis [Sat, 2 Nov 2019 22:11:56 +0000 (16:11 -0600)]
use new API to make locate happen
Paul Davis [Sat, 2 Nov 2019 22:11:34 +0000 (16:11 -0600)]
don't locate when enabling loop if loop-is-mode
Paul Davis [Sat, 2 Nov 2019 22:11:10 +0000 (16:11 -0600)]
allow explicit "with-roll" argument to a locate to override Session::should_roll_after_locate()
Paul Davis [Sat, 2 Nov 2019 22:10:38 +0000 (16:10 -0600)]
remove unused parameter from Session::set_play_loop() API
Paul Davis [Wed, 30 Oct 2019 17:48:48 +0000 (11:48 -0600)]
lovely simplification of DiskReader::get_midi_playback()
This is made possible by knowing that it is never called upon to read across
loop boundaries. The session splits the process cycle for the end of the loop
Paul Davis [Wed, 30 Oct 2019 04:07:18 +0000 (22:07 -0600)]
make it more likely that debug messages are printed without x-thread interruption
Paul Davis [Wed, 30 Oct 2019 03:36:09 +0000 (21:36 -0600)]
NOOP: newline removed
Paul Davis [Wed, 30 Oct 2019 03:25:04 +0000 (21:25 -0600)]
remove unused (empty) API
Paul Davis [Wed, 30 Oct 2019 03:20:11 +0000 (21:20 -0600)]
remove unused API
Paul Davis [Wed, 30 Oct 2019 03:19:54 +0000 (21:19 -0600)]
add another conditional to decide if we should merge disk MIDI data into input MIDI data
Paul Davis [Wed, 30 Oct 2019 03:19:29 +0000 (21:19 -0600)]
remove commented line
Paul Davis [Wed, 30 Oct 2019 02:48:44 +0000 (20:48 -0600)]
helpful variable rename
Paul Davis [Wed, 30 Oct 2019 02:46:21 +0000 (20:46 -0600)]
clarify clarifying comment
Paul Davis [Sun, 27 Oct 2019 01:54:10 +0000 (19:54 -0600)]
remove MidiPlaylist::read() API
Paul Davis [Sun, 27 Oct 2019 01:51:47 +0000 (19:51 -0600)]
comment out actual action in MidiPlaylistSource::read()
See comment and remember that we do not MidiPlaylistSource at this time.
Paul Davis [Sat, 26 Oct 2019 03:14:43 +0000 (21:14 -0600)]
use a different MidiBuffer API to move data from RT MidiBuffer into MidiBuffer during ::read()
Paul Davis [Fri, 25 Oct 2019 19:41:33 +0000 (13:41 -0600)]
move evoral/src/* to evoral/
Paul Davis [Fri, 25 Oct 2019 19:13:51 +0000 (13:13 -0600)]
rename all Evoral source from .(hpp|cpp)$ to .(h|cc)
Paul Davis [Fri, 25 Oct 2019 18:59:24 +0000 (12:59 -0600)]
NO-OP: whitespace
Paul Davis [Sat, 19 Oct 2019 02:05:22 +0000 (20:05 -0600)]
use a note tracker to resolve notes cut off during render by the end of the region
Paul Davis [Fri, 18 Oct 2019 23:28:36 +0000 (17:28 -0600)]
remove a mistakenly left-in declaration
Paul Davis [Fri, 18 Oct 2019 23:21:51 +0000 (17:21 -0600)]
various adjustments so that a MidiPlaylist gets re-rendered whenever it changes.
This may still be missing a few changes (i.e. they do not cause re-rendering)
Paul Davis [Fri, 18 Oct 2019 23:19:48 +0000 (17:19 -0600)]
do not initiate transport stop during loading when setting capture/playback buffer sizes
Paul Davis [Fri, 18 Oct 2019 16:26:30 +0000 (10:26 -0600)]
add a new "contents" pseudo-property to Region
The type of this property doesn't matter - it only exists so that we can
signal a change to the (MIDI) contents of a Region via PropertyChanged
Paul Davis [Fri, 18 Oct 2019 15:44:16 +0000 (09:44 -0600)]
NOOP: whitespace change
Paul Davis [Fri, 18 Oct 2019 05:39:38 +0000 (23:39 -0600)]
fix thinko when dealing with non-MIDI tracks
Paul Davis [Fri, 18 Oct 2019 05:16:55 +0000 (23:16 -0600)]
start removal of NoteFixer code
Plan is to always read MIDI directly from rendered version. MidiPlaylistSource needs
attention before MidiPlaylist::read() can be removed
Paul Davis [Fri, 18 Oct 2019 05:15:53 +0000 (23:15 -0600)]
move ownership of an RT MIDI buffer from DiskIO to MidiPlaylist
Paul Davis [Fri, 18 Oct 2019 05:11:23 +0000 (23:11 -0600)]
fix reallocation/copy sizes for direct index and blob pool
Paul Davis [Thu, 17 Oct 2019 23:34:00 +0000 (17:34 -0600)]
clear RTMidiBuffer before re-rendering into it
Paul Davis [Thu, 17 Oct 2019 23:32:56 +0000 (17:32 -0600)]
alter where note resolution happens when a re-rendering is scheduled for a MIDI track
Paul Davis [Thu, 17 Oct 2019 21:44:57 +0000 (15:44 -0600)]
refactor SessionEvent and DiskIO so that we pass around boost::shared_ptr<Track> rather than Route
(this the raw pointers used inside SessionEvent)
Paul Davis [Thu, 17 Oct 2019 21:43:44 +0000 (15:43 -0600)]
remove unnecessary fwd decl
Paul Davis [Thu, 17 Oct 2019 21:19:05 +0000 (15:19 -0600)]
add RAII-style write protection while rendering MIDI playlist into RTMidiBuffer
Paul Davis [Thu, 17 Oct 2019 05:07:29 +0000 (23:07 -0600)]
change MidiPlaylist::dump() into ::render(); change type of initial argument
Paul Davis [Wed, 16 Oct 2019 14:18:53 +0000 (08:18 -0600)]
fix initialization order
Paul Davis [Wed, 16 Oct 2019 14:18:43 +0000 (08:18 -0600)]
add extra info to output of RTMidiBuffer::dump()
Paul Davis [Wed, 16 Oct 2019 14:12:04 +0000 (08:12 -0600)]
correct size computation for RTMidiBuffer, and reduce expansion amount
Paul Davis [Wed, 16 Oct 2019 14:04:23 +0000 (08:04 -0600)]
remove unused member variable
Paul Davis [Wed, 16 Oct 2019 03:34:03 +0000 (21:34 -0600)]
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.
Paul Davis [Tue, 15 Oct 2019 22:57:23 +0000 (16:57 -0600)]
add a MidiStateTracker to DiskReader and use to handle transport stop note resolving
Paul Davis [Tue, 15 Oct 2019 03:28:43 +0000 (21:28 -0600)]
trivial cleanups
Paul Davis [Tue, 15 Oct 2019 01:00:32 +0000 (19:00 -0600)]
introduce new all-in-RAM MIDI datastructure and use it for MIDI playback
Ben Loftis [Sat, 2 Nov 2019 19:57:44 +0000 (14:57 -0500)]
Remove complicated panner theme logic.
Robin Gareus [Sat, 2 Nov 2019 17:47:59 +0000 (18:47 +0100)]
Fan-out multi-channel instruments to tracks (not busses)
Robin Gareus [Sat, 2 Nov 2019 15:33:14 +0000 (16:33 +0100)]
Enable fan-out by default
When adding a new multi-channel instrument, assume the
user wants to pan the outputs independently.
Paul Davis [Sat, 2 Nov 2019 03:14:40 +0000 (21:14 -0600)]
fix the way Session::auto_loop_changed() works to put back various things removed since 5.x
Paul Davis [Sat, 2 Nov 2019 03:13:39 +0000 (21:13 -0600)]
if a complete refill is called for, DiskReader cannot internal seek
Robin Gareus [Sat, 2 Nov 2019 01:43:56 +0000 (02:43 +0100)]
Make virtual-keyboard messages translatable -- #7834
Paul Davis [Fri, 1 Nov 2019 21:57:50 +0000 (15:57 -0600)]
last piece of seamless-loop removal
Paul Davis [Fri, 1 Nov 2019 21:56:06 +0000 (15:56 -0600)]
don't send TFSM event LocateDone after a locate-for-loop-end
See comment for explanation
Paul Davis [Fri, 1 Nov 2019 21:48:16 +0000 (15:48 -0600)]
fix logic error with contents of session dialog shown after "Close"
Paul Davis [Fri, 1 Nov 2019 20:04:16 +0000 (14:04 -0600)]
remove seamless looping as an option (it's now the only kind of looping we support)
Paul Davis [Fri, 1 Nov 2019 19:25:18 +0000 (13:25 -0600)]
cut down on DEBUG::Transport noise
Paul Davis [Fri, 1 Nov 2019 19:24:37 +0000 (13:24 -0600)]
if looping, squish DiskReader::playback_sample into loop range
Paul Davis [Fri, 1 Nov 2019 19:24:05 +0000 (13:24 -0600)]
transportFSM: when locating due to end-of-loop, skip declick and do not transition states
Robin Gareus [Fri, 1 Nov 2019 19:43:41 +0000 (20:43 +0100)]
Disable direct master-send on fan-out