11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
18PROMEKI_NAMESPACE_BEGIN
46 static AudioLevel fromDbfs(
double dbfs) {
return AudioLevel(dbfs); }
53 static AudioLevel fromLinear(
double linear) {
54 if (linear <= 0.0)
return AudioLevel(-std::numeric_limits<double>::infinity());
55 return AudioLevel(20.0 * std::log10(linear));
59 AudioLevel() : _dbfs(-std::numeric_limits<double>::infinity()) {}
65 explicit AudioLevel(
double dbfs) : _dbfs(dbfs) {}
68 double dbfs()
const {
return _dbfs; }
74 double toLinear()
const {
75 if (std::isinf(_dbfs) && _dbfs < 0)
return 0.0;
76 return std::pow(10.0, _dbfs / 20.0);
83 float toLinearFloat()
const {
return static_cast<float>(toLinear()); }
86 bool isSilence()
const {
return std::isinf(_dbfs) && _dbfs < 0; }
89 bool isClipping()
const {
return _dbfs > 0.0; }
95 String toString()
const;
98 bool operator==(
const AudioLevel &rhs)
const {
return _dbfs == rhs._dbfs; }
100 bool operator!=(
const AudioLevel &rhs)
const {
return _dbfs != rhs._dbfs; }
102 bool operator<(
const AudioLevel &rhs)
const {
return _dbfs < rhs._dbfs; }
104 bool operator>(
const AudioLevel &rhs)
const {
return _dbfs > rhs._dbfs; }
106 bool operator<=(
const AudioLevel &rhs)
const {
return _dbfs <= rhs._dbfs; }
108 bool operator>=(
const AudioLevel &rhs)
const {
return _dbfs >= rhs._dbfs; }
116PROMEKI_FORMAT_VIA_TOSTRING(promeki::AudioLevel);