Выравнивание громкости перед обработкой
Ключевая находка по записям с микрофоном на столе: без выравнивания тихий дальний участник сливается с громким и разделение разваливается. Замер на трёх разговорах: доля второго участника выросла с 1.8 до 24.3 процента, переключений между репликами - с 21 до 71 процента. Работает только выравнивание: шумоподавление, полосовой фильтр и компандер не дали ничего. Параметры подобраны замером, f=400:g=3 давал 8.6 процента вместо 43.2. На распознавание не влияет - расшифровки фрагментов совпали дословно. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e6e10dddd1
commit
eda6fa143a
@@ -317,3 +317,48 @@ class TestSeparationNeverBreaksJob:
|
||||
result = p.transcribe(tmp_path / "any.wav")
|
||||
assert result["stats"]["separation_quality"] == 0.0
|
||||
assert result["turns"] # расшифровка на месте
|
||||
|
||||
|
||||
class TestNormalization:
|
||||
"""Выравнивание громкости решает исход диаризации на записях с одним микрофоном."""
|
||||
|
||||
def test_filter_applied_by_default(self, tmp_path, monkeypatch):
|
||||
import subprocess
|
||||
|
||||
from app.pipeline import NORMALIZE_FILTER, to_wav16k
|
||||
|
||||
captured = {}
|
||||
monkeypatch.setattr(subprocess, "run",
|
||||
lambda cmd, **kw: captured.setdefault("cmd", cmd))
|
||||
monkeypatch.setattr("wave.open", lambda *a, **k: type(
|
||||
"W", (), {"getnframes": lambda s: 16000, "getframerate": lambda s: 16000,
|
||||
"__enter__": lambda s: s, "__exit__": lambda *a: None})())
|
||||
to_wav16k(tmp_path / "in.mp3", tmp_path / "out.wav", "ffmpeg")
|
||||
assert NORMALIZE_FILTER in captured["cmd"]
|
||||
|
||||
def test_can_be_disabled(self, tmp_path, monkeypatch):
|
||||
import subprocess
|
||||
|
||||
from app.pipeline import NORMALIZE_FILTER, to_wav16k
|
||||
|
||||
captured = {}
|
||||
monkeypatch.setattr(subprocess, "run",
|
||||
lambda cmd, **kw: captured.setdefault("cmd", cmd))
|
||||
monkeypatch.setattr("wave.open", lambda *a, **k: type(
|
||||
"W", (), {"getnframes": lambda s: 16000, "getframerate": lambda s: 16000,
|
||||
"__enter__": lambda s: s, "__exit__": lambda *a: None})())
|
||||
to_wav16k(tmp_path / "in.mp3", tmp_path / "out.wav", "ffmpeg", normalize=False)
|
||||
assert NORMALIZE_FILTER not in captured["cmd"]
|
||||
|
||||
def test_settings_default_to_normalizing(self, tmp_path):
|
||||
from app.config import load_settings
|
||||
|
||||
config = tmp_path / "config.toml"
|
||||
config.write_text('[processing]\nthreads=4\n', encoding="utf-8")
|
||||
assert load_settings(config).normalize is True
|
||||
|
||||
def test_parameters_are_the_measured_ones(self):
|
||||
"""f=400:g=3 давал 8.6 процента вместо 43.2 - параметры менять нельзя наугад."""
|
||||
from app.pipeline import NORMALIZE_FILTER
|
||||
|
||||
assert "f=200" in NORMALIZE_FILTER and "g=5" in NORMALIZE_FILTER
|
||||
|
||||
Reference in New Issue
Block a user