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

◆ process_overlap_add()

template<typename TransformFunc >
requires std::invocable<TransformFunc, std::span<const double>>
std::vector< double > MayaFlux::Yantra::process_overlap_add ( const std::span< const double > &  data,
uint32_t  window_size,
uint32_t  hop_size,
TransformFunc  transform_func 
)

Overlap-add processing for windowed transforms using C++20 ranges.

Template Parameters
TransformFuncFunction type for transformation
Parameters
dataInput data
window_sizeSize of analysis windows
hop_sizeHop size between windows
transform_funcTransformation function to apply per window
Returns
Processed data

Definition at line 32 of file TemporalHelper.hpp.

36{
37 const size_t num_windows = (data.size() - window_size) / hop_size + 1;
38 std::vector<double> output(data.size(), 0.0);
39
40 std::ranges::for_each(std::views::iota(size_t { 0 }, num_windows), [&](size_t win) {
41 size_t start_idx = win * hop_size;
42 auto window_data = data.subspan(start_idx,
43 std::min(static_cast<size_t>(window_size), data.size() - start_idx));
44
45 auto transformed = transform_func(window_data);
46
47 for (size_t i = 0; i < transformed.size() && start_idx + i < output.size(); ++i) {
48 output[start_idx + i] += transformed[i];
49 }
50 });
51
52 return output;
53}