MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ wrap_position_with_loop()

std::vector< uint64_t > MayaFlux::Kakshya::wrap_position_with_loop ( const std::vector< uint64_t > &  position,
const Region loop_region,
bool  looping_enabled 
)

Wrap a position within loop boundaries if looping is enabled.

Parameters
positionCurrent position.
loop_startLoop start position.
loop_endLoop end position.
looping_enabledWhether looping is enabled.
Returns
Wrapped position.

Definition at line 126 of file CoordUtils.cpp.

130{
131 if (!looping_enabled || loop_region.start_coordinates.size() < 2 || loop_region.end_coordinates.size() < 2) {
132 return positions;
133 }
134
135 uint64_t loop_start_frame = loop_region.start_coordinates[0];
136 uint64_t loop_start_channel = loop_region.start_coordinates[1];
137 uint64_t loop_end_frame = loop_region.end_coordinates[0];
138 uint64_t loop_end_channel = loop_region.end_coordinates[1];
139
140 if (loop_end_frame <= loop_start_frame) {
141 return positions;
142 }
143
144 std::vector<uint64_t> wrapped_positions = positions;
145 uint64_t loop_length = loop_end_frame - loop_start_frame + 1;
146
147 for (size_t ch = loop_start_channel; ch <= loop_end_channel && ch < positions.size(); ++ch) {
148 if (positions[ch] > loop_end_frame) {
149 uint64_t overflow = positions[ch] - loop_end_frame;
150 wrapped_positions[ch] = loop_start_frame + (overflow % loop_length);
151 }
152 }
153
154 return wrapped_positions;
155}
std::vector< uint64_t > end_coordinates
Ending frame index (inclusive)
Definition Region.hpp:78
std::vector< uint64_t > start_coordinates
Starting frame index (inclusive)
Definition Region.hpp:75

References MayaFlux::Kakshya::Region::end_coordinates, and MayaFlux::Kakshya::Region::start_coordinates.

Referenced by MayaFlux::Kakshya::SoundStreamContainer::set_read_position().

+ Here is the caller graph for this function: