How a compensated read window resolves against an enabled loop. More...
#include <event_compensation.hpp>
Public Attributes | |
| std::array< CompensatedReadSegment, 2 > | segments {} |
| std::uint8_t | segment_count = 0 |
| bool | wraps_inside_range = false |
| True when the loop point falls INSIDE this window. | |
How a compensated read window resolves against an enabled loop.
Reading ahead near a loop end wants the content from AFTER the wrap. An event at document position loop_end + n never sounds in this pass, while the one at loop_start + n is exactly what is heard when the window's frames reach the device a shift later. The window is therefore folded back around the loop point rather than read past it, which splits it into at most two runs — at most, because the transport refuses a loop shorter than one maximum block, so a window spans the loop point once and never twice.
| std::uint8_t pulp::playback::CompensatedReadPlan::segment_count = 0 |
| std::array<CompensatedReadSegment, 2> pulp::playback::CompensatedReadPlan::segments {} |
| bool pulp::playback::CompensatedReadPlan::wraps_inside_range = false |
True when the loop point falls INSIDE this window.
The event stream wraps there, ahead of the transport's own wrap, so whatever the earlier pass left sounding is released at segments[1].range_offset and the transport's later discontinuity must not release it a second time.