fix(ats): название компании раздельно в озвучках (Супер, Сам) + инструкция по генерации и проверке озвучек

This commit is contained in:
Hermes 2026-09-14 14:27:26 +02:00
parent 1660cced66
commit f9395d7d05
2 changed files with 63 additions and 0 deletions

23
docs/ats/gen-brand-prompts.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/bash
# Финальная перегенерация озвучек с раздельным названием «Супер, Сам».
# Каждый файл синтезируем отдельным вызовом: в цикле Python два файла выходили
# побайтово одинаковыми (артефакт edge-tts), здесь этого не происходит.
set -e
VOICE="fr-FR-VivienneMultilingualNeural"
OUT=/tmp/brand_final
mkdir -p "$OUT"
gen () { # $1 = имя файла, $2 = текст
edge-tts --voice "$VOICE" --text "$2" --write-media "$OUT/$1.mp3" >/dev/null 2>&1
ffmpeg -v error -y -i "$OUT/$1.mp3" -ar 8000 -ac 1 -c:a pcm_s16le "$OUT/$1.wav"
rm -f "$OUT/$1.mp3"
dur=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$OUT/$1.wav")
printf "%s %.2f с %s байт\n" "$1" "$dur" "$(stat -c%s "$OUT/$1.wav")"
}
gen ss_pkp_intro "Здравствуйте! Это Супер, Сам. Ваш заказ готов к выдаче. Выберите день самовывоза."
gen ss_c_intro_dlv "Здравствуйте! Это Супер, Сам. Ваша доставка запланирована на"
gen ss_c_intro_pkp "Здравствуйте! Это Супер, Сам. Ваш самовывоз запланирован на"
echo "--- контрольные суммы (должны быть разными) ---"
md5sum "$OUT"/*.wav

View File

@ -0,0 +1,40 @@
# Озвучки робота: генерация и правки
Все реплики робота — edge-tts, голос **`fr-FR-VivienneMultilingualNeural`**, формат
8 кГц / моно / 16 бит PCM WAV. Лежат на АТС в `/var/lib/asterisk/sounds/ru/` (`ss_*.wav`),
имя файла = имя реплики в `ss-dialog.agi`.
```bash
edge-tts --voice fr-FR-VivienneMultilingualNeural --text "<текст>" --write-media out.mp3
ffmpeg -v error -y -i out.mp3 -ar 8000 -ac 1 -c:a pcm_s16le out.wav
```
Деплой (всегда с бэкапом — был случай, когда файл на АТС обнулился):
`scp` в `/tmp` на АТС → `test -s` → `cp` в `/var/lib/asterisk/sounds/ru/` →
`chown asterisk:asterisk` + `chmod 644` → сверить `md5sum` с локальным.
## Название компании — только раздельно
Владелец попросил, чтобы «СуперСам» звучало раздельно. Проверено синтезом (пауза внутри названия):
| Текст в подсказке | Длительность «Супер, Сам» | Пауза |
|---|---|---|
| `СуперСам` | одинаково с «Супер Сам» | нет |
| `Супер Сам` | +24 мс | почти не слышно |
| **`Супер, Сам`** | **+0,45 с** | **слышно отчётливо — используем** |
| `Супер... Сам` | +0,7 с | звучит неестественно |
Речь в подсказке: `Здравствуйте! Это Супер, Сам. <дальше по сценарию>`.
Файлы с названием компании: `ss_pkp_intro`, `ss_c_intro_dlv`, `ss_c_intro_pkp`
(в сценариях A и B компания не представляется).
## Проверка правки
- **Текст** — распознать свой wav (`faster_whisper`, `small`, `language="ru"`): вернёт то, что
услышит человек. Whisper пишет название одним словом («Суперсан») даже при раздельном
произношении — по нему судить о паузе нельзя.
- **Пауза внутри названия** — по энергии сигнала (RMS по кадрам 10 мс, порог −32 дБ от пика):
у правильной версии появляется провал ≥ 0,3 с в районе названия, у старой его нет.
- ⚠️ Генерировать файлы по одному в отдельных вызовах `edge-tts`: в цикле внутри Python два
разных текста один раз вышли побайтово одинаковыми (артефакт), поэтому перед деплоем
сверять `md5sum` всех файлов между собой и с ожидаемым.