FireRedAudio 同步 A/B 对比 · T8star-Aix
A/B two takes without the silence and volume lying to you
- audio_a
- audio_b
- 同步候选 A
- 同步候选 B
- A/B 对比报告
Comparing two takes by ear sounds easy until you actually do it. Take A starts with half a second of silence and is a touch quiet; take B starts instantly and is a touch loud. Your brain doesn't compare the deliveries - it compares the dead air and the level, and you pick the louder, punchier one almost every time. SynchronizedAB removes that bias: it detects each clip's effective speech onset, aligns them, matches loudness with two-pass EBU R128, and pads both to the same length. What's left is a genuine side-by-side of the performance, not of the formatting. This is the node that makes your A/B judgment actually mean something.
How it works
Both inputs (audio_a, audio_b) get written to WAV and processed non-destructively - nothing touches the sources. Onset detection finds where speech actually starts (threshold onset_threshold_dbfs, default −42 dBFS), synchronize_onset aligns the two starts (with a small preroll_ms of 20 ms of lead-in so you don't chop the first phoneme), match_loudness normalizes both to target_lufs (default −20 LUFS, within −35…−12), and both clips are padded to equal length. Outputs are the two synced clips (同步候选 A, 同步候选 B) plus an A/B 对比报告 JSON recording exactly what was shifted and normalized.
The advanced inputs are the ones to tune if the auto-detection misreads: raise onset_threshold_dbfs if it's treating a breath or room noise as the onset, lower it if the start of the word is being missed. preroll_ms is the guard band so the alignment never cuts into speech.
Where it fits
The pack's 16_synchronized_ab example is the canonical use: two candidate takes → this node → two SaveAudio nodes (or a review board) for the listen. It's the step before the human decides - take two seeds out of SeedAudition, run them through here, and the listen you do afterward is honest. It also generalizes: any two audio candidates you're debating - different reference voices for a character, two editing styles - get the same fair treatment.
Installing and the honest limitation
Pack-wide install (ComfyUI Manager search comfyui-fireredaudio-T8, or clone + python scripts\setup_runtime.py). No model needed - this is pure worker-side audio math (and honestly the closest thing to a "runs before you've downloaded weights" node in the comparison family). The limitation: onset alignment and loudness matching make the fight fair, but they don't make your ears calibrated. This fixes the silence/level confound; it can't fix that you'll still prefer the louder-sounding take if one is more energetic. That's a taste question, and this node is deliberately agnostic about it.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_a | AUDIO | — | |
| audio_b | AUDIO | — | |
| synchronize_onset | BOOLEAN | true | — |
| match_loudness | BOOLEAN | true | — |
| target_lufs | FLOAT | -20.0-35–-12 | — |
| onset_threshold_dbfs | FLOAT | -42-70–-10 | — |
| preroll_ms | INT | 200–500 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| 同步候选 A | AUDIO | — |
| 同步候选 B | AUDIO | — |
| A/B 对比报告 | STRING | — |