104 size_t write(
const uint8_t* data,
size_t len)
override {
210 snprintf(msg,
sizeof(msg),
211 "Quality: clicks=%lu, dropouts=%lu, clipping=%lu, samples=%lu",
219 void analyze(
const uint8_t* data,
size_t len) {
220 if (data ==
nullptr || len == 0)
return;
223 analyzeT<int8_t>(data, len);
226 analyzeT<int16_t>(data, len);
229 analyzeT<int24_t>(data, len);
232 analyzeT<int32_t>(data, len);
235 LOGE(
"QualityAnalysisStream: unsupported bits_per_sample %d",
242 template <
typename T>
243 void analyzeT(
const uint8_t* buffer,
size_t size) {
244 T* samples = (T*)buffer;
245 int count = size /
sizeof(T);
251 for (
int i = 0; i < count; i++) {
252 float val =
static_cast<float>(
static_cast<int>(samples[i]));
253 float abs_val = val < 0 ? -val : val;
254 int ch = i % channels;
261 if (delta < 0) delta = -delta;
262 if (delta > abs_click) {
270 if (abs_val <= abs_silence) {
284 if (abs_val >= abs_clip) {
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define DEFAULT_BUFFER_SIZE
Definition avr.h:20
virtual int availableForWrite()
Definition Arduino.h:128
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120
virtual size_t readBytes(uint8_t *data, size_t len)
Definition Arduino.h:140
virtual int available()
Definition Arduino.h:139
QualityIssue
Quality issues detected by QualityAnalysisStream.
Definition QualityAnalysisStream.h:11