0083dc8ad6a798b441df4e2a6ebbb5ea1a7daead
Each speaker's stream held a fixed 60 ms and gave up after 200 ms of concealment, so a jittery connection concealed constantly and a stall ended the burst. It now runs through a port of the libspeex jitter buffer the official client links, configured and driven as it does: - the delay adapts to the measured jitter, aiming for at most 1% of packets arriving late - a speaker keeps one timeline, never re-anchored between talk bursts, so what the buffer learned carries over; only 5 s without packets drops it - the talker's stop marker never enters the buffer; playback ends when it reaches it, and its slot is played as silence, not concealed A pull now always hands out one 20 ms frame: what a longer packet or a delay increase produces beyond that is played on the following pulls, which Android's mixer used to cut off. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Description
A reimplementation of TeamSpeak 3 in Java
TS3
Latest
Languages
Java
85.5%
Kotlin
13.3%
C++
0.6%
Python
0.5%