1044{
1045 if (streams.empty())
1046 return {};
1047
1048 auto numeric_data = Yantra::OperationHelper::extract_numeric_data(streams);
1049
1050 if (is_same_size(numeric_data)) {
1051 size_t channel_length = numeric_data[0].size();
1052 std::vector<double> result(channel_length, 0.0);
1053
1054 for (const auto& span : numeric_data) {
1055 for (size_t i = 0; i < span.size(); ++i) {
1056 result[i] += span[i];
1057 }
1058 }
1059
1060 double gain = 1.0 / static_cast<double>(numeric_data.size());
1062
1063 return result;
1064 } else {
1065 std::vector<std::vector<double>> double_streams;
1066 double_streams.reserve(streams.size());
1067
1068 for (const auto& span : numeric_data) {
1069 double_streams.emplace_back(span.begin(), span.end());
1070 }
1071
1072 return mix(double_streams);
1073 }
1074}
void apply_gain(std::vector< double > &data, double gain_factor)
Apply gain to single-channel data (in-place)
std::vector< double > mix(const std::vector< std::vector< double > > &streams)
Mix multiple data streams with equal weighting.