Age | Commit message (Collapse) | Author |
|
This fixes Audio/MIDI alignment when recording normally.
Loop and/or Punch-in recording is still not aligned properly
(both audio and MIDI).
_accumulated_capture_offset is initialized once, accumulated
offsets (rec_nframes) are kept, even when ::check_record_status()
is called multiple times.
|
|
_accumulated_capture_offset is only used for MIDI,
however this is helpful when debugging.
Previously audio kept accumulating the offset indefinitely.
|
|
This reverts commit 254f22e372ff1155e76bea2c9a6f9c6c85a94868.
|
|
When there is no overlap (Evoral::OverlapNone) of local transport
position and the record-range, MIDI data does not need to be
offset.
This matches audio recording: Only write to the capture ringbuffer
when there is an overlap.
(There is still some unknown, unresolved discrepancy remaining
to be tracked down)
|
|
|
|
to_write must not exceed `total = _samples_pending_write`.
If the write succeeds (events spanning `to_write` samples are written)
to_write is atomically subtracted from `_samples_pending_write`.
|
|
|
|
butler (to write to disk)
|
|
boost::shared_ptr<Track> rather than Route
(this the raw pointers used inside SessionEvent)
|
|
... which implies it has no MIDI input port(s) either.
This fixes behaviour caused by BufferSet::get...() returning a valid MidiBuffer because it was
based on using the _available count within the BufferSet, even though the _count value
indicated there was no buffer available (to match the I/O configuration of the Route).
|
|
When I/O port-counts do not change, plugin re-order happens
in sync in the process-thread. ::configure_io() is only called
to ensure that the current configuration is valid.
In case that the ChanCount does not change, the method must
be realtime-safe and not block.
DiskWriter::reset_write_sources() is not realtime-safe and
implicitly causes a session-save:
Write-sources are destroyed and re-created. This includes
a call to write_source->drop_references(), which triggers
ARDOUR::Session::remove_source(), which saves the session.
Furthermore adding/removing plugins will likewise call
::configure_io().
Previously any processor change on a track lead to
saving the session!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This fixes a memory-leak (_midi_buf was allocated in DiskIOProc
but only delete in DiskReader). Also skip midi-refill early on
|
|
This allows to use different types for write and read buffers, in
preparation for a dedicated reader-buffer.
|
|
The processors will becomes responsible to know about loop-positions
and map latency-compensated start_sample, end_sample into the loop-range
as needed.
|
|
* Processor implement get_state(), classes derived from Processor
implement protected ::state() -- as documented in processor.h
* likewise for Route, Track: make ::state() a protected interface
* removal of "full_state", use explicit "template_save"
* use RAII/Unwind to skip saving automation-state
|
|
|
|
gui_feed_buffer is used for DiskWriter -> GUI notifications.
It was wrongly migrated from MidiDiskstream to DiskReader in 7fb6807
|
|
- Fix API call to add region(midi_region) -- set count to "1"
- Forward DataRecorded() signal
- remove botched merge/rebase"
a4a87f56 accidentally brought back code from old-destructive API
which was removed in af103cf3 and 08c13007
There is no per track NonLayered record mode anymore, it's session global.
- set can_record correctly to not accidentally clear last capture sources
for cont'd recording (toggle track's rec-arm)
|
|
|
|
|
|
This API was not used, also superseded by record w/preroll.
|
|
The general goal is to align transport-sample to be the audible frame
and use that as "anchor" for all processing.
transport_sample cannot become negative (00:00:00:00 is the first audible
frame).
Internally transport pre-rolls (read-ahead) before the transport starts
to move. This allows inputs and disk to prefill the pipeline.
When starting to roll, the session counts down a global "remaning preroll"
counter, which is the worst-latency from in-to-out.
Each route in turn will start processing at its own output-latency.
Route::process_output_buffers() - which does the actual processing
incl disk i/o - begins by offsetting the "current sample" by the
route's process-latency and decrements the offset for each latent
processor. At the end of the function the output will be aligned
and match transport-sample - downstream-playback-latency (if any).
PS. This commit is a first step only: transport looping & vari-speed have
not yet been implemented/updated.
|
|
|
|
|
|
|
|
|
|
The DiskWriter uses AlignStyle which is set dynamically
by the Track and may depend on I/O connections.
|
|
"i18n.h" needs to be included last, after types have been defined or
clang bails out:
"call to function 'operator<<' is not visible in the template definition"
|
|
Generated by tools/f2s. Some hand-editing will be required in a few places to fix up comments related to timecode
and video in order to keep the legible
|
|
is needed); split into by-type array to deal with different rate of audio & MIDI i/o
|
|
SerializedRCUManager can't do this by itself
|
|
|
|
|
|
capture_offset appropriately
|
|
manipulations into Track
|
|
|
|
incorrect state(s)
|
|
|
|
|
|
|
|
DiskWriter is a processor and as such has no Input object. This means
that the "Automatic" setting must be handled by the Track, which
does have an Input object to check for port connections to physical
or non-physical sources
|
|
|
|
|