# Audio RMS level report

Measure per-channel RMS, sample peak, average level, headroom, DC offset, and clipped samples from pasted audio bytes as JSON, CSV, or a text report.

## Run it

- **CLI:** `gizza tool audio-rms-level-report "UklGR... (paste the whole audio file's base64 or hex here)"`
- **Web:** https://gizza.ai/tools/audio-rms-level-report/
- **Agents:** machine-readable descriptor (parameters JSON Schema) at https://gizza.ai/tools/audio-rms-level-report/tool.json

## Inputs

- `input` — Audio bytes (base64 or hex) _(field)_
- `input_format` — Input encoding _(field)_
- `output` — Output format _(field)_
- `rms_window_ms` — Short RMS window (ms) _(field)_
- `clip_threshold` — Clip threshold (linear full scale) _(field)_

## Output

- Level summary (text)

## Query parameters

Open the tool pre-filled and auto-run via URL:

- `input` — Audio bytes (base64 or hex)
- `input_format` — Input encoding
- `output` — Output format
- `rms_window_ms` — Short RMS window (ms)
- `clip_threshold` — Clip threshold (linear full scale)

Example: `https://gizza.ai/tools/audio-rms-level-report/?input=UklGR...%20%28paste%20the%20whole%20audio%20file%27s%20base64%20or%20hex%20here%29&input_format=base64&output=json&rms_window_ms=50&clip_threshold=0.99`

---

## About this tool

Use this tool when you need a whole-file level check before publishing, normalizing, matching stems, or debugging clipped audio. Paste a WAV, FLAC, MP3, OGG/Vorbis, M4A/MP4, AIFF, CAF, MKV/WebM, or AAC-ADTS file as base64 or hex and it reports each decoded channel plus an overall row.

The JSON summary includes sample rate, channel labels, duration, frame counts, whole-file RMS, sample peak, mean absolute level, short-window RMS peak/trough, crest factor, headroom, DC offset, zero crossings, and clipped-sample counts. Choose CSV for spreadsheets or the text report for a quick terminal-style readout.

### Worked example

For the preset constant half-scale WAV, JSON output includes values like:

```json
{
  "sample_rate": 8000,
  "channels": 1,
  "duration_s": 0.01,
  "per_channel": [
    {"channel": 1, "label": "M", "rms_dbfs": -6.021, "peak_dbfs": -6.021}
  ]
}
```

The same input in CSV mode starts with:

```csv
channel,label,samples,rms_dbfs,peak_dbfs,average_dbfs
1,M,80,-6.021,-6.021,-6.021
```

## Limits and edge cases

- Input must be pasted as base64 or hex file bytes; browser file upload is not used for this pure text surface.
- The decoded input byte cap is 64 MiB and analysis stops after 30,000,000 frames per channel, reporting `truncated: true` if that cap is reached.
- Opus, AC-3, DTS, encrypted media, and video-only files are not decoded by the pure-Rust backend.
- RMS and peak are sample-based dBFS values, not LUFS or inter-sample true peak. Use a loudness-meter tool when broadcast LUFS or true-peak compliance is required.
- The short RMS window controls only the `rms_peak_dbfs` and `rms_trough_dbfs` fields; it does not change whole-file RMS, average, or sample peak.

## FAQ

<details>
<summary>Is RMS the same as LUFS?</summary>

No. RMS is an electrical average of sample energy over the file or a short window. LUFS uses a perceptual weighting and gating model. This report is useful for technical level checks, clipping, headroom, and channel balance; it is not a broadcast loudness compliance meter.

</details>

<details>
<summary>Why does a constant half-scale sample read about -6.021 dBFS?</summary>

dBFS is calculated with `20 * log10(linear_amplitude)`. A linear amplitude of `0.5` is therefore about `-6.021` dBFS. Digital full scale is `0` dBFS, and silence is floored to `-120` dBFS so JSON and CSV stay numeric.

</details>

<details>
<summary>Does the tool downmix stereo before measuring?</summary>

No. Each channel is measured separately and the `overall` row aggregates all samples across all channels. That makes left/right imbalances, channel-specific clipping, and DC offset visible instead of hiding them in a downmix.

</details>

<details>
<summary>Can it detect true peaks between samples?</summary>

No. The `peak_dbfs` field is a sample peak. It does not oversample to estimate inter-sample true peaks. Use a dedicated loudness or true-peak analyzer when delivery specs require dBTP values.

</details>

## Related tools

- [Video audio RMS timeline](https://gizza.ai/tools/video-audio-rms-timeline/): Extract windowed RMS and peak audio levels from a video's audio track into a CSV or JSON time series. Set the window, hop, and dBFS/linear unit.
- [Brick-Wall Audio Limiter](https://gizza.ai/tools/audio-limiter/): Brick-wall limit an audio file so it never clips. Set the ceiling in dBFS plus input gain, attack and release — it all runs in your browser.
- [Detect Clipping in WAV Audio](https://gizza.ai/tools/clipping-detector/): Paste base64 or hex WAV bytes and detect clipped full-scale samples, consecutive clipping runs, timestamps, and worst distorted regions. Runs locally in your browser.
- [Extract MFCC Features from Audio](https://gizza.ai/tools/mfcc-extractor/): Extract MFCC features from audio as CSV, TSV, or JSON. Tune speech defaults, librosa-style settings, deltas, and sample-rate options locally.
- [Speech audio quality checker](https://gizza.ai/tools/speech-audio-quality-checker/): Paste a short WAV clip as base64 or hex and check ASR readiness: sample rate, channels, SNR estimate, clipping, level, and verdict.
