Audacity 3.2.0
Classes | Functions
audacity::cloud::audiocom::sync::anonymous_namespace{WavPackCompressor.cpp} Namespace Reference

Classes

struct  Exporter
 
struct  Importer
 

Functions

float GetFloatValue (int16_t value) noexcept
 
float GetFloatValue (int32_t value) noexcept
 
float GetFloatValue (float value) noexcept
 
template<typename T >
void UpdateRMS (DecompressedBlock &block, const std::vector< T > &data)
 

Function Documentation

◆ GetFloatValue() [1/3]

float audacity::cloud::audiocom::sync::anonymous_namespace{WavPackCompressor.cpp}::GetFloatValue ( float  value)
noexcept

Definition at line 431 of file WavPackCompressor.cpp.

432{
433 return value;
434}

Referenced by UpdateRMS().

Here is the caller graph for this function:

◆ GetFloatValue() [2/3]

float audacity::cloud::audiocom::sync::anonymous_namespace{WavPackCompressor.cpp}::GetFloatValue ( int16_t  value)
noexcept

Definition at line 421 of file WavPackCompressor.cpp.

422{
423 return static_cast<float>(value) / std::numeric_limits<int16_t>::max();
424}

◆ GetFloatValue() [3/3]

float audacity::cloud::audiocom::sync::anonymous_namespace{WavPackCompressor.cpp}::GetFloatValue ( int32_t  value)
noexcept

Definition at line 426 of file WavPackCompressor.cpp.

427{
428 return static_cast<float>(value) / ((1 << 23) - 1);
429}

◆ UpdateRMS()

template<typename T >
void audacity::cloud::audiocom::sync::anonymous_namespace{WavPackCompressor.cpp}::UpdateRMS ( DecompressedBlock block,
const std::vector< T > &  data 
)

Definition at line 437 of file WavPackCompressor.cpp.

438{
439 const auto samplesCount = data.size();
440 const auto sum256Count = (samplesCount + 255) / 256;
441 const auto sum64kCount = (samplesCount + 65535) / 65536;
442
443 block.Summary256.resize(sum256Count);
444 block.Summary64k.resize(sum64kCount);
445
446 auto& blockStats = block.BlockMinMaxRMS;
447
448 for (size_t i = 0; i < samplesCount; ++i)
449 {
450 const auto value = GetFloatValue(data[i]);
451
452 blockStats.Min = std::min(blockStats.Min, value);
453 blockStats.Max = std::max(blockStats.Max, value);
454 blockStats.RMS += value * value;
455
456 auto& summary256 = block.Summary256[i / 256];
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
468 block.BlockMinMaxRMS.RMS = std::sqrt(block.BlockMinMaxRMS.RMS / samplesCount);
469
470 auto samplesProcessed = 0;
471 for (auto& summary : block.Summary256)
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;
479 for (auto& summary : block.Summary64k)
480 {
481 const auto samplesToProcess = std::min<int>(65536, samplesCount - samplesProcessed);
482 summary.RMS = std::sqrt(summary.RMS / samplesToProcess);
483 samplesProcessed += samplesToProcess;
484 }
485 }
int min(int a, int b)
__finl float_x4 __vecc sqrt(const float_x4 &a)

References audacity::cloud::audiocom::sync::DecompressedBlock::BlockMinMaxRMS, GetFloatValue(), min(), audacity::cloud::audiocom::sync::MinMaxRMS::RMS, staffpad::audio::simd::sqrt(), audacity::cloud::audiocom::sync::DecompressedBlock::Summary256, and audacity::cloud::audiocom::sync::DecompressedBlock::Summary64k.

Referenced by audacity::cloud::audiocom::sync::DecompressBlock().

Here is the call graph for this function:
Here is the caller graph for this function: