MayaFlux 0.1.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 122 of file CoordUtils.cpp.

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

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: