Analyzes a Sound object for common quality issues and returns diagnostic metrics. This function provides basic quality control checks useful for validating recording quality in production pipelines.
Value
A list with the following components:
- max_amplitude
Maximum absolute amplitude in the recording
- is_clipped
Logical: TRUE if amplitude exceeds clipping_threshold
- n_clipping_samples
Number of samples above clipping threshold
- clipping_percentage
Percentage of samples that clip
- mean_intensity_db
Mean intensity in dB
- min_intensity_db
Minimum intensity in dB
- max_intensity_db
Maximum intensity in dB
- intensity_range_db
Dynamic range (max - min intensity)
- rms_amplitude
Root mean square amplitude
- duration
Total duration in seconds
- sampling_frequency
Sampling frequency in Hz
Details
This function is designed to catch common recording problems:
**Clipping Detection**: Identifies if the signal exceeds a threshold (default 0.99). Clipped recordings have distorted peaks and should typically be re-recorded.
**Intensity Analysis**: Uses Praat's intensity measurement to assess signal strength. Very low mean intensity may indicate recording level problems.
**Dynamic Range**: The difference between maximum and minimum intensity can help identify recordings with poor signal-to-noise ratio or excessive compression.
**Quality Criteria** (general guidelines): - No clipping (is_clipped = FALSE) - Mean intensity: -20 to -10 dB for speech - Dynamic range: > 20 dB - Max amplitude: 0.7-0.9 range (good headroom without clipping)
Examples
# \donttest{
sound <- Sound$create_tone(frequency = 220, duration = 0.5, sampling_rate =
16000)
quality <- check_audio_quality(sound)
cat("Audio Quality Report:\n")
#> Audio Quality Report:
cat(" Duration:", quality$duration, "seconds\n")
#> Duration: 0.5 seconds
cat(" Sampling rate:", quality$sampling_frequency, "Hz\n")
#> Sampling rate: 16000 Hz
cat(" Clipped:", quality$is_clipped, "\n")
#> Clipped: FALSE
cat(" Max amplitude:", round(quality$max_amplitude, 3), "\n")
#> Max amplitude: 0.99
cat(" Mean intensity:", round(quality$mean_intensity_db, 1), "dB\n")
#> Mean intensity: 90.9 dB
cat(" Dynamic range:", round(quality$intensity_range_db, 1), "dB\n")
#> Dynamic range: 0 dB
# }