Files
tia-love/docs/spikes/T-0.3-audio.md
T

3.0 KiB
Raw Blame History

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/snd tersedia)

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… → siap setelah redraw pertama.

Temuan penting

  1. purego (dipakai driver ALSA oto) membuat binary link dinamis ke glibc. Uji kontrol: hello-world CGO_ENABLED=0 = statically linked murni; begitu oto ikut di-compile muncul libc.so.6, libdl, libpthread. Artinya: tetap satu file & tanpa cgo, tapi belum statically linked penuh. Alpine/musl belum terverifikasi → catat sebagai risiko; jalur keluar bila perlu: build varian tanpa driver ALSA (pulse-only).
  2. 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).
  3. 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, set BufferSize (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.txt ikut di assets
  • Toggle suara/volume langsung dari layar Pengaturan tanpa restart (Phase 1, F-024)
  • tia-love doctor menampilkan status audio (Phase 1)