Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
audio_metrics.hpp
Go to the documentation of this file.
1#pragma once
2
16
17#include <pulp/audio/buffer.hpp>
18
19#include <cstdint>
20#include <span>
21#include <string>
22#include <vector>
23
24namespace pulp::test::audio {
25
29inline constexpr double kSilenceFloorDb = -200.0;
30
32double to_dbfs(double linear);
33
35double from_dbfs(double dbfs);
36
41 float clip_threshold = 1.0f;
44 float silence_threshold = 3.1623e-5f;
45};
46
49 double peak = 0.0;
50 double rms = 0.0;
51 double dc_offset = 0.0;
52 std::uint64_t nan_samples = 0;
53 std::uint64_t inf_samples = 0;
54 std::uint64_t clipped_samples = 0;
55 std::uint64_t longest_silence_run = 0;
56
57 double peak_dbfs() const { return to_dbfs(peak); }
58 double rms_dbfs() const { return to_dbfs(rms); }
59};
60
63 int num_channels = 0;
64 int num_frames = 0;
65 double sample_rate = 0.0;
66 std::vector<ChannelMetrics> channels;
67
68 bool has_nan_or_inf() const;
70 double max_peak() const;
72 double max_rms() const;
73 std::uint64_t total_clipped_samples() const;
74};
75
78 double sample_rate,
79 const AnalyzeOptions& options = {});
80
83 double sample_rate,
84 const AnalyzeOptions& options = {});
85
88 double hz = 0.0;
89 double confidence = 0.0;
90};
91
102FrequencyEstimate estimate_frequency(std::span<const float> samples,
103 double sample_rate);
104
107std::string summarize(const BufferMetrics& metrics,
108 const FrequencyEstimate& frequency = {});
109
110} // namespace pulp::test::audio
Non-owning view over multi-channel audio sample data.
Definition buffer.hpp:30
Owning multi-channel audio buffer with contiguous storage.
Definition buffer.hpp:119
Definition audio_artifacts.hpp:20
BufferMetrics analyze(const pulp::audio::BufferView< const float > &buffer, double sample_rate, const AnalyzeOptions &options={})
Analyze a const view. Pure arithmetic; safe for any buffer size.
FrequencyEstimate estimate_frequency(std::span< const float > samples, double sample_rate)
Estimate the dominant frequency of one channel.
double from_dbfs(double dbfs)
dBFS to linear amplitude.
std::string summarize(const BufferMetrics &metrics, const FrequencyEstimate &frequency={})
Compact, agent-readable signal summary.
double to_dbfs(double linear)
Linear amplitude (1.0 == full scale) to dBFS, clamped to kSilenceFloorDb.
constexpr double kSilenceFloorDb
Floor used when converting a zero/negative linear level to dBFS, so summaries and messages stay finit...
Definition audio_metrics.hpp:29
Options for analyze().
Definition audio_metrics.hpp:39
float silence_threshold
|sample| < this linear level counts toward a silence run (default −90 dBFS: below 16-bit dither,...
Definition audio_metrics.hpp:44
float clip_threshold
|sample| >= this linear level counts as clipped (1.0 == 0 dBFS).
Definition audio_metrics.hpp:41
Whole-buffer facts. channels.size() == channel count.
Definition audio_metrics.hpp:62
double max_rms() const
Max per-channel RMS, linear.
int num_channels
Definition audio_metrics.hpp:63
int num_frames
Definition audio_metrics.hpp:64
std::uint64_t total_clipped_samples() const
double max_peak() const
Max per-channel peak, linear.
std::vector< ChannelMetrics > channels
Definition audio_metrics.hpp:66
double sample_rate
Definition audio_metrics.hpp:65
Per-channel facts about a rendered buffer.
Definition audio_metrics.hpp:48
double peak
Max |sample|, linear.
Definition audio_metrics.hpp:49
std::uint64_t nan_samples
Count of NaN samples.
Definition audio_metrics.hpp:52
double rms
Root mean square, linear.
Definition audio_metrics.hpp:50
double peak_dbfs() const
Definition audio_metrics.hpp:57
std::uint64_t inf_samples
Count of ±Inf samples.
Definition audio_metrics.hpp:53
std::uint64_t clipped_samples
Count at/above clip threshold.
Definition audio_metrics.hpp:54
double dc_offset
Mean sample value.
Definition audio_metrics.hpp:51
double rms_dbfs() const
Definition audio_metrics.hpp:58
std::uint64_t longest_silence_run
Longest consecutive sub-threshold run.
Definition audio_metrics.hpp:55
Result of estimate_frequency().
Definition audio_metrics.hpp:87
double hz
0.0 when no estimate is possible.
Definition audio_metrics.hpp:88
double confidence
1.0 = perfectly regular periods, 0.0 = none.
Definition audio_metrics.hpp:89