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

◆ transform_by_energy() [2/2]

template<OperationReadyData DataType, typename TransformFunc >
requires std::invocable<TransformFunc, double>
DataType MayaFlux::Yantra::transform_by_energy ( DataType &  input,
double  energy_threshold,
TransformFunc  transform_func,
uint32_t  window_size = 1024,
uint32_t  hop_size = 512 
)

Energy-based transformation using existing EnergyAnalyzer (IN-PLACE)

Template Parameters
DataTypeOperationReadyData type
TransformFuncFunction type for transformation
Parameters
inputInput data - WILL BE MODIFIED
energy_thresholdEnergy threshold for transformation
transform_funcTransformation function
window_sizeAnalysis window size
hop_sizeHop size between windows
Returns
Transformed data

Definition at line 138 of file MatrixHelper.hpp.

143{
144 auto [target_data, structure_info] = OperationHelper::extract_structured_double(input);
145
146 auto energy_analyzer = std::make_shared<StandardEnergyAnalyzer>(window_size, hop_size);
147 energy_analyzer->set_energy_method(EnergyMethod::RMS);
148 auto energy_result = energy_analyzer->analyze_energy(input);
149
150 for (size_t ch = 0; ch < energy_result.channels.size() && ch < target_data.size(); ++ch) {
151 const auto& channel_energy = energy_result.channels[ch];
152 auto& target_channel = target_data[ch];
153
154 for (size_t i = 0; i < channel_energy.energy_values.size(); ++i) {
155 if (channel_energy.energy_values[i] > energy_threshold && i < channel_energy.window_positions.size()) {
156 auto [start_idx, end_idx] = channel_energy.window_positions[i];
157
158 if (start_idx < target_channel.size() && end_idx <= target_channel.size()) {
159 auto window_span = target_channel.subspan(start_idx, end_idx - start_idx);
160 std::ranges::transform(window_span, window_span.begin(), transform_func);
161 }
162 }
163 }
164 }
165
166 auto reconstructed_data = target_data
167 | std::views::transform([](const auto& span) {
168 return std::vector<double>(span.begin(), span.end());
169 })
170 | std::ranges::to<std::vector>();
171
172 return OperationHelper::reconstruct_from_double<DataType>(reconstructed_data, structure_info);
173}

References MayaFlux::Yantra::OperationHelper::extract_structured_double(), and RMS.

+ Here is the call graph for this function: