feat(renaser): Fase 15 — la voz del sistema (acorde + eventos)

La bocina pertenecía al app enfocado (Fase 12), pero el kernel
necesita hablar también. Ahora tiene voz propia, prioritaria.

- `altavoz`: cola `SECUENCIA: Mutex<VecDeque<(u32,u32)>>` (freq, ms)
  + reloj `FIN_NOTA: AtomicU64`. `agendar(&[...])` encola;
  `atender()` (tarea del compositor cada fotograma) avanza la
  secuencia y silencia al acabar; `kernel_sonando()` gatea a los
  apps — mientras el kernel suena, `sys_tono` no-op.
- Catálogo: VOZ_BIENVENIDA (Do5-Mi5-Sol5, 500 ms), VOZ_LANZAR
  (700→1050 Hz), VOZ_CERRAR (900→520 Hz), VOZ_DESALOJO (180 Hz).
- Hitos: `kernel_main` agenda el acorde antes de `ejecutor.run`;
  `nacer_ventana` (Alt+N), `cerrar` (Alt+Q), `desalojar` (falla)
  agendan al hacer su trabajo.
- De paso: las pestañas de la barra de tareas calculan su tinta por
  brillo del fondo (ITU-R BT.601); la pestaña crema del desalojo por
  memoria, que llevaba texto blanco invisible, ahora luce su nombre
  en tinta oscura.

Verificado en QEMU con `-audiodev wav -machine pcspk-audiodev=spk`:
el PCM crudo trae, en orden, el acorde de bienvenida (~520, 630, 760
Hz), un brevísimo 180 Hz (las balizas de discola/glotona desalojadas)
y después la escala de Do mayor de tonada.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-23 02:21:37 +00:00
parent 6a29152feb
commit 28c2e6af18
8 changed files with 199 additions and 3 deletions
+18
View File
@@ -255,6 +255,24 @@ silencioso. Los marcos para tablas intermedias salen del banco DMA. Esta
mejora resolvió el #PF inexplicable en máquinas con un OVMF que coloca el BAR
del virtio-blk fuera de los primeros 4 GiB.
## Fase 15 — la voz del sistema (completada)
La bocina pertenecía al app enfocado (Fase 12), pero el kernel necesita hablar
también: un acorde al arrancar, un repique al lanzar una app, un bajo al
desalojarla. Verificada en QEMU con captura PCM a WAV.
- `altavoz` gana una cola de notas (`SECUENCIA: Mutex<VecDeque<(u32,u32)>>`) y
un reloj de fin (`FIN_NOTA: AtomicU64`). `agendar(&[(frec, ms)])` encola;
`atender()` —invocada por la tarea del compositor cada fotograma— pasa a la
nota siguiente cuando la actual termina. `kernel_sonando()` gatea a los apps:
mientras el kernel habla, `sys_tono` ignora a las apps.
- Catálogo: `VOZ_BIENVENIDA` (Do-Mi-Sol), `VOZ_LANZAR` (repique ascendente),
`VOZ_CERRAR` (descendente), `VOZ_DESALOJO` (bajo grave).
- Hitos: `kernel_main` agenda el acorde antes de `ejecutor.run`. `nacer_ventana`,
`cerrar` y `desalojar` lo agendan al hacer su trabajo.
- Pestañas de la barra de tareas: tinta calculada por brillo del fondo, así la
pestaña crema del desalojo por memoria ya no lleva texto invisible.
Líneas abiertas posteriores: reciclado de las ranuras de ventana cerradas;
audio con varias voces (PCM) más allá del tono único de la bocina.