3.0 KiB
3.0 KiB
Spike T-0.3 — Audio (oto v3.5.1, CGO_ENABLED=0)
Status: ✅ LOLOS · Tanggal: 2026-10-15 · Mesin: Linux (PipeWire + pipewire-pulse aktif,
/dev/sndtersedia)
Tujuan (PRD Phase 0)
Buktikan: suara bisa diputar dari binary CGO_ENABLED=0; init audio tidak memblok startup;
degradasi anggun tanpa audio device; ukur latensi.
Cara menjalankan ulang
# Skenario 1 — live (butuh PulseAudio/PipeWire)
TIA_AUDIO_SPIKE=1 go test ./internal/audio/ -run TestEngineSpike -v -count=1
# Skenario 2 — pulse rusak → fallback ALSA
TIA_AUDIO_SPIKE=1 PULSE_SERVER=unix:/nonexistent go test ./internal/audio/ -run TestEngineSpike -v -count=1
# Skenario 3 — pulse + ALSA rusak → degradasi total (tidak boleh panic)
TIA_AUDIO_SPIKE=1 PULSE_SERVER=unix:/nonexistent ALSA_CONFIG_PATH=/nonexistent/asound.conf \
go test ./internal/audio/ -run TestEngineSpike -v -count=1
Hasil
| # | Skenario | New() return |
Init + ready | Play() return |
Status |
|---|---|---|---|---|---|
| 1 | Live (PipeWire/pulse socket) | 1.5 µs | 13.3 ms | 5.7 – 15.7 µs | siap ✅ |
| 2 | Pulse rusak → fallback ALSA | 3.1 µs | 26.1 ms | 7 – 12 µs | siap (via ALSA) ✅ |
| 3 | Pulse + ALSA rusak | 2.1 µs | 0.4 ms (gagal cepat) | no-op | gagal: ... tanpa panic ✅ |
- Binary 6.7 MB (
CGO_ENABLED=0), aset 8 WAV embedded = 128 KB (budget PRD < 2 MB ✓). - Target PRD: startup < 500 ms → audio init async hanya 1.5 µs di jalur startup ✓;
latensi suara < 100 ms → pemanggilan
Play()~10 µs, latency terdengar mengikuti buffer device. - TUI menampilkan status engine live:
audio: menyiapkan…→siapsetelah redraw pertama.
Temuan penting
purego(dipakai driver ALSA oto) membuat binary link dinamis ke glibc. Uji kontrol: hello-worldCGO_ENABLED=0=statically linkedmurni; begitu oto ikut di-compile muncullibc.so.6,libdl,libpthread. Artinya: tetap satu file & tanpa cgo, tapi belumstatically linkedpenuh. Alpine/musl belum terverifikasi → catat sebagai risiko; jalur keluar bila perlu: build varian tanpa driver ALSA (pulse-only).- Fallback berantai terbukti: PulseAudio (pure-Go) → ALSA (purego dlopen
libasound.so.2) → error jelas. Pesan error oto ditampilkan apa adanya (sesuai F-023; penjelasan i18n menyusul). - Auto-mute SSH diuji di unit test (
SSH_CONNECTION→muted), belum diuji di sesi SSH asli.
Batasan (jujur)
- Latensi terdengar tidak diukur programatik (butuh loopback/ears) — yang diukur waktu init
& waktu
Play()kembali. Buffer device oto masih default; bila klik terasa delay di hardware nyata, setBufferSize(Phase 1). - Belum diuji di macOS, WSL2, dan sesi SSH asli.
Status follow-up
- Ganti aset placeholder dengan Kenney CC0 (T-0.6) — 8 file,
kenney-license.txtikut di assets - Toggle suara/volume langsung dari layar Pengaturan tanpa restart (Phase 1, F-024)
tia-love doctormenampilkan status audio (Phase 1)