You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ADN-DMR-Peer-Server/docs/en/server/user-guide/voice-and-tts.md

78 lines
4.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Voice, announcements, and TTS
> **Scheduled announcements and TTS are a plugin** — `plugins/voice-announcements/`, enabled by default. Configuration is unchanged (this file); the plugin follows it every 15 s and the server grants it exactly the talkgroups and DMR IDs its items use (override with `PLUGINS.send.voice-announcements`, see [Plugins](plugins.md#sending-unit-data-and-group-voice-opt-in)). Voice ident, on-demand 999x and disconnected prompts stay in the core.
## Configuration files
- **`adn-voice.yaml`** (optional, not committed) — merged into `config["VOICE"]`.
- Hot reload on file **mtime** (~15 s loop).
Template: `adn-voice.example.yaml`.
## Server voice identity (configurable `DMR_ID`)
All **server-originated** voice uses a configurable **DMR ID** in `adn-voice.yaml`:
```yaml
VOICE:
DMR_ID: 1000001 # optional; default 1000001
TTS_ANNOUNCEMENTS:
- ENABLED: true
FILE: texto1
TG: 730500
DMR_ID: 3109898 # optional; inherits VOICE.DMR_ID when omitted
```
- **`VOICE.DMR_ID`** — default RF source. **Optional** — existing `adn-voice.yaml` files need no change.
- **Per-item `DMR_ID`** — override on each `ANNOUNCEMENTS` / `TTS_ANNOUNCEMENTS` row. Also optional.
- **Callsign** — resolved from the subscriber DB (`users` / `SUB_MAP`) for that DMR ID; not in voice config.
Applies to:
- Scheduled **ANNOUNCEMENTS** and **TTS_ANNOUNCEMENTS** (destination = the **`TG`** field in each item).
- **On-demand** clips triggered by dialling **9991–9999** (playback uses destination **TG 9** on **TS2**; you still key **999x** to request the file).
- **Disconnected / reflector** voice lines (same: **TG 9** / **TS2**).
See [TG 9 — local service lane](special-numbers.md#tg-9-local-service-lane-prompts-and-bridge-plumbing) for why TG 9 is used and what must be enabled on the hotspot.
- **Voice ident** (destination **all-call** or **`OVERRIDE_IDENT_TG`**).
See [Special numbers — server voice source ID](special-numbers.md#server-voice-source-id-configurable) for the full table.
## Features
| Feature | Description |
|---------|-------------|
| **Scheduled announcements** | AMBE phrases from `Audio/<lang>/ondemand/` on a schedule (hourly / interval). |
| **TTS announcements** | Text → gTTS → MP3 → ffmpeg → WAV → vocoder → AMBE (see pipeline below). |
| **Voice ident** | Periodic identification (optional); uses `VOICE_IDENT` in main server config and `OVERRIDE_IDENT_TG` / all-call. |
| **Recording** | When enabled, records AMBE to disk for traffic on **`RECORDING_TG`** / **`RECORDING_TIMESLOT`** (see template `adn-voice.example.yaml`). |
| **On-demand (9991–9999)** | See [Special numbers](special-numbers.md). |
## TTS pipeline (summary)
1. Source text in `.txt` under `Audio/<language>/ondemand/`.
2. **gTTS** produces **MP3**.
3. **ffmpeg** converts to **WAV**.
4. Vocoder command or **AMBEServer** produces **AMBE** for transmission.
**ffmpeg** must be installed on the host OS.
Configure **`TTS_VOCODER_CMD`** or **`TTS_AMBESERVER_HOST`** / **`TTS_AMBESERVER_PORT`** in `adn-voice.yaml` for encoding; see comments in `adn-voice.example.yaml`.
## Anti-collision (QSO) with announcements
When scheduling announcements, the server may **wait** if target slots are busy, **drop** targets if a live QSO appears mid-stream, and only mark **hourly** announcement state after a successful target list — this avoids clobbering live traffic.
The plugin sends each frame through `send_dmrd`, which the core injects as a **synthetic hotspot PTT** on `PROXY.TARGET_SYSTEM` (the same MASTER used by the integrated proxy). Routing fans out to bridged hotspots and OPENBRIDGE legs; local peers on that MASTER still receive frames via `send_system`. While it plays, the stream holds that MASTER slot; a radio taking the slot stops it.
## Broadcast queue
Parallel **broadcasts** on **different** TGs may run concurrently; **same-TG** broadcasts are **serialised** so one announcement completes before another on that TG.
## See also
- [Configuration](configuration.md) — voice file paths.
- [Echo](echo.md) — separate playback service.
- [Special numbers](special-numbers.md) — 5000, 999x, recording-related behaviour.

Powered by TurnKey Linux.