fix(ats): название компании раздельно в озвучках (Супер, Сам) + инструкция по генерации и проверке озвучек
This commit is contained in:
parent
1660cced66
commit
f9395d7d05
|
|
@ -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
|
||||||
|
|
@ -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` всех файлов между собой и с ожидаемым.
|
||||||
Loading…
Reference in New Issue