* Update adn.cfg
* Update replit.md
* Update config.py
* Update bridge_master.py
* Fix: corregir indentacion en llamada a _handleRecording linea 2846
* Mover configuracion de locuciones y grabaciones a voice.cfg
* Nuevo archivo voice.cfg con configuracion de locuciones y grabaciones
* Cargar locuciones/grabaciones desde voice.cfg (opcional, con fallback a defaults)
* Actualizar documentacion: voice.cfg separado de adn.cfg
* Agregar configuracion TTS (4 slots) en voice.cfg
* Leer configuracion TTS desde voice.cfg
* Nuevo modulo TTS: texto -> gTTS -> WAV -> vocoder -> AMBE
* Agregar gTTS a dependencias
* Integrar sistema TTS con scheduling y playback
* Agregar configuracion AMBEServer (DV3000 remoto via UDP) en voice.cfg
* Leer configuracion TTS_AMBESERVER_HOST/PORT desde voice.cfg
* Agregar cliente AMBEServer UDP (protocolo DV3000) para codificacion AMBE
* Fix: apply DMR 3-way interleave to AMBE frames from DV3000
DV3000 outputs raw 72-bit AMBE+2 frames but DMR voice bursts
require 3 frames interleaved into 216-bit payloads.
Interleave: burst_payload[i*3+j] = frame[j].bit[i] (ETSI TS 102 361-1)
Also uses proper AMBE silence frame for padding incomplete triplets.
* Fix: use RATET 33 (DMR AMBE+2) instead of RATEP (D-Star)
The DV3000 was being configured with RATEP parameters that correspond
to D-Star AMBE codec, not DMR AMBE+2. G4KLX AMBETools uses RATET 33
(rate table entry 33) for DMR which selects the correct codec.
Also removed incorrect interleaving - DMR voice bursts use raw AMBE
frames without additional interleaving (confirmed by G4KLX wav2ambe).
* Add reload_voice_config() for hot-reload of voice.cfg
* Hot-reload voice.cfg: auto-detect changes every 15s without restart
Checks voice.cfg mtime every 15 seconds. When changed, reloads all
voice/TTS config, stops old LoopingCall tasks and starts new ones
with updated settings. No server restart needed.
* Fix: resolve AMBEServer host explicitly, strip whitespace/quotes
Adds socket.gethostbyname() to resolve DNS or validate IP before
using it in sendto(). Also strips whitespace and quotes from host
value to prevent hidden characters from config parsing.
* Change default TG from 214 to 2 in voice.cfg
* Improve playFileOnRequest: add file existence check, better logging, catch all exceptions
* Filter announcements by TG: only send to peers active on matching talkgroup
* Filter announcements/TTS by active BRIDGES: only send to systems with static or active dynamic TG
* Add TTS_VOLUME parameter (tts_engine.py): adjustable dB volume for TTS audio
* Add TTS_VOLUME parameter (config.py): adjustable dB volume for TTS audio
* Add TTS_VOLUME parameter (config/voice.cfg): adjustable dB volume for TTS audio
* Run TTS conversion (gTTS+ffmpeg+AMBEServer) in separate thread via deferToThread to avoid blocking reactor
* TTS dual-slot: send announcements on both TS1 and TS2 based on active BRIDGES per system
* Remove TTS_ANNOUNCEMENT*_TIMESLOT: TS now auto-detected from BRIDGES (config.py)
* Remove TTS_ANNOUNCEMENT*_TIMESLOT: TS now auto-detected from BRIDGES (config/voice.cfg)
* Remove TTS_ANNOUNCEMENT*_TIMESLOT: TS now auto-detected from BRIDGES (bridge_master.py)
* Announcements dual-slot: auto-detect TS from BRIDGES, remove ANNOUNCEMENT*_TIMESLOT (bridge_master.py)
* Announcements dual-slot: auto-detect TS from BRIDGES, remove ANNOUNCEMENT*_TIMESLOT (config.py)
* Announcements dual-slot: auto-detect TS from BRIDGES, remove ANNOUNCEMENT*_TIMESLOT (config/voice.cfg)
* Fix on-demand playback timing drift: use absolute timing instead of sleep(0.058) to prevent audio cuts on long files
* Add broadcast queue: prevent simultaneous announcements causing audio micro-cuts. All announcements (AMBE + TTS) now queue sequentially with 1.5s gap between them.
* Fix frame interval: 54ms->60ms (DMR standard) + absolute timing on all voice functions to eliminate micro-cuts
* Adjust frame interval: 60ms->58ms for optimal playback speed on all voice functions
* Remove noisy ROUTER debug logs that block reactor and cause voice micro-cuts: eliminate hundreds of 'no change'/'NO ACTION' debug lines per cycle
* Move rule_timer_loop, statTrimmer, kaReporting to background threads to prevent reactor blocking during voice broadcasts - all logs preserved
* Fix RuntimeError: dictionary changed size during iteration - use list(BRIDGES) for thread-safe iteration in all functions that access BRIDGES
* Revert bridge_master.py to state of commit ce9e9b09e0
* Skip rule_timer_loop during active voice traffic to prevent GIL contention micro-cuts - all logs preserved
* Batch ROUTER debug logs into single write to reduce GIL contention during voice traffic - all log content preserved
* Add TTS_SPEED config for speech rate control (atempo filter in ffmpeg)
* Add TTS_SPEED config for speech rate control (atempo filter in ffmpeg)
* Add TTS_SPEED config for speech rate control (atempo filter in ffmpeg)
Also, remove the obsolete protocol versions 2 and 3
and some further tidying up.
Squashed commit of the following:
commit 7b13b9f046
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 19:01:33 2023 +0000
SERVER_ID is bytes!
commit cee3bc76fb
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 18:50:06 2023 +0000
frog
commit 82432b9c2c
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 18:49:53 2023 +0000
fred
commit 6601573c7f
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 18:39:08 2023 +0000
Stringly
commit 28fa37f828
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 18:30:37 2023 +0000
self
commit 3e6d28d4dd
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 18:23:42 2023 +0000
Fix trace
commit a15901dc79
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 18:21:30 2023 +0000
Tweak config file used in install script
commit 654ec135ca
Merge: f75ff26d4e3922
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 17:48:22 2023 +0000
Merge branch 'master' into testing
commit f75ff26cfa
Merge: c0b521648339d3
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 17:46:07 2023 +0000
Merge branch 'master' into testing
commit c0b5216e5a
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 11:04:45 2023 +0000
more config work
commit c79ce0551d
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 00:54:56 2023 +0000
ib
commit 294a09c8f1
Author: Simon <simon@gb7fr.org.uk>
Date: Sun Jan 29 00:50:36 2023 +0000
Enable minimal config and tidy up global ACL
commit d1dc58d46f
Author: Simon <simon@gb7fr.org.uk>
Date: Sat Jan 28 23:12:41 2023 +0000
Deprecate protocol versions 2 and 3
new config directive:
under [ALIAS]
TOPO_FILE: topography.json
A JSON file is output showing all of the SERVER_IDs seen, at the top level, and where they are bridged to.
Example:
{
"2341" : { #Top-level server ID seen
"7301" : { #Is bridged with server 7301
"hops" : 2, #Hops it took for the topography packet to reach us
"time" : 1660047369.11104, #Timestamp on which the packet was received
"ver" : 5, #Version of FBP this bridge speaks
"uid" : 1820181884 #Unique ID to identify the topography packet. Mostly so we don't duplicate.
}
}
Squashed commit of the following:
commit 950f3e1c3e
Author: Simon <simon@gb7fr.org.uk>
Date: Tue Aug 9 13:16:40 2022 +0100
Topo ready for merge
commit 4dc9f817a7
Author: Simon <simon@gb7fr.org.uk>
Date: Tue Aug 9 02:01:08 2022 +0100
Fix trimmer
commit 48c520c863
Author: Simon <simon@gb7fr.org.uk>
Date: Mon Aug 8 01:35:43 2022 +0100
Think this may be ready :)
commit 8a860bb382
Author: Simon <simon@gb7fr.org.uk>
Date: Mon Aug 8 00:29:14 2022 +0100
Fix back to operational params
commit 3657760112
Author: Simon <simon@gb7fr.org.uk>
Date: Mon Aug 8 00:18:18 2022 +0100
UID typo
commit 047b1df5a4
Author: Simon <simon@gb7fr.org.uk>
Date: Mon Aug 8 00:17:12 2022 +0100
Fix BCTO
commit dfe21bfaa3
Author: Simon <simon@gb7fr.org.uk>
Date: Mon Aug 8 00:12:48 2022 +0100
Testing with 10 sec
commit 8431b4dcf6
Author: Simon <simon@gb7fr.org.uk>
Date: Fri Aug 5 00:10:28 2022 +0100
Use UID in BCTO
commit 620a9818bf
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Aug 4 02:38:59 2022 +0100
dfkldlk
commit 1f92e1b784
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Aug 4 02:16:48 2022 +0100
retrans with correct passphrase
commit 445ae4474c
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Aug 4 01:47:01 2022 +0100
Retransmit to right systems!
commit ba0da271a2
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Aug 4 01:08:56 2022 +0100
my hops
commit 80e42f7837
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Aug 4 00:51:47 2022 +0100
dfdf
commit 0991670323
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Aug 4 00:49:10 2022 +0100
fkjkj
commit 275306af50
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Aug 4 00:48:12 2022 +0100
f
commit c9cb71accd
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Aug 4 00:47:10 2022 +0100
hoppy
commit d01019fa61
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Aug 4 00:23:39 2022 +0100
bctony
commit f3de53d47b
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Aug 4 00:04:50 2022 +0100
fklflk
commit 752b8407a8
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:59:17 2022 +0100
lkflkk
commit dd92b059ee
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:58:14 2022 +0100
dlfklk
commit 220d5bc6bb
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:57:25 2022 +0100
dlkfdlkf
commit d9e46764c1
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:49:52 2022 +0100
dflklxk
commit 9aba9d2fdc
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:48:06 2022 +0100
;fl;sl
commit 0d2d6fc5ea
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:46:20 2022 +0100
lskdlk
commit aad811c080
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:39:59 2022 +0100
flklk
commit a531b5f2b8
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:39:00 2022 +0100
hoppy
commit 648bd3d77c
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:37:27 2022 +0100
slfkdlsk
commit 32f7037973
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:35:55 2022 +0100
dflkldk
commit e1e58321c1
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:33:49 2022 +0100
djklk
commit f7985a6119
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:32:59 2022 +0100
f f
commit dfcf4184f4
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:31:58 2022 +0100
fix fix
commit dd76e6ce4e
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:30:35 2022 +0100
fix hmac
commit 5306f36675
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:28:40 2022 +0100
10 sec test
commit 549f8245e6
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:23:54 2022 +0100
packet
commit 011db46f47
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Aug 3 23:10:44 2022 +0100
Lets test the TOPO!
commit d1cee872e5
Author: Simon <simon@gb7fr.org.uk>
Date: Tue Aug 2 00:47:15 2022 +0100
Topo first pass
You should add this to [GLOBAL]:
VALIDATE_SERVER_IDS: True
Please set to True if you are part of FreeDMR network.
If you are standalone or private network, You can set it to False if you want.
Add this to freedmr.cfg [ALIASES]
SERVER_ID_URL: http://downloads.freedmr.uk/downloads/FreeDMR_Hosts.csv
SERVER_ID_FILE: freedmr_hosts.tsv
Also, if you run docker, you may need to map the file outside:
touch /etc/freedmr/json/freedmr_hosts.tsv
chown 54000:54000 /etc/freedmr/json/freedmr_hosts.tsv
then in docker-compose.yml:
- '/etc/freedmr/json/server_ids.tsv:/opt/freedmr/server_ids.tsv'
Also, check peridically (STALE_TIME setting) for new files.
New config option:
ALLOW_UNREG_ID=[True|False] - in MASTER definition
Squashed commit of the following:
commit 082fd63b96c272415a01d5dadc8d38bf0842737d
Author: Simon <simon@gb7fr.org.uk>
Date: Sat Feb 26 01:40:11 2022 +0000
Periodic download of alias files
commit cb33388509978686ee6bfc19cddb863379872c7b
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Feb 24 00:17:38 2022 +0000
server check id
commit 5428503e17ae32234a58c997037e70abe2a784c7
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Feb 24 00:16:46 2022 +0000
server check id
commit 65fcf2eddffa426caacdbf1a59f529c995045fb5
Author: Simon <simon@gb7fr.org.uk>
Date: Thu Feb 24 00:06:24 2022 +0000
server check id
commit ea0ea8d6b13ba7e20492f11226de854cecbccc46
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Feb 23 23:49:07 2022 +0000
reverse logic
commit 9815210d5adb2ee92d1b9914753d4799988b3415
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Feb 23 23:24:34 2022 +0000
reverse logic
commit 0d9945d23fcce62378cace97cdc012c3fdd04276
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Feb 23 23:23:26 2022 +0000
reverse logic
commit 54cc752c4cac52e903422b9aae38e61f722c23f1
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Feb 23 23:20:16 2022 +0000
reverse logic
commit 182a0e99829ee7383ae72b52d8514aa826e31260
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Feb 23 23:17:16 2022 +0000
typo
commit e244c1b20b9c927efb1a95e30ff08d3120a83b7e
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Feb 23 23:16:28 2022 +0000
typo
commit ba822143bd97261f1a65fc9d489bc570dea3749d
Author: Simon <simon@gb7fr.org.uk>
Date: Wed Feb 23 23:12:54 2022 +0000
further updates to validate_id
commit 8266db1820ee09b3bb3d4731e0cf019df40c638e
Author: Simon <simon@gb7fr.org.uk>
Date: Tue Feb 22 00:48:31 2022 +0000
mike
commit 2658e5842c24a4d72d17a46d1792811f2b01bbbc
Author: Simon <simon@gb7fr.org.uk>
Date: Tue Feb 22 00:46:07 2022 +0000
int - string trickey
commit 51479c0c572c75b9a8c9ea19e1aa6c5e3692d5a4
Author: Simon <simon@gb7fr.org.uk>
Date: Tue Feb 22 00:41:30 2022 +0000
validate_id
commit 012ea165cebe414800815362d4f9da1b7399bcad
Author: Simon <simon@gb7fr.org.uk>
Date: Tue Feb 22 00:40:00 2022 +0000
validate_id
commit eff8b31bb5cadc08093f333afc7cb6a423e05675
Author: Simon <simon@gb7fr.org.uk>
Date: Tue Feb 22 00:36:46 2022 +0000
validate_id
commit fb3158c4d0d44663c4e511163b60b5a04f392123
Author: Simon <simon@gb7fr.org.uk>
Date: Tue Feb 22 00:05:01 2022 +0000
make sure hblink.py can see sub ids
commit 17111430fd561ebf2a431c615cd7521884a55ccd
Author: Simon <simon@gb7fr.org.uk>
Date: Mon Feb 21 23:35:32 2022 +0000
add get_alias
commit e98ea4c7f3d27c7539607a31948249ad1e6feb85
Author: Simon <simon@gb7fr.org.uk>
Date: Mon Feb 21 23:28:29 2022 +0000
fix line
commit d027373fb944ea3fa60c5993bd91d114bb935721
Author: Simon <simon@gb7fr.org.uk>
Date: Mon Feb 21 23:27:01 2022 +0000
fix isinstance
commit 106e2bcda6bc87f5a00ee9b99dbafdacb79d3d8d
Author: Simon <simon@gb7fr.org.uk>
Date: Mon Feb 21 23:22:47 2022 +0000
don't allow login if ID and callsign don't match database
1 : Standard Open Bridge Protocol
2 : Free Bridge Protocol
This is taken as a minimum ver, so if you set "2", ver 1 traffic will not be accepted.
Protocol can be on-the-fly upgraded using BCVE packet
Downgrade is not allowed