438{
439 const auto samplesCount = data.size();
440 const auto sum256Count = (samplesCount + 255) / 256;
441 const auto sum64kCount = (samplesCount + 65535) / 65536;
442
445
447
448 for (size_t i = 0; i < samplesCount; ++i)
449 {
451
452 blockStats.Min =
std::min(blockStats.Min, value);
453 blockStats.Max = std::max(blockStats.Max, value);
454 blockStats.RMS += value * value;
455
457
458 summary256.Min =
std::min(summary256.Min, value);
459 summary256.Max = std::max(summary256.Max, value);
460 summary256.RMS += value * value;
461
462 auto& summary64k = block.
Summary64k[i / 65536];
463 summary64k.Min =
std::min(summary64k.Min, value);
464 summary64k.Max = std::max(summary64k.Max, value);
465 summary64k.RMS += value * value;
466 }
467
469
470 auto samplesProcessed = 0;
472 {
473 const auto samplesToProcess = std::min<int>(256, samplesCount - samplesProcessed);
474 summary.RMS =
std::sqrt(summary.RMS / samplesToProcess);
475 samplesProcessed += samplesToProcess;
476 }
477
478 samplesProcessed = 0;
480 {
481 const auto samplesToProcess = std::min<int>(65536, samplesCount - samplesProcessed);
482 summary.RMS =
std::sqrt(summary.RMS / samplesToProcess);
483 samplesProcessed += samplesToProcess;
484 }
485 }
float GetFloatValue(float value) noexcept
__finl float_x4 __vecc sqrt(const float_x4 &a)
std::vector< MinMaxRMS > Summary256
std::vector< MinMaxRMS > Summary64k