Force RX meter to zero 600ms after signal ends; silence threshold
This commit is contained in:
@@ -212,7 +212,9 @@ class OpusEngine(
|
||||
// Уровень показываем только для реальных пакетов: во время
|
||||
// скрытия потерь (conceal) шкала должна быть в нуле
|
||||
val real = System.currentTimeMillis() - lastRealPacketTime < 400
|
||||
onLevel(SRC_SPEAKER, if (real) pcmLevel(pcm) else 0f)
|
||||
val lvl = if (real) pcmLevel(pcm) else 0f
|
||||
// Порог тишины: шум декодера и паузы речи — в ноль
|
||||
onLevel(SRC_SPEAKER, if (lvl < 0.02f) 0f else lvl)
|
||||
if (dbgOut < 5) {
|
||||
Log.d(TAG, "out ${pcm.size}B")
|
||||
dbgOut++
|
||||
|
||||
@@ -44,10 +44,13 @@ class SMeterView @JvmOverloads constructor(
|
||||
private var target = 0f
|
||||
private var shown = 0f
|
||||
private var peak = 0f
|
||||
private var lastActive = 0L
|
||||
|
||||
private val handler = Handler(Looper.getMainLooper())
|
||||
private val ticker = object : Runnable {
|
||||
override fun run() {
|
||||
// Гарантированный сброс: если сигнала не было 600 мс — в ноль
|
||||
if (System.currentTimeMillis() - lastActive > 600 && target != 0f) target = 0f
|
||||
// Сглаживание уровня и медленный спад пика
|
||||
shown += (target - shown) * 0.35f
|
||||
if (Math.abs(target - shown) < 0.002f) shown = target
|
||||
@@ -64,6 +67,7 @@ class SMeterView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
fun setLevel(level: Float) {
|
||||
if (level > 0.01f) lastActive = System.currentTimeMillis()
|
||||
target = level.coerceIn(0f, 1f)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user