Добавляем индикатор рассинхронизации звука и видео в статус-панели очков

This commit is contained in:
2026-09-02 19:27:11 +03:00
parent 92b483a5e3
commit b2e2d2697d
7 changed files with 92 additions and 6 deletions
@@ -86,6 +86,14 @@ data class SetScale(val scale: Float) : HostToGlasses
@SerialName("set_vertical")
data class SetVertical(val vertical: Float) : HostToGlasses
/**
* Индикатор аудио-синхронизации для статус-панели очков: diffMs — |звук − видео| в миллисекундах
* (каждый sync-цикл ~5с), active — сейчас ли видео играет на очках (иначе индикатор скрывают).
*/
@Serializable
@SerialName("audio_sync_info")
data class AudioSyncInfo(val diffMs: Int, val active: Boolean) : HostToGlasses
/** Фраза распознана (streaming): phrase — фраза, full — весь накопленный текст сессии. */
@Serializable
@SerialName("stt_phrase")
@@ -265,4 +265,15 @@ class HostToGlassesTest {
assertEquals("привет", decoded.messages[0].content)
assertEquals("assistant", decoded.messages[1].role)
}
@Test
fun audioSyncInfoRoundTrip() {
val msg: HostToGlasses = AudioSyncInfo(diffMs = 340, active = true)
val text = json.encodeToString(HostToGlasses.serializer(), msg)
assertEquals("""{"type":"audio_sync_info","diffMs":340,"active":true}""", text)
val decoded = json.decodeFromString(HostToGlasses.serializer(), text)
assertIs<AudioSyncInfo>(decoded)
assertEquals(340, decoded.diffMs)
assertTrue(decoded.active)
}
}