lct-09: звук звонящего на фронте, перебивание, аудио-фон
Очередь AudioBufferSourceNode, а не <audio>: перебивание требует оборвать звук мгновенно и выбросить очередь. Планирование встык по currentTime с упреждением 50 мс — иначе между чанками щелчок. Перебивание двухслойное: фронт гасит звук по громкости микрофона за два кадра (40 мс), сервер подтверждает по VAD за 88–90 мс и присылает tts.cancel. Сервер — авторитет, фронт — скорость. Логика вынесена из WebAudio и проверена в Node: очередь планируется без щелей и наложений, сброс останавливает все чанки, гейт не срабатывает на шуме и ловит начало речи ровно один раз. Нет файла фона — звонок идёт без фона с предупреждением в консоли, а не падает: записи это контент, их кладёт методист. Путь через браузер с живым микрофоном не проверен: шаги записаны в карточке.
This commit is contained in:
parent
456f3cd34d
commit
750ded2991
9 changed files with 402 additions and 98 deletions
17
frontend/public/ambience/README.md
Normal file
17
frontend/public/ambience/README.md
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# Аудио-фон происшествия
|
||||
|
||||
Сюда кладутся зацикленные записи, которые звучат под голосом звонящего: треск огня,
|
||||
детский плач, шум улицы, гудки, сирена. Имя файла указывается в сценарии:
|
||||
|
||||
```yaml
|
||||
background:
|
||||
loop: fire_crackle.mp3
|
||||
gain_db: -18
|
||||
```
|
||||
|
||||
Требования: зацикливается без щелчка на стыке, моно или стерео, mp3 или ogg,
|
||||
10–30 секунд. Гейн задаётся сценарием и должен быть заметно ниже голоса — фон
|
||||
даёт ощущение места, но не мешает разбирать речь.
|
||||
|
||||
Файла нет — занятие идёт без фона: в консоли браузера останется предупреждение,
|
||||
звонок не прервётся.
|
||||
Loading…
Reference in a new issue