claude-code-arcane 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +5 -4
  3. package/agents/audio/audio-director.md +90 -0
  4. package/agents/audio/audio-programmer.md +97 -0
  5. package/agents/audio/audio-qa.md +95 -0
  6. package/agents/audio/composer.md +88 -0
  7. package/agents/audio/technical-sound-designer.md +90 -0
  8. package/agents/audio/voice-director.md +96 -0
  9. package/docs/SKILLS-CATALOG.md +22 -2
  10. package/docs/USER-GUIDE.md +2 -2
  11. package/package.json +1 -1
  12. package/profiles/audio.yaml +45 -0
  13. package/rules/gamedev/audio-code.md +45 -0
  14. package/skills/adaptive-music/SKILL.md +171 -0
  15. package/skills/adaptive-music/references/anti-patterns.md +53 -0
  16. package/skills/audio-audit/SKILL.md +164 -0
  17. package/skills/audio-audit/references/anti-patterns.md +65 -0
  18. package/skills/audio-audit/scripts/check_assets.py +208 -0
  19. package/skills/audio-bible/SKILL.md +119 -0
  20. package/skills/audio-bible/references/anti-patterns.md +39 -0
  21. package/skills/audio-mix/SKILL.md +151 -0
  22. package/skills/audio-mix/references/anti-patterns.md +65 -0
  23. package/skills/audio-spec/SKILL.md +107 -0
  24. package/skills/audio-spec/references/anti-patterns.md +45 -0
  25. package/skills/middleware-integration/SKILL.md +186 -0
  26. package/skills/middleware-integration/references/anti-patterns.md +69 -0
  27. package/skills/midi-compose/SKILL.md +136 -0
  28. package/skills/midi-compose/references/smf-format.md +129 -0
  29. package/skills/midi-compose/scripts/compose_midi.py +326 -0
  30. package/skills/midi-compose/templates/example-composition.json +69 -0
  31. package/skills/music-composition/SKILL.md +106 -0
  32. package/skills/music-composition/references/form.md +57 -0
  33. package/skills/music-composition/references/game-music.md +82 -0
  34. package/skills/music-composition/references/harmony.md +82 -0
  35. package/skills/music-composition/references/melody.md +48 -0
  36. package/skills/music-composition/references/orchestration.md +69 -0
  37. package/skills/music-composition/references/rhythm-groove.md +49 -0
  38. package/skills/procedural-audio/SKILL.md +157 -0
  39. package/skills/procedural-audio/references/anti-patterns.md +45 -0
  40. package/skills/sfx-design/SKILL.md +130 -0
  41. package/skills/sfx-design/references/anti-patterns.md +53 -0
  42. package/skills/spatial-audio/SKILL.md +139 -0
  43. package/skills/spatial-audio/references/anti-patterns.md +53 -0
  44. package/skills/ui-sound-design/SKILL.md +133 -0
  45. package/skills/ui-sound-design/references/anti-patterns.md +57 -0
  46. package/skills/voice-pipeline/SKILL.md +150 -0
  47. package/skills/voice-pipeline/references/anti-patterns.md +69 -0
@@ -0,0 +1,139 @@
1
+ ---
2
+ name: spatial-audio
3
+ description: "Audio espacial: HRTF/binaural, Ambisonics, panning, curvas de atenuacion, oclusion y obstruccion, reverb por zona, y presupuesto de CPU por tecnica. Usar para: sonido 3D, audio posicional, VR audio, oclusion, decidir HRTF vs panning."
4
+ category: "audio"
5
+ argument-hint: "[decide | hrtf | ambisonics | occlusion | budget]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit
8
+ ---
9
+ # spatial-audio — Audio Posicional
10
+
11
+ Decide qué técnica de espacialización usar por fuente, y presupuesta el costo. La decisión correcta casi nunca es "la mejor técnica para todo".
12
+
13
+ ## Cuándo usar
14
+
15
+ - Definir la estrategia de espacialización de un juego o experiencia VR
16
+ - El audio 3D come demasiado CPU
17
+ - Las fuentes no se localizan bien, o suenan "adentro de la cabeza"
18
+ - Implementar oclusión y obstrucción
19
+ - Diseñar reverb por zona
20
+
21
+ ## Input
22
+
23
+ 1. Leer audio bible y el presupuesto de performance del proyecto
24
+ 2. Determinar: ¿hay auriculares garantizados (VR) o hay que funcionar en speakers?
25
+ 3. Contar las fuentes simultáneas esperadas por categoría
26
+ 4. Preguntar al usuario: plataforma target más baja y fps objetivo
27
+
28
+ ---
29
+
30
+ ## Presupuesto — el número que decide todo
31
+
32
+ | Técnica | Costo |
33
+ |---|---|
34
+ | Convolución HRTF (512 taps) | **~2 ms por fuente** |
35
+ | Encode ambisónico | ~0.1 ms por fuente |
36
+ | Decode ambisónico a binaural | ~1 ms total (una vez, no por fuente) |
37
+ | Panning estéreo / vector-based | despreciable |
38
+ | Atenuación por distancia + filtro | despreciable |
39
+
40
+ **El audio entero dispone del 5-10% del frame time.** A 60 fps son 16.6 ms de frame, así que el audio tiene ~0.8-1.7 ms.
41
+
42
+ Ese número mata la idea de HRTF universal de entrada: **50 fuentes × 2 ms = 100 ms de CPU**, seis veces el frame completo. No es "costoso": es imposible.
43
+
44
+ Presupuesto realista: **3-5 fuentes con HRTF**, el resto por otras técnicas.
45
+
46
+ ---
47
+
48
+ ## Decisión por fuente
49
+
50
+ | Situación | Técnica | Por qué |
51
+ |---|---|---|
52
+ | 3-5 fuentes críticas, con auriculares | **HRTF** | Localización precisa, incluida elevación |
53
+ | Ambiente, campo difuso | **Ambisonics** | Costo por fuente casi nulo; un solo decode |
54
+ | Fuentes lejanas o poco importantes | **Panning + atenuación** | Gratis, e igual son indistinguibles |
55
+ | Música, UI | **2D, sin espacializar** | No tienen posición en el mundo |
56
+ | Diálogo del jugador / narrador | **2D o pseudo-3D** | Tiene que ser siempre inteligible |
57
+ | Fuentes en speakers (no auriculares) | **Panning / surround** | HRTF en speakers no funciona: asume oídos, no una sala |
58
+
59
+ **HRTF asume auriculares.** En speakers el crosstalk entre canales destruye las claves binaurales y el resultado es peor que un panning honesto. Si la plataforma no garantiza auriculares, HRTF necesita detección de ruta o queda descartado.
60
+
61
+ **Estrategia recomendada:** un presupuesto explícito de "slots HRTF" asignado por prioridad dinámica — la fuente más importante y más cercana se lleva el slot, y al alejarse lo devuelve. Todo lo demás, Ambisonics y panning.
62
+
63
+ ---
64
+
65
+ ## Curvas de atenuación
66
+
67
+ La atenuación es lo que más aporta a la percepción de distancia, y es gratis. Componentes:
68
+
69
+ | Componente | Qué comunica |
70
+ |---|---|
71
+ | **Volumen por distancia** | Distancia base |
72
+ | **Filtro low-pass creciente** | El aire absorbe agudos: lejano = más opaco |
73
+ | **Reducción de spread** | Cerca es ancho, lejos es puntual |
74
+ | **Aumento de reverb (wet/dry)** | Lejano = más proporción de espacio |
75
+
76
+ **Los cuatro juntos** venden la distancia mucho mejor que el volumen solo. Un sonido que solo baja de volumen se percibe como "más silencioso", no como "más lejos".
77
+
78
+ Definir siempre `min distance` (dentro de la cual no atenúa) y `max distance` (fuera de la cual no suena), y la forma de la curva. Log es lo más natural para la mayoría de las fuentes; lineal sirve cuando querés control preciso del rango audible.
79
+
80
+ ## Oclusión y obstrucción
81
+
82
+ Dos fenómenos distintos que se confunden seguido:
83
+
84
+ | | Qué es | Efecto |
85
+ |---|---|---|
86
+ | **Obstrucción** | Algo bloquea el camino directo, pero el sonido reflejado llega | Baja el directo, mantiene el reverb. Se oye "alrededor" |
87
+ | **Oclusión** | Directo y reflejado bloqueados: pared sólida | Baja los dos + low-pass fuerte |
88
+
89
+ Confundirlas produce el bug clásico: un enemigo detrás de una columna se vuelve inaudible (se aplicó oclusión donde correspondía obstrucción).
90
+
91
+ **Costo:** la parte cara no es el filtro, es el raycast. Con muchas fuentes hay que:
92
+ - Limitar los raycasts por frame y repartirlos entre frames
93
+ - Cachear el resultado y actualizar con menos frecuencia que el frame
94
+ - Interpolar el valor de oclusión hacia el target, nunca aplicarlo de golpe (el salto se escucha)
95
+
96
+ ## Reverb por zona
97
+
98
+ - Definir zonas con un preset de reverb cada una, y **crossfade en las transiciones** — un cambio instantáneo de reverb es muy audible
99
+ - El envío a reverb depende de la distancia (ver curvas arriba)
100
+ - Las fuentes 2D (música, UI) normalmente **no** van a reverb de zona
101
+ - La cola del reverb tiene que seguir sonando al cambiar de zona, o se corta de forma antinatural
102
+
103
+ ## VR y consideraciones específicas
104
+
105
+ - **Head tracking obligatorio:** la posición de las fuentes se actualiza con la cabeza. Latencia alta rompe la ilusión y marea
106
+ - **Elevación importa:** es lo que HRTF aporta y el panning no puede
107
+ - **Auriculares garantizados:** es el único contexto donde HRTF es la elección obvia
108
+ - **Presupuesto más ajustado:** 90 fps deja ~11 ms de frame, así que el audio tiene menos margen aún
109
+
110
+ ---
111
+
112
+ ## Proceso
113
+
114
+ 1. **Contar fuentes** simultáneas por categoría
115
+ 2. **Presupuestar** contra el 5-10% del frame en la plataforma más baja
116
+ 3. **Asignar técnica por categoría**, con slots HRTF explícitos y prioridad dinámica
117
+ 4. **Definir curvas** de atenuación con los cuatro componentes
118
+ 5. **Definir oclusión vs obstrucción** por tipo de geometría, con presupuesto de raycasts e interpolación
119
+ 6. **Definir zonas** de reverb y sus transiciones
120
+ 7. **Escribir** — preguntar "¿Escribo la estrategia a `<path>`?" antes de usar Write
121
+
122
+ ---
123
+
124
+ ## Verdict
125
+
126
+ - **READY** — cada categoría tiene técnica asignada, el presupuesto cierra en la plataforma más baja, y oclusión/obstrucción están diferenciadas
127
+ - **CONCERNS** — la estrategia existe pero el presupuesto no se midió, o HRTF se asume sin verificar que haya auriculares
128
+ - **BLOCKED** — falta el conteo de fuentes simultáneas o el presupuesto de performance del proyecto
129
+
130
+ ## Anti-patterns
131
+
132
+ > → Read references/anti-patterns.md
133
+
134
+ ## Next steps
135
+
136
+ - `/audio-audit` para medir CPU y voice count reales en runtime
137
+ - `/middleware-integration` para implementar atenuaciones, oclusión y buses de reverb
138
+ - `/procedural-audio` si las fuentes ambiente son muchas y conviene generarlas
139
+ - `/audio-mix` para el reparto de buses y el ducking del diálogo
@@ -0,0 +1,53 @@
1
+ # Audio Espacial — Anti-patterns
2
+
3
+ ## HRTF en todas las fuentes
4
+
5
+ 50 fuentes × 2 ms = 100 ms de CPU, contra un frame de 16.6 ms a 60 fps. No es costoso: es seis veces imposible. El presupuesto real es 3-5 fuentes con HRTF y el resto por Ambisonics o panning.
6
+
7
+ ## HRTF en speakers
8
+
9
+ HRTF asume auriculares. En speakers el crosstalk entre canales destruye las claves binaurales y suena peor que un panning honesto. Si no hay auriculares garantizados, hace falta detección de ruta o se descarta.
10
+
11
+ ## Volumen como única clave de distancia
12
+
13
+ Un sonido que solo baja de volumen se percibe como "más silencioso", no como "más lejos". Hacen falta los cuatro componentes: volumen, low-pass creciente, spread decreciente y más reverb.
14
+
15
+ ## Confundir oclusión con obstrucción
16
+
17
+ Aplicar oclusión total donde había obstrucción hace que un enemigo detrás de una columna sea inaudible. Obstrucción baja el directo y mantiene el reflejado; oclusión baja los dos.
18
+
19
+ ## Raycasts sin presupuesto
20
+
21
+ La parte cara de la oclusión es el raycast, no el filtro. Con 30 fuentes haciendo raycast por frame el costo se dispara. Limitar, repartir entre frames, cachear.
22
+
23
+ ## Oclusión sin interpolar
24
+
25
+ Aplicar el valor de golpe produce un salto muy audible cada vez que el jugador cruza el borde de una geometría. Interpolar siempre hacia el target.
26
+
27
+ ## Curvas sin min/max distance
28
+
29
+ Dejar el default del middleware produce sonidos audibles a 200 m o que desaparecen a 3 m. Los dos valores y la forma de la curva son parte del spec.
30
+
31
+ ## Reverb de zona con cambio instantáneo
32
+
33
+ El salto de preset se escucha como un corte. Crossfade en la transición, y dejar que la cola anterior termine.
34
+
35
+ ## Música y UI espacializadas
36
+
37
+ No tienen posición en el mundo. Espacializarlas produce paneos raros y costo inútil.
38
+
39
+ ## Diálogo tratado como una fuente 3D más
40
+
41
+ Si el diálogo importante se ocluye y se atenúa como cualquier SFX, el jugador pierde información. Suele necesitar un tratamiento pseudo-3D: dirección sí, oclusión no.
42
+
43
+ ## Presupuestar contra la plataforma más alta
44
+
45
+ El modelo entra en PC y no en el target más bajo. El presupuesto se hace contra el piso, no contra el techo.
46
+
47
+ ## Ambisonics para fuentes puntuales importantes
48
+
49
+ Ambisonics brilla en campo difuso y ambiente. Para la fuente crítica que el jugador tiene que localizar con precisión, no reemplaza a HRTF.
50
+
51
+ ## Ignorar el presupuesto más ajustado de VR
52
+
53
+ 90 fps deja ~11 ms de frame. Un plan de espacialización calculado para 60 fps no entra.
@@ -0,0 +1,133 @@
1
+ ---
2
+ name: ui-sound-design
3
+ description: "Sonido de interfaz y feedback: duraciones y niveles por tipo de evento, jerarquia de feedback, coordinacion con haptics, respeto del volumen del sistema, accesibilidad. Usar para: sonidos de UI, feedback de menu, notificaciones, sonido de app."
4
+ category: "audio"
5
+ argument-hint: "[set | event-name | review | haptics]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit
8
+ ---
9
+ # ui-sound-design — Feedback de Interfaz
10
+
11
+ Diseña el sonido que confirma acciones. Es el audio que el usuario escucha más veces y el que más rápido se vuelve molesto si está mal calibrado.
12
+
13
+ ## Cuándo usar
14
+
15
+ - Definir el set de sonidos de UI de un juego o una app
16
+ - El feedback se siente molesto, invasivo o inconsistente
17
+ - Falta jerarquía: todo suena igual de importante
18
+ - Coordinar audio con haptics
19
+
20
+ ## Input
21
+
22
+ 1. Leer audio bible (paleta, frequency allocation, mix hierarchy)
23
+ 2. Listar los eventos de UI reales de la interfaz
24
+ 3. Preguntar al usuario: plataforma (desktop / consola / móvil), si hay haptics, y si el juego se juega en sesiones largas
25
+
26
+ ---
27
+
28
+ ## Especificaciones por tipo
29
+
30
+ Estos rangos son el punto de partida calibrado. Salirse de ellos requiere razón.
31
+
32
+ | Tipo | Duración | Carácter | Nivel |
33
+ |---|---|---|---|
34
+ | **Tap / hover** | 30-80 ms | Click suave, alta frecuencia | −24 dB |
35
+ | **Confirmación** | 80-150 ms | Transiente definido, neutro | −21 dB |
36
+ | **Éxito** | 150-300 ms | Tono ascendente, positivo | −18 dB |
37
+ | **Error** | 200-400 ms | Descendente, menor | −18 dB |
38
+ | **Notificación** | 300-800 ms | Distintivo, llama atención | −18 dB |
39
+ | **Transición / navegación** | 100-250 ms | Movimiento sutil | −24 dB |
40
+ | **Toggle** | 40-100 ms | Dos estados distinguibles | −24 dB |
41
+
42
+ **El nivel es lo que más se equivoca.** Los sonidos de UI van entre **−18 y −24 dB** relativos al material de gameplay. Un click a −3 dB compite con la acción del juego y agota en minutos.
43
+
44
+ Regla de proporcionalidad: **el nivel y la duración son proporcionales a la importancia del evento**. Un hover es lo más corto y lo más bajo. Un error de transacción es lo más largo y lo más alto. Si el hover y el error suenan parecido, no hay jerarquía.
45
+
46
+ ## Frecuencia y fatiga
47
+
48
+ El feedback de UI vive en **2-6 kHz**: es donde el oído es más sensible, así que un sonido bajo se lee claro sin volumen. Es también la banda que **más rápido fatiga**.
49
+
50
+ Consecuencias de diseño:
51
+
52
+ - Transientes cortos, no tonos sostenidos: la energía breve informa sin cansar
53
+ - En un juego de sesiones largas, correr el feedback hacia abajo (1-3 kHz) reduce la fatiga a costa de algo de claridad
54
+ - Si el juego tiene mucha percusión brillante o hi-hats, el UI compite: bajar el UI no alcanza, hay que hacerle lugar en el arreglo (ver `/audio-mix`)
55
+
56
+ ## Jerarquía
57
+
58
+ Tres niveles, y cada evento cae en uno:
59
+
60
+ | Nivel | Qué entra | Puede interrumpir |
61
+ |---|---|---|
62
+ | **Ambiental** | Hover, navegación, toggle | Nada. Se pierde y no importa |
63
+ | **Confirmatorio** | Tap, confirmación, éxito | Nada, pero no se debe perder |
64
+ | **Crítico** | Error, alerta, timeout | Duckea el resto |
65
+
66
+ Solo el nivel crítico duckea. Si los tres duckean, la música desaparece cada vez que el usuario navega un menú.
67
+
68
+ ## Haptics
69
+
70
+ Cuando hay haptics, audio y vibración son **un solo evento percibido**. Reglas:
71
+
72
+ - **Sincronía dura:** un desfasaje mayor a ~30 ms se percibe como dos eventos separados
73
+ - **No duplicar la información:** si el haptic ya comunica la intensidad, el audio no necesita subir de nivel
74
+ - **Complementariedad de banda:** el haptic cubre lo que el speaker chico no puede dar (el sub). Diseñar el audio sin depender del grave si hay haptic
75
+ - **Respetar el ajuste del usuario:** haptics desactivado no debe dejar el evento sin feedback
76
+
77
+ ## Plataforma
78
+
79
+ ### Móvil — sesiones de audio
80
+
81
+ Ignorar la sesión de audio es el bug más común de audio en móvil: la app pierde el audio en una llamada y no lo recupera nunca.
82
+
83
+ | iOS `AVAudioSession` | Comportamiento |
84
+ |---|---|
85
+ | `.ambient` | Se mezcla con otro audio; el switch de silencio lo silencia |
86
+ | `.playback` | Interrumpe otro audio; ignora el switch de silencio |
87
+ | `.playAndRecord` | Para apps con voz |
88
+ | `.soloAmbient` | Default; silencia otro audio |
89
+
90
+ En Android el equivalente es AudioFocus. En los dos casos hay que manejar **interrupciones** (llamada, alarma) y **cambios de ruta** (auriculares conectados/desconectados).
91
+
92
+ **Un juego que suena en background o que ignora el switch de silencio es un rechazo de store esperando pasar.** Para un juego, `.ambient` o `.soloAmbient` según si querés dejar que el usuario escuche su música.
93
+
94
+ ### Respetar el volumen del sistema
95
+
96
+ Nunca normalizar por encima del volumen del sistema ni forzar un mínimo. Si el usuario bajó el volumen, bajó el volumen.
97
+
98
+ ## Accesibilidad
99
+
100
+ - El sonido de UI **nunca puede ser el único canal** de información crítica: siempre acompañado de señal visual
101
+ - Éxito y error tienen que distinguirse por **contorno melódico** (ascendente vs descendente), no solo por timbre — es lo que sobrevive a pérdida de agudos
102
+ - Ofrecer control de volumen de UI separado de música y SFX
103
+ - Los sonidos repetitivos de navegación tienen que poder desactivarse sin perder el feedback crítico
104
+
105
+ ---
106
+
107
+ ## Proceso
108
+
109
+ 1. **Listar los eventos** de UI reales y asignar cada uno a un nivel de jerarquía
110
+ 2. **Especificar** duración, carácter y nivel por evento, contra la tabla de referencia
111
+ 3. **Verificar la jerarquía** — hover y crítico tienen que ser inconfundibles
112
+ 4. **Definir haptics** si aplica, con sincronía y reparto de banda
113
+ 5. **Definir el manejo de sesión** en móvil
114
+ 6. **Chequear accesibilidad** — contorno melódico, canal redundante, controles separados
115
+ 7. **Escribir** — preguntar "¿Escribo el set a `<path>`?" antes de usar Write
116
+
117
+ ---
118
+
119
+ ## Verdict
120
+
121
+ - **READY** — cada evento tiene nivel, duración y jerarquía; la accesibilidad está cubierta; en móvil la sesión de audio está definida
122
+ - **CONCERNS** — el set existe pero no hay jerarquía diferenciada, o el nivel está por encima de −18 dB, o falta el manejo de interrupciones
123
+ - **BLOCKED** — no está definida la lista de eventos de UI o falta la dirección del audio bible
124
+
125
+ ## Anti-patterns
126
+
127
+ > → Read references/anti-patterns.md
128
+
129
+ ## Next steps
130
+
131
+ - `/audio-mix` para el bus de UI y el ducking del nivel crítico
132
+ - `/audio-spec` para formalizar cooldowns (navegación rápida spamea el evento)
133
+ - `/audio-audit` para verificar niveles medidos contra los especificados
@@ -0,0 +1,57 @@
1
+ # UI Sound Design — Anti-patterns
2
+
3
+ ## Sonidos de UI al nivel del gameplay
4
+
5
+ Un click a −3 dB compite con la acción del juego y agota en minutos. El UI va entre −18 y −24 dB. Es el error más frecuente y el más fácil de arreglar.
6
+
7
+ ## Todo al mismo nivel
8
+
9
+ Si el hover y el error de transacción suenan igual de importantes, no hay jerarquía y el usuario deja de prestar atención a los dos. Nivel y duración proporcionales a la importancia del evento.
10
+
11
+ ## Todo duckea
12
+
13
+ Si cada navegación de menú baja la música, la música desaparece. Solo el nivel crítico duckea.
14
+
15
+ ## Sin cooldown en navegación
16
+
17
+ Recorrer un menú rápido con el stick dispara el mismo tick veinte veces en 300 ms. Suena a glitch. Cooldown mínimo en todo evento de navegación.
18
+
19
+ ## Tonos sostenidos en 2-6 kHz
20
+
21
+ Es la banda más sensible del oído y la que más fatiga. Un tono sostenido ahí cansa en una sesión. Transientes cortos.
22
+
23
+ ## Ignorar la sesión de audio en móvil
24
+
25
+ Entra una llamada, la app pierde el audio y no lo recupera. O el juego suena con el switch de silencio activado. Los dos son rechazo de store. Manejar interrupciones y cambios de ruta explícitamente.
26
+
27
+ ## Forzar volumen por encima del sistema
28
+
29
+ Normalizar hacia arriba o imponer un piso de volumen ignora una decisión explícita del usuario. Nunca.
30
+
31
+ ## Éxito y error que solo se distinguen por timbre
32
+
33
+ Con pérdida de agudos, en un speaker malo o con el volumen bajo, los dos suenan igual. La diferencia tiene que estar en el contorno: ascendente para éxito, descendente para error.
34
+
35
+ ## Audio como único canal de información crítica
36
+
37
+ Un usuario con hipoacusia, con el sonido apagado o en un lugar ruidoso pierde la información. Siempre acompañado de señal visual.
38
+
39
+ ## Haptic y audio desfasados
40
+
41
+ Arriba de ~30 ms se perciben como dos eventos y se siente roto. Y si el haptic está desactivado, el evento no puede quedarse sin ningún feedback.
42
+
43
+ ## Duplicar información entre audio y haptic
44
+
45
+ Si el haptic ya comunica intensidad, subir el audio para "reforzar" solo agrega molestia.
46
+
47
+ ## Depender del grave en dispositivos chicos
48
+
49
+ Un sonido de UI cuyo peso vive en 80 Hz no existe en el speaker de un teléfono. Con haptics, el grave es trabajo del haptic; sin haptics, el sonido tiene que leerse en medios.
50
+
51
+ ## Un set sin toggle
52
+
53
+ Los sonidos de navegación repetitivos tienen que poder apagarse, y apagarlos no debe silenciar los críticos. Controles de volumen separados de música y SFX.
54
+
55
+ ## Diseñar el set sin probar navegación real
56
+
57
+ Un sonido aprobado clic por clic se vuelve insoportable cuando el usuario recorre seis pantallas en cuatro segundos. Probar con flujos reales, a velocidad real.
@@ -0,0 +1,150 @@
1
+ ---
2
+ name: voice-pipeline
3
+ description: "Pipeline de voz: script de VO, casting, sesiones de grabacion, naming y batch processing, localizacion, lipsync y barks. Usar para: dialogo grabado, voice over, doblaje, localizacion de voz, gestion de assets de VO."
4
+ category: "audio"
5
+ argument-hint: "[script | casting | naming | loc | barks]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit
8
+ ---
9
+ # voice-pipeline — Voz y Localización
10
+
11
+ Gestiona el ciclo completo de voz grabada: del script al asset integrado y localizado.
12
+
13
+ La voz es el área de audio donde los errores son **más caros**: rehacer una sesión de grabación cuesta dinero y agenda de actores, y un error de naming multiplicado por 12 idiomas es inmanejable a mano.
14
+
15
+ ## Cuándo usar
16
+
17
+ - Preparar un script de VO para grabación
18
+ - Definir naming y estructura antes de recibir assets
19
+ - Planificar localización a varios idiomas
20
+ - Gestionar barks (chatter de combate) y su variación
21
+ - El pipeline de VO se desordenó y hay que reorganizarlo
22
+
23
+ ## Input
24
+
25
+ 1. Leer audio bible (dirección de voz si existe) y el guion narrativo
26
+ 2. Determinar: cuántos idiomas, cuántos personajes, si hay lipsync
27
+ 3. Preguntar al usuario: presupuesto de grabación, si hay actores ya contratados, y plataforma de destino
28
+
29
+ ---
30
+
31
+ ## Naming — la decisión más importante
32
+
33
+ **El naming se define antes de grabar una sola línea.** Renombrar 4.000 archivos × 12 idiomas después no es una tarea, es un proyecto.
34
+
35
+ Patrón recomendado:
36
+
37
+ ```
38
+ vo_<personaje>_<contexto>_<id>_<variante>
39
+ vo_kira_combat_taunt_003_a
40
+ vo_kira_story_ch02_017
41
+ ```
42
+
43
+ **Requisitos del patrón:**
44
+ - **ID estable y único** — nunca se reusa, ni si la línea se corta. Los huecos son gratis; renumerar no
45
+ - **Sin espacios ni acentos** — sobrevive a cualquier filesystem y a batch scripts
46
+ - **El idioma NO va en el nombre del archivo** — va en la ruta o en el bank de idioma. Así el mismo nombre resuelve en cualquier locale
47
+ - **Ordenable alfabéticamente** en el orden en que se usa
48
+ - **Longitud acotada** — algunas plataformas tienen límites de path
49
+
50
+ El ID es la llave que une script, sesión de grabación, asset, subtítulo y traducción. Si cambia en algún punto, el vínculo se rompe.
51
+
52
+ ## Script de VO
53
+
54
+ Lo que el actor y el director necesitan por línea:
55
+
56
+ | Campo | Por qué |
57
+ |---|---|
58
+ | **ID** | La llave de todo el pipeline |
59
+ | **Personaje** | |
60
+ | **Texto** | Exacto, es lo que se graba y se subtitula |
61
+ | **Contexto** | Qué pasó antes; sin esto la actuación es a ciegas |
62
+ | **Dirección** | Emoción, intensidad, a quién le habla |
63
+ | **Restricción de duración** | Si tiene que calzar en una animación o un hueco de gameplay |
64
+ | **Tomas pedidas** | Cuántas variantes de intención |
65
+
66
+ **El contexto es lo que más se omite y lo que más arruina sesiones.** Un actor grabando líneas sueltas en orden alfabético, sin saber a quién le habla ni qué acaba de pasar, entrega material que no sirve y hay que volver a convocarlo.
67
+
68
+ **Orden de grabación:** por personaje y por escena, no por ID. Agrupar además por intensidad emocional — dejar los gritos para el final de la sesión, porque desgastan la voz y arruinan lo que venga después.
69
+
70
+ ## Casting
71
+
72
+ - **Rango, no solo timbre** — el personaje que grita en el acto tres necesita un actor que pueda gritar sin perder la voz
73
+ - **Distinguibilidad** — dos personajes que suenan parecido confunden en un juego donde el jugador no siempre ve quién habla. Test: escuchar sin ver
74
+ - **Disponibilidad para pickups** — siempre hay pickups. Un actor imposible de reconvocar es un riesgo de producción
75
+ - **Consistencia entre idiomas** — el casting de localización debería mantener el *rol tímbrico*, no imitar al actor original
76
+
77
+ ## Barks
78
+
79
+ El chatter de combate tiene reglas propias porque se escucha muchísimo:
80
+
81
+ - **Muchas variantes por intención** — mínimo 5-8 por tipo. Un bark repetido es lo primero que el jugador nota
82
+ - **Cortos** — 0.5 a 2 s. Un bark largo se pisa con el gameplay
83
+ - **Cooldown global por personaje y por tipo** — dos enemigos gritando lo mismo a la vez suena a bug
84
+ - **Prioridad baja** — un bark nunca debe tapar diálogo narrativo ni feedback del jugador
85
+ - **Bus separado** de `Dialogue` para que no duckeen la música (ver `/audio-mix`)
86
+ - **Interrumpibles** — si el personaje muere a mitad del bark, se corta
87
+
88
+ ## Localización
89
+
90
+ | Decisión | Recomendación |
91
+ |---|---|
92
+ | Estructura | Un bank o carpeta por idioma, mismos nombres de archivo adentro |
93
+ | Idioma en runtime | Se resuelve cargando el bank del locale, sin lógica en gameplay |
94
+ | Fallback | Idioma base si falta el asset — nunca silencio |
95
+ | Expansión de texto | El alemán y el español crecen 20-35% sobre el inglés: los huecos de tiempo tienen que tolerarlo |
96
+ | Subtítulos | Mismo ID que el audio. Un ID sin subtítulo es un bug de accesibilidad |
97
+ | Sin doblar | Idiomas con subtítulo solo: definir explícitamente cuáles y que la mezcla lo contemple |
98
+
99
+ **La expansión de texto es el problema práctico más común.** Una línea que calza justo en inglés se pasa 30% en alemán, y si hay una animación fija o un hueco de gameplay, no entra. Presupuestar el hueco contra el idioma más largo del target, no contra el inglés.
100
+
101
+ ## Procesamiento por lotes
102
+
103
+ El VO llega en crudo y necesita el mismo tratamiento en miles de archivos. Lo que debe ser automatizado, no manual:
104
+
105
+ 1. **Recorte de silencios** con umbral consistente
106
+ 2. **Normalización de loudness** a un target común
107
+ 3. **De-noise / de-click** si la fuente lo pide
108
+ 4. **Fades** de entrada y salida cortos
109
+ 5. **Verificación**: sample rate, bit depth, canales, duración vs restricción
110
+ 6. **Reporte** de los que no cumplen
111
+
112
+ El paso 5 y 6 son los que hay que exigir: sin verificación automática, los assets que no cumplen se descubren en integración.
113
+
114
+ ## Lipsync
115
+
116
+ - **Basado en fonemas** (extraído del audio o del texto) o **basado en amplitud** (más barato, mucho peor)
117
+ - Si hay lipsync, el **texto tiene que coincidir exactamente** con lo grabado — una improvisación del actor rompe la sincronía
118
+ - La localización necesita lipsync regenerado por idioma, o aceptar el desfasaje explícitamente
119
+ - Los pickups tienen que regenerar el lipsync de la línea afectada
120
+
121
+ ---
122
+
123
+ ## Proceso
124
+
125
+ 1. **Definir el naming** y congelarlo. Este paso primero, sin excepción
126
+ 2. **Armar el script** con contexto y dirección por línea
127
+ 3. **Planificar las sesiones** por personaje/escena, con los gritos al final
128
+ 4. **Definir la estructura** de localización y el fallback
129
+ 5. **Definir el pipeline** de batch con su paso de verificación
130
+ 6. **Definir barks** con variantes, cooldown y bus
131
+ 7. **Escribir** — preguntar "¿Escribo el pipeline a `<path>`?" antes de usar Write
132
+
133
+ ---
134
+
135
+ ## Verdict
136
+
137
+ - **READY** — naming congelado, script con contexto y dirección, estructura de localización con fallback, pipeline de batch con verificación automática
138
+ - **CONCERNS** — el pipeline existe pero el script no tiene contexto por línea, o la expansión de texto no se presupuestó, o los barks no tienen cooldown
139
+ - **BLOCKED** — el naming no está definido: cualquier grabación antes de eso genera trabajo que se va a rehacer
140
+
141
+ ## Anti-patterns
142
+
143
+ > → Read references/anti-patterns.md
144
+
145
+ ## Next steps
146
+
147
+ - `/audio-mix` para el bus de diálogo y el ducking
148
+ - `/audio-spec` para el contrato de eventos de barks (concurrencia y cooldown)
149
+ - `/audio-audit` para verificar los assets entregados contra el spec
150
+ - `/middleware-integration` para los banks de idioma
@@ -0,0 +1,69 @@
1
+ # Voice Pipeline — Anti-patterns
2
+
3
+ ## Grabar antes de definir el naming
4
+
5
+ El error más caro del pipeline. Renombrar 4.000 archivos × 12 idiomas, y actualizar script, subtítulos y referencias en el middleware, no es una tarea: es un proyecto. El naming se congela primero.
6
+
7
+ ## Idioma en el nombre del archivo
8
+
9
+ `vo_kira_line_003_es.wav` obliga a lógica de resolución de nombre en runtime. El idioma va en la ruta o en el bank; el nombre del archivo es idéntico en todos los locales.
10
+
11
+ ## Renumerar IDs
12
+
13
+ Se corta una línea y se renumeran las siguientes para "que quede ordenado". Se rompe el vínculo con subtítulos, traducciones y assets ya grabados. Los huecos en la numeración son gratis.
14
+
15
+ ## Script sin contexto
16
+
17
+ El actor graba líneas sueltas en orden alfabético sin saber a quién le habla ni qué acaba de pasar. El material no sirve y hay que reconvocarlo. El contexto por línea es obligatorio.
18
+
19
+ ## Grabar en orden de ID
20
+
21
+ El orden es por personaje y por escena. Y los gritos al final de la sesión: desgastan la voz y arruinan todo lo que venga después.
22
+
23
+ ## Casting por timbre solamente
24
+
25
+ El personaje que grita en el acto tres necesita un actor con rango para gritar sin perder la voz. Y si dos personajes suenan parecido, el jugador que no ve quién habla se confunde.
26
+
27
+ ## Actor imposible de reconvocar
28
+
29
+ Siempre hay pickups. Un actor sin disponibilidad futura es un riesgo de producción, no un detalle de contrato.
30
+
31
+ ## Presupuestar los huecos contra el inglés
32
+
33
+ El alemán y el español crecen 20-35%. Una línea que calza justo en inglés no entra en alemán, y si hay animación fija, no hay arreglo. Presupuestar contra el idioma más largo del target.
34
+
35
+ ## Fallback a silencio
36
+
37
+ Falta el asset en un idioma y no suena nada. El fallback es el idioma base, siempre.
38
+
39
+ ## Subtítulo sin el mismo ID
40
+
41
+ Si el subtítulo no comparte la llave con el audio, mantener los dos sincronizados pasa a ser manual. Y una línea sin subtítulo es un bug de accesibilidad, no un pendiente.
42
+
43
+ ## Barks con pocas variantes
44
+
45
+ Un bark repetido es lo primero que el jugador nota. Mínimo 5-8 por intención.
46
+
47
+ ## Barks sin cooldown
48
+
49
+ Tres enemigos gritan la misma frase simultáneamente y suena a bug. Cooldown global por personaje y por tipo.
50
+
51
+ ## Barks en el bus de diálogo
52
+
53
+ Cada bark de combate duckea la música. Bus separado.
54
+
55
+ ## Barks que no se interrumpen
56
+
57
+ El personaje muere y su grito sigue sonando desde un cadáver.
58
+
59
+ ## Batch sin verificación
60
+
61
+ Procesar miles de archivos sin un paso que valide sample rate, canales y duración deja que lo que no cumple se descubra en integración, cuando ya es tarde.
62
+
63
+ ## Lipsync con texto que no coincide
64
+
65
+ El actor improvisó y el texto de referencia quedó viejo. La sincronía se rompe y nadie sabe por qué. El texto grabado y el de referencia son el mismo o el lipsync miente.
66
+
67
+ ## Localización sin regenerar lipsync
68
+
69
+ O se regenera por idioma, o se acepta el desfasaje explícitamente como decisión. Lo que no se puede es descubrirlo en certificación.