claude-code-arcane 2.1.0 → 2.3.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 (89) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +57 -55
  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/agents/career/career-strategist.md +88 -0
  10. package/agents/career/cv-reviewer.md +81 -0
  11. package/agents/career/hiring-manager.md +68 -0
  12. package/agents/career/mock-interviewer.md +76 -0
  13. package/agents/freelance/client-screener.md +84 -0
  14. package/agents/freelance/discovery-call.md +65 -0
  15. package/agents/freelance/pipeline-strategist.md +99 -0
  16. package/agents/freelance/proposal-reviewer.md +82 -0
  17. package/dist/cli.js +52 -13
  18. package/docs/RELEASE-SETUP.md +1 -1
  19. package/docs/SKILLS-CATALOG.md +47 -3
  20. package/docs/USER-GUIDE.md +77 -72
  21. package/docs/agent-hierarchy.md +21 -1
  22. package/docs/presentations/build_arcane_deck.py +2 -2
  23. package/docs/presentations/build_arcane_deck_12.py +2 -2
  24. package/package.json +2 -2
  25. package/profiles/audio.yaml +45 -0
  26. package/profiles/freelance.yaml +43 -0
  27. package/profiles/job-hunt.yaml +5 -2
  28. package/rules/drafter-reviewer.md +16 -3
  29. package/rules/freelance-guardrails.md +53 -0
  30. package/rules/gamedev/audio-code.md +45 -0
  31. package/skills/adaptive-music/SKILL.md +171 -0
  32. package/skills/adaptive-music/references/anti-patterns.md +53 -0
  33. package/skills/audio-audit/SKILL.md +164 -0
  34. package/skills/audio-audit/references/anti-patterns.md +65 -0
  35. package/skills/audio-audit/scripts/check_assets.py +208 -0
  36. package/skills/audio-bible/SKILL.md +119 -0
  37. package/skills/audio-bible/references/anti-patterns.md +39 -0
  38. package/skills/audio-mix/SKILL.md +151 -0
  39. package/skills/audio-mix/references/anti-patterns.md +65 -0
  40. package/skills/audio-spec/SKILL.md +107 -0
  41. package/skills/audio-spec/references/anti-patterns.md +45 -0
  42. package/skills/career-registry/SKILL.md +95 -0
  43. package/skills/career-registry/scripts/career_registry.py +488 -0
  44. package/skills/client-screen/SKILL.md +83 -0
  45. package/skills/client-screen/references/red-flags.md +95 -0
  46. package/skills/cover-letter/SKILL.md +4 -3
  47. package/skills/cv-tailor/SKILL.md +11 -2
  48. package/skills/freelance-deliver/SKILL.md +90 -0
  49. package/skills/freelance-hunt/SKILL.md +126 -0
  50. package/skills/freelance-hunt/references/templates/Connects.md +39 -0
  51. package/skills/freelance-hunt/references/templates/Contrato.md +60 -0
  52. package/skills/freelance-hunt/references/templates/Propuesta.md +66 -0
  53. package/skills/freelance-kickoff/SKILL.md +94 -0
  54. package/skills/freelance-pipeline/SKILL.md +109 -0
  55. package/skills/freelance-pipeline/scripts/import_history.py +425 -0
  56. package/skills/freelance-profile/SKILL.md +93 -0
  57. package/skills/freelance-proposal/SKILL.md +112 -0
  58. package/skills/freelance-scan/SKILL.md +196 -0
  59. package/skills/freelance-scan/references/dedup.md +35 -0
  60. package/skills/freelance-scan/references/platforms.md +167 -0
  61. package/skills/freelance-scan/scripts/freelance_search.py +1077 -0
  62. package/skills/interview-prep/SKILL.md +11 -3
  63. package/skills/job-aplicar/SKILL.md +5 -1
  64. package/skills/job-hunt/SKILL.md +17 -0
  65. package/skills/job-outcome/SKILL.md +15 -1
  66. package/skills/job-upskill/SKILL.md +10 -2
  67. package/skills/middleware-integration/SKILL.md +186 -0
  68. package/skills/middleware-integration/references/anti-patterns.md +69 -0
  69. package/skills/midi-compose/SKILL.md +136 -0
  70. package/skills/midi-compose/references/smf-format.md +129 -0
  71. package/skills/midi-compose/scripts/compose_midi.py +326 -0
  72. package/skills/midi-compose/templates/example-composition.json +69 -0
  73. package/skills/music-composition/SKILL.md +106 -0
  74. package/skills/music-composition/references/form.md +57 -0
  75. package/skills/music-composition/references/game-music.md +82 -0
  76. package/skills/music-composition/references/harmony.md +82 -0
  77. package/skills/music-composition/references/melody.md +48 -0
  78. package/skills/music-composition/references/orchestration.md +69 -0
  79. package/skills/music-composition/references/rhythm-groove.md +49 -0
  80. package/skills/procedural-audio/SKILL.md +157 -0
  81. package/skills/procedural-audio/references/anti-patterns.md +45 -0
  82. package/skills/sfx-design/SKILL.md +130 -0
  83. package/skills/sfx-design/references/anti-patterns.md +53 -0
  84. package/skills/spatial-audio/SKILL.md +139 -0
  85. package/skills/spatial-audio/references/anti-patterns.md +53 -0
  86. package/skills/ui-sound-design/SKILL.md +133 -0
  87. package/skills/ui-sound-design/references/anti-patterns.md +57 -0
  88. package/skills/voice-pipeline/SKILL.md +150 -0
  89. package/skills/voice-pipeline/references/anti-patterns.md +69 -0
@@ -0,0 +1,82 @@
1
+ # Armonía
2
+
3
+ ## Armonía funcional
4
+
5
+ Tres funciones, y todo lo demás es sustitución o adorno:
6
+
7
+ | Función | Grados (mayor) | Efecto |
8
+ |---|---|---|
9
+ | **Tónica** | I, vi, iii | Reposo, llegada |
10
+ | **Subdominante** | IV, ii | Salida, preparación |
11
+ | **Dominante** | V, vii° | Tensión, exige resolución |
12
+
13
+ El movimiento fuerte es subdominante → dominante → tónica. Todo lo demás es demorar, sustituir o negar esa expectativa.
14
+
15
+ **Ritmo armónico** — la velocidad de cambio de acorde es una palanca independiente de la progresión. La misma secuencia a un acorde por compás vs dos por compás cambia la urgencia sin cambiar una nota.
16
+
17
+ ## Cadencias
18
+
19
+ | Cadencia | Movimiento | Efecto |
20
+ |---|---|---|
21
+ | Auténtica perfecta | V → I, con tónica en soprano y bajo | Cierre total |
22
+ | Auténtica imperfecta | V → I invertido o sin tónica arriba | Cierre débil, sigue |
23
+ | Plagal | IV → I | Reposo sin tensión previa; sabor modal/himno |
24
+ | Semicadencia | → V | Pausa abierta, pregunta |
25
+ | Rota | V → vi | Sorpresa, evita el cierre esperado |
26
+ | Suspendida (picardía inversa) | resolución a menor donde se esperaba mayor | Ensombrece |
27
+
28
+ ## Armonía modal
29
+
30
+ Cuando la progresión no quiere funcionalidad, el modo aporta color por su grado característico:
31
+
32
+ | Modo | Grado característico | Carácter |
33
+ |---|---|---|
34
+ | Jónico | — | Neutro, brillante |
35
+ | Dórico | ♮6 (sobre menor) | Menor sin tragedia; folk, aventura |
36
+ | Frigio | ♭2 | Tensión oscura, MENA/flamenco |
37
+ | Lidio | ♯4 | Suspensión luminosa, asombro |
38
+ | Mixolidio | ♭7 | Rock/folk, menos gravedad que jónico |
39
+ | Eólico | ♭6 natural | Menor estándar |
40
+ | Locrio | ♭2 y ♭5 | Inestable, casi inusable como centro |
41
+
42
+ En modal, evitar el V mayor: reintroduce función dominante y colapsa el modo a mayor/menor.
43
+
44
+ ## Armonía cromática
45
+
46
+ - **Acordes prestados** — tomar del menor paralelo en un contexto mayor (♭VI, ♭VII, iv). Ensombrece sin modular
47
+ - **Dominantes secundarias** — V/x tonicaliza cualquier grado. `C - E7 - Am` hace de Am un centro momentáneo
48
+ - **Sustitución tritonal** — reemplazar V7 por el ♭II7. `G7 → D♭7` antes de C: mismo tritono, bajo cromático
49
+ - **Napolitana (♭II)** — color dramático de aproximación a la dominante
50
+ - **Acordes de sexta aumentada** — resolución cromática doble hacia V, muy tensa
51
+
52
+ ## Modulación
53
+
54
+ De más suave a más abrupta:
55
+
56
+ 1. **Directa a tonalidad cercana** (relativo, dominante, subdominante): casi imperceptible
57
+ 2. **Por pivote** — un acorde común a las dos tonalidades reinterpretado. La técnica más limpia
58
+ 3. **Por dominante secundaria** — introducir el V de la nueva tonalidad
59
+ 4. **Cromática por bajo** — mover el bajo por semitonos hasta el nuevo centro
60
+ 5. **Enarmónica** — reinterpretar un acorde ambiguo (disminuido, sexta aumentada) hacia otro lado
61
+ 6. **Truncada / directa lejana** — cortar y arrancar en la nueva tonalidad. Efecto de corte cinematográfico
62
+
63
+ Para juegos, la modulación por pivote es la única que sobrevive a un cambio de estado en tiempo real sin sonar a error.
64
+
65
+ ## Voice leading
66
+
67
+ - Mover cada voz lo mínimo posible; la conducción suave es lo que hace que una progresión "funcione"
68
+ - Resolver las tensiones: 7ª baja por grado, 4ª suspendida baja a 3ª
69
+ - Evitar 5ªs y 8ªs paralelas entre voces exteriores en contexto tonal tradicional (en pop/rock son idiomáticas)
70
+ - Evitar el salto de la voz más aguda junto con el bajo en la misma dirección al llegar a una cadencia
71
+ - Doblar la tónica antes que la 5ª, y la 5ª antes que la 3ª
72
+
73
+ ## Reharmonización
74
+
75
+ Palancas, de menor a mayor impacto:
76
+
77
+ 1. Cambiar inversiones — mismo acorde, bajo distinto
78
+ 2. Agregar extensiones (7, 9, 11, 13) — color sin cambiar función
79
+ 3. Sustituir por función equivalente — I → vi, V → iii
80
+ 4. Insertar dominantes secundarias entre acordes existentes
81
+ 5. Cambiar el modo del acorde — mayor por menor
82
+ 6. Reemplazar la progresión entera manteniendo la melodía: cada nota melódica admite varios acordes
@@ -0,0 +1,48 @@
1
+ # Melodía
2
+
3
+ ## Qué hace que una melodía se pegue
4
+
5
+ Cuatro propiedades, y ninguna es "ser linda":
6
+
7
+ 1. **Perfil reconocible** — la silueta (sube, se sostiene, cae) es identificable sin el ritmo
8
+ 2. **Un gesto memorable** — un salto, una nota fuera de la escala, una síncopa. Un solo evento distintivo, no cinco
9
+ 3. **Repetición con variación** — el oído necesita reconocer antes de que le interese lo nuevo
10
+ 4. **Relación clara con la armonía** — las notas fuertes caen en tiempos fuertes y son consonantes o tensiones que resuelven
11
+
12
+ Si una melodía no se pega, casi siempre falta el punto 2: es fluida, correcta y sin ningún evento que el oído pueda agarrar.
13
+
14
+ ## Construcción
15
+
16
+ **Grados de escala, no notas.** Escribir `5 - 3 - 2 - 1` en vez de `G - E - D - C` la hace portable y expone la estructura.
17
+
18
+ **Balance salto/grado.** Melodía toda por grados conjuntos: suave y anodina. Toda por saltos: instrumental, difícil de cantar. La proporción típica en música vocal memorable es mayoría de grados con 1-2 saltos ubicados en el punto de mayor interés.
19
+
20
+ **Clímax único.** La nota más aguda debería aparecer una vez, y tarde. Si el punto alto llega en el compás 2, no queda a dónde ir.
21
+
22
+ **Registro como recurso finito.** Cada octava que subís es un recurso que se gasta. Guardá el registro alto para el momento que lo necesita.
23
+
24
+ ## Desarrollo motívico
25
+
26
+ Un motivo es una célula de 2-5 notas. Las transformaciones, de más a menos reconocible:
27
+
28
+ | Transformación | Qué hace |
29
+ |---|---|
30
+ | **Repetición literal** | Establece |
31
+ | **Secuencia** | Mismo motivo, otra altura. La herramienta más eficiente |
32
+ | **Transposición diatónica** | Igual pero adaptado a la escala; cambia intervalos |
33
+ | **Inversión** | Espeja los intervalos. Mismo ADN, otro carácter |
34
+ | **Retrogradación** | Al revés. Reconocible solo si el motivo es rítmicamente distintivo |
35
+ | **Aumentación / disminución** | Duplicar o dividir las duraciones. Aumentación = épico; disminución = urgencia |
36
+ | **Fragmentación** | Quedarse con un trozo y repetirlo. Genera desarrollo/tensión |
37
+ | **Ornamentación** | Rellenar con notas de paso. Cuidado: diluye |
38
+
39
+ En música de juego, la aumentación y la fragmentación de un mismo motivo son la forma más barata de tener 4 variantes de un tema con una sola idea.
40
+
41
+ ## Estructura de frase
42
+
43
+ - **Antecedente / consecuente** — 4+4 compases: la primera termina abierta (semicadencia), la segunda cierra. El patrón de pregunta-respuesta más usado
44
+ - **Sentence** — presentación (2), continuación con fragmentación (2), cadencia (4)
45
+ - **Frases asimétricas** (3, 5, 7 compases) — inquietan, útiles para tensión
46
+ - **Elisión** — la última nota de una frase es la primera de la siguiente. Elimina la respiración, encadena
47
+
48
+ **Prosodia (si hay letra):** las sílabas acentuadas caen en tiempos fuertes y en notas largas. Una melodía que pelea con el acento natural de la palabra suena mal aunque la armonía sea perfecta. Las vocales abiertas soportan notas agudas y largas; las cerradas no.
@@ -0,0 +1,69 @@
1
+ # Orquestación
2
+
3
+ ## Rangos y carácter
4
+
5
+ Rangos prácticos (no extremos virtuosos). El **carácter cambia por registro** en el mismo instrumento — es lo que más se ignora.
6
+
7
+ | Instrumento | Rango práctico | Registro grave | Registro agudo |
8
+ |---|---|---|---|
9
+ | Flauta | C4 – C7 | Aireado, débil, se tapa | Brillante, penetrante |
10
+ | Clarinete | D3 – C6 | Oscuro, cálido, único | Estridente si se fuerza |
11
+ | Oboe | B♭3 – G6 | Nasal, presente | Tenso |
12
+ | Fagot | B♭1 – E5 | Sombrío, cómico | Vulnerable, expresivo |
13
+ | Corno | F2 – F5 | Noble, difuso | Heroico, esfuerzo audible |
14
+ | Trompeta | E3 – C6 | Sólido | Brillante, corta cualquier textura |
15
+ | Trombón | E2 – F4 | Grave, potente | Cantabile |
16
+ | Violín | G3 – E7 | Cálido (cuerda G) | Brillante; muy agudo = tensión |
17
+ | Viola | C3 – E6 | Ronco, melancólico | Delgado |
18
+ | Cello | C2 – C6 | Profundo | El registro más expresivo de la orquesta |
19
+ | Contrabajo | E1 – G4 | Fundamento | Raro, tenso |
20
+ | Voz (soprano) | C4 – A5 | Débil | Potente, esfuerzo audible |
21
+ | Voz (barítono) | A2 – F4 | Cómodo | Intenso |
22
+
23
+ ## Densidad de arreglo
24
+
25
+ **La regla que resuelve el 80% de los problemas: menos elementos, mejor definidos.**
26
+
27
+ | Nivel | Elementos simultáneos | Uso |
28
+ |---|---|---|
29
+ | Íntimo | 1-2 | Momentos de máxima atención |
30
+ | Cámara | 3-5 | Estándar de gameplay sostenido |
31
+ | Pleno | 6-10 | Clímax |
32
+ | Tutti | todo | Una vez, y corto |
33
+
34
+ En música de juego, el nivel de densidad es la palanca adaptativa más eficiente: subir y bajar capas sin cambiar el material.
35
+
36
+ ## Voicing y textura
37
+
38
+ - **Espaciado natural** — intervalos amplios abajo, cerrados arriba. Copia la serie armónica; suena limpio automáticamente
39
+ - **No apilar en el mismo registro** — cuatro instrumentos entre C4 y C5 producen barro. Separar por octavas
40
+ - **Doblar con intención** — al unísono para peso, a la octava para brillo, en 3ªs/6ªs para dulzura. Doblar todo es no doblar nada
41
+ - **Registro medio saturado** — 500 Hz-2 kHz es donde vive el diálogo. En un juego, la música debería *dejar ese rango relativamente libre* si hay VO simultáneo (ver `/audio-mix`)
42
+
43
+ ## Combinaciones que funcionan
44
+
45
+ | Combinación | Efecto |
46
+ |---|---|
47
+ | Cello + corno (unísono) | Calidez con peso |
48
+ | Clarinete grave + viola | Oscuridad ambigua |
49
+ | Flauta + violín (octava) | Brillo aireado |
50
+ | Pizzicato + arpa/mallets | Puntillismo, curiosidad |
51
+ | Cuerdas con sordina + coro suave | Distancia, memoria |
52
+ | Trompas en 5ªs abiertas | Épica; cliché si se abusa |
53
+ | Solo + silencio | Máxima atención |
54
+
55
+ ## Escritura coral / vocal
56
+
57
+ - Rango cómodo, no extremo: la tesitura sostenida importa más que la nota más alta
58
+ - Voice leading estricto: las voces internas se mueven lo mínimo
59
+ - Texto inteligible pide notas más largas y registro medio
60
+ - Vocales abiertas (a, o) para agudos y notas largas; cerradas (i, u) suenan tensas arriba
61
+
62
+ ## Producción-aware
63
+
64
+ Si el material va a un mix con SFX y diálogo encima:
65
+
66
+ - Dejar espacio en 500 Hz-2 kHz cuando puede haber VO
67
+ - El sub (20-60 Hz) suele estar reservado a impactos — no llenarlo con música
68
+ - Los transientes agudos compiten con feedback de UI: si el arreglo tiene mucho hi-hat/percusión brillante, el UI se pierde
69
+ - Arreglos densos sobreviven mal a la compresión lossy de plataforma: el detalle en 6-20 kHz es lo primero que se va
@@ -0,0 +1,49 @@
1
+ # Ritmo y Groove
2
+
3
+ ## Qué es el groove
4
+
5
+ La relación entre una grilla implícita y dónde caen los eventos reales. Sin grilla no hay groove; sin desvío tampoco.
6
+
7
+ Tres capas independientes:
8
+
9
+ 1. **Pulso** — el tempo y su subdivisión
10
+ 2. **Patrón** — qué subdivisiones se atacan
11
+ 3. **Feel** — cuánto se corren los ataques respecto de la grilla, y cómo se acentúan
12
+
13
+ Un patrón correcto con feel plano suena a máquina. El mismo patrón con los backbeats 8-15 ms atrasados y acentuados suena a banda.
14
+
15
+ ## Recursos rítmicos
16
+
17
+ | Recurso | Qué hace |
18
+ |---|---|
19
+ | **Síncopa** | Acentuar una subdivisión débil. El motor de casi todo groove popular |
20
+ | **Anticipación** | Adelantar un ataque medio pulso antes del tiempo fuerte |
21
+ | **Hemiola** | Agrupar 3 donde el metro dice 2 (o al revés). Tensión sin cambiar tempo |
22
+ | **Desplazamiento** | Correr un patrón entero N subdivisiones. Mismo material, otro lugar |
23
+ | **Aumentación / disminución** | Duplicar o partir las duraciones del patrón |
24
+ | **Silencio en el downbeat** | El recurso más fuerte y el menos usado |
25
+ | **Polirritmia** | Dos ciclos de distinta longitud simultáneos (3:2, 4:3). El compuesto se repite cada MCM |
26
+ | **Cross-rhythm** | El acento contradice el metro sostenidamente |
27
+
28
+ ## Feel y microtiming
29
+
30
+ - **Swing** — la primera corchea del par se alarga. Cuantificable como ratio (50:50 recto, ~60:40 swing suave, 66:33 swing fuerte, hasta tresillo)
31
+ - **Laid back** — atacar unos ms después de la grilla. Sensación de relajación, peso
32
+ - **Push** — atacar antes. Urgencia, ansiedad
33
+ - **Flam** — dos instrumentos casi al unísono, corridos unos ms. Engorda el ataque
34
+
35
+ Un desvío de 10-30 ms es feel. Arriba de ~50 ms se percibe como error o como otra subdivisión.
36
+
37
+ ## Métricas impares
38
+
39
+ - **5/4, 7/8** — se sienten como agrupaciones asimétricas (5 = 3+2 o 2+3; 7 = 2+2+3, 3+2+2...). La agrupación importa más que el número
40
+ - **Métrica mixta** — alternar compases. Funciona si el patrón de alternancia es reconocible
41
+ - **Metro aditivo** — construir por células (2+2+3) en vez de dividir el compás
42
+
43
+ Para juegos, las métricas impares complican la sincronización de música adaptativa: los sync points en compás/beat asumen un metro estable. Si el metro cambia, definir los puntos de transición en cues explícitos.
44
+
45
+ ## Groove en el arreglo
46
+
47
+ - **Interlock** — cada instrumento ocupa subdivisiones que los otros dejan libres. El groove emerge del conjunto, no de una parte
48
+ - **Densidad como dinámica** — más subdivisiones atacadas = más energía, sin subir volumen
49
+ - **Espacio** — el groove vive en los silencios. Un patrón con todas las subdivisiones llenas no groovea, machaca
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: procedural-audio
3
+ description: "Audio procedural: footsteps, viento, ambientes y superficies por sintesis en vez de samples. Decidir cuando conviene, disenar el modelo y presupuestar CPU. Usar para: sonido procedural, footsteps sinteticos, ambiente generativo, reducir memoria de audio."
4
+ category: "audio"
5
+ argument-hint: "[decide | footsteps | wind | ambience | budget]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit
8
+ ---
9
+ # procedural-audio — Síntesis en vez de Samples
10
+
11
+ Resuelve por generación los sistemas de audio donde samplear no escala: alta frecuencia de disparo cruzada con muchas dimensiones de variación.
12
+
13
+ ## Cuándo usar
14
+
15
+ - El conteo de assets explota: superficies × intensidades × variantes
16
+ - El presupuesto de memoria no da para la variación que el sistema necesita
17
+ - La repetición se escucha aunque haya muchas variantes
18
+ - El sonido tiene que responder de forma continua a un parámetro (velocidad, material, tamaño)
19
+
20
+ ## Cuándo NO usar
21
+
22
+ Síntesis no es gratis: cuesta CPU por frame y trabajo de tuning. No la uses para sonidos hero (el arma principal, el tema de victoria) — ahí un sample bien diseñado gana en calidad y control. La síntesis rinde en lo frecuente y variable, no en lo memorable y único.
23
+
24
+ ---
25
+
26
+ ## Modos
27
+
28
+ | Modo | Qué hace |
29
+ |---|---|
30
+ | `decide` | Solo la evaluación: ¿conviene sintetizar o samplear? Cuenta de assets y presupuesto |
31
+ | `footsteps` | Diseña el modelo de pasos con resonancias por superficie |
32
+ | `wind` | Diseña el modelo de viento por capas |
33
+ | `ambience` | Diseña el ambiente híbrido: bed sampleado + detalle procedural |
34
+ | `budget` | Solo el presupuesto de CPU y dónde corre cada modelo |
35
+
36
+ ## La decisión
37
+
38
+ Evaluar dos ejes: **frecuencia de disparo** y **dimensiones de variación**.
39
+
40
+ | | Pocas dimensiones | Muchas dimensiones |
41
+ |---|---|---|
42
+ | **Baja frecuencia** | Sample. Siempre | Sample con layer swapping |
43
+ | **Alta frecuencia** | Sample + round-robin | **Procedural** |
44
+
45
+ El caso canónico: footsteps sobre 6 superficies × 3 intensidades, con 20 variantes cada uno, son **360 archivos (~180 MB)** — y a pesar de eso la repetición se escucha en sesiones largas. Un modelo procedural son **~50 KB** y variación infinita.
46
+
47
+ Antes de comprometerte, hacé la cuenta explícita:
48
+
49
+ ```
50
+ assets = superficies × intensidades × variantes
51
+ memoria ≈ assets × tamaño_promedio
52
+ ```
53
+
54
+ Si el resultado es de tres dígitos en archivos, la síntesis ya se justifica sola.
55
+
56
+ ---
57
+
58
+ ## Presupuesto de CPU
59
+
60
+ Esto es lo que decide si el modelo entra o no. Costos de referencia por fuente:
61
+
62
+ | Operación | Costo |
63
+ |---|---|
64
+ | Footstep procedural | ~1-2 ms |
65
+ | Síntesis de viento | ~0.5 ms/frame |
66
+ | Convolución HRTF (512 taps) | ~2 ms/fuente |
67
+ | Encode ambisónico | ~0.1 ms/fuente |
68
+ | Decode ambisónico a binaural | ~1 ms total |
69
+
70
+ **El presupuesto total de audio es 5-10% del frame time.** A 60 fps el frame son 16.6 ms, así que el audio entero dispone de ~0.8-1.7 ms. Un footstep procedural de 1-2 ms **no entra en un solo frame**: hay que amortizarlo (generar por adelantado, cachear el resultado, o generar en un thread de audio con buffer).
71
+
72
+ Ese es el error de cálculo más común: leer "1-2 ms por footstep" y asumir que se puede hacer inline en el update. En un callback de audio de 5-10 ms a 48 kHz / 512 samples hay margen; en el frame de render no.
73
+
74
+ ---
75
+
76
+ ## Modelo de footsteps
77
+
78
+ Tres componentes, cada uno con parámetros expuestos:
79
+
80
+ 1. **Impacto** — burst de ruido filtrado en la frecuencia de resonancia del material, envolvente muy corta
81
+ 2. **Resonancia del material** — filtro resonante en la frecuencia característica
82
+ 3. **Textura** — ruido con envolvente más larga: grava que se mueve, hojas, agua
83
+
84
+ **Frecuencias de resonancia por superficie:**
85
+
86
+ | Superficie | Frecuencia | Textura |
87
+ |---|---|---|
88
+ | Concreto | 150 Hz | Mínima, ataque seco |
89
+ | Madera | 250 Hz | Resonancia larga, crujido |
90
+ | Metal | 500 Hz | Cola muy larga, armónicos |
91
+ | Grava | 300 Hz | Ruido dominante, larga |
92
+
93
+ **Parámetros de entrada** desde gameplay, todos normalizados 0-1:
94
+
95
+ | Parámetro | Efecto |
96
+ |---|---|
97
+ | Material | Selecciona frecuencia y perfil de textura |
98
+ | Intensidad (velocidad) | Amplitud, brillo, duración del ataque |
99
+ | Peso del personaje | Frecuencia base, cantidad de sub |
100
+ | Humedad de superficie | Capa de agua, amortiguación de la resonancia |
101
+
102
+ La variación sale de randomizar levemente cada parámetro por paso, no de elegir entre archivos. Eso es lo que hace la variación infinita.
103
+
104
+ ## Modelo de viento
105
+
106
+ Ruido filtrado con modulación lenta, en capas:
107
+
108
+ - **Base** — ruido rosa con low-pass, cutoff modulado lento (0.05-0.2 Hz)
109
+ - **Ráfagas** — amplitud modulada por ruido de baja frecuencia, con picos ocasionales
110
+ - **Silbido** — filtro resonante en 800 Hz-2 kHz, solo cuando la intensidad supera un umbral
111
+ - **Detalle** — high-pass sutil que aparece con la intensidad
112
+
113
+ Parámetro principal: intensidad 0-1, mapeada a cutoff, profundidad de modulación y presencia de silbido. Un solo parámetro maneja de brisa a tormenta.
114
+
115
+ ## Ambientes
116
+
117
+ La síntesis pura de ambiente suele sonar sintética. El enfoque híbrido gana:
118
+
119
+ - **Bed** — sample loopeado largo (el único sample del sistema)
120
+ - **Detalle** — one-shots posicionados por lógica procedural: qué sonido, cada cuánto, desde dónde
121
+ - **Modulación** — filtro y volumen del bed manejados por parámetros de entorno (interior/exterior, clima, hora)
122
+
123
+ La sensación de "vivo" viene de la **distribución temporal y espacial** de los detalles, no de sintetizarlos. Un pájaro sampleado que aparece en posiciones y momentos impredecibles suena más vivo que uno sintetizado en loop fijo.
124
+
125
+ ---
126
+
127
+ ## Proceso
128
+
129
+ 1. **Hacer la cuenta** de assets y memoria; si no justifica, parar y usar samples
130
+ 2. **Presupuestar CPU** contra el 5-10% del frame, y decidir dónde corre (frame vs thread de audio vs precomputado)
131
+ 3. **Diseñar el modelo** por componentes con parámetros expuestos
132
+ 4. **Mapear los parámetros** de gameplay, normalizados y clampeados en el boundary
133
+ 5. **Definir el fallback** — qué suena si el modelo se desactiva por presupuesto en plataforma baja
134
+ 6. **Escribir** — preguntar "¿Escribo el diseño a `<path>`?" antes de usar Write
135
+
136
+ ### Fallback obligatorio
137
+
138
+ Toda plataforma tiene un piso. Si el modelo procedural no entra en la plataforma más baja del target, hace falta un camino de samples reducido. Decidirlo en el diseño, no cuando falla la certificación.
139
+
140
+ ---
141
+
142
+ ## Verdict
143
+
144
+ - **READY** — la cuenta justifica la síntesis, el presupuesto de CPU cierra con dónde corre, los parámetros están mapeados y hay fallback
145
+ - **CONCERNS** — el modelo está diseñado pero el presupuesto de CPU no se verificó en la plataforma más baja, o falta el fallback
146
+ - **BLOCKED** — no está claro el conteo de assets ni la frecuencia de disparo, así que no se puede decidir si conviene
147
+
148
+ ## Anti-patterns
149
+
150
+ > → Read references/anti-patterns.md
151
+
152
+ ## Next steps
153
+
154
+ - `/sfx-design` para los sonidos hero, que siguen siendo samples
155
+ - `/audio-audit` para medir el costo real de CPU en runtime, no el estimado
156
+ - `/middleware-integration` para exponer los parámetros como RTPCs
157
+ - `/spatial-audio` si las fuentes procedurales además se posicionan en 3D
@@ -0,0 +1,45 @@
1
+ # Audio Procedural — Anti-patterns
2
+
3
+ ## Síntesis por elegancia
4
+
5
+ Procedural no es mejor por ser procedural. Para un sonido hero, un sample bien diseñado gana en calidad, en control y en tiempo de producción. La síntesis rinde donde samplear no escala; en el resto es trabajo extra con peor resultado.
6
+
7
+ ## Confundir el presupuesto de frame con el de callback
8
+
9
+ "1-2 ms por footstep" leído como "se puede hacer inline en el update" es el error de cálculo más frecuente. El audio entero dispone de 0.8-1.7 ms por frame a 60 fps. El footstep hay que amortizarlo: precomputar, cachear, o generarlo en el thread de audio con buffer.
10
+
11
+ ## No medir, estimar
12
+
13
+ Los costos de referencia son puntos de partida, no promesas. El costo real depende de plataforma, compilador y qué más corre. Medir con el profiler del middleware antes de comprometer la arquitectura.
14
+
15
+ ## Un solo parámetro sin curva
16
+
17
+ Mapear intensidad 0-1 linealmente a amplitud produce una respuesta que se siente muerta en la mitad del rango. La percepción de volumen y de brillo es logarítmica: la curva importa tanto como el rango.
18
+
19
+ ## Parámetros sin clamp
20
+
21
+ Un valor de velocidad que llega en 3.7 cuando el modelo espera 0-1 produce ruido blanco a todo volumen. Normalizar y clampear en el boundary, del lado de gameplay.
22
+
23
+ ## Sintetizar el ambiente entero
24
+
25
+ El ambiente puramente sintético suena sintético. La sensación de "vivo" viene de la distribución temporal y espacial de los detalles, no de generarlos. Bed sampleado + detalles posicionados proceduralmente gana.
26
+
27
+ ## Variación sin límites perceptuales
28
+
29
+ Randomizar los parámetros con rango amplio produce pasos que suenan a materiales distintos entre sí. La variación tiene que ser suficiente para no repetir y chica para no romper la identidad.
30
+
31
+ ## Sin fallback de plataforma
32
+
33
+ El modelo entra cómodo en PC y no entra en el target más bajo. Si eso se descubre en certificación, hay que rehacer el sistema contra reloj. El camino de samples reducido se decide en el diseño.
34
+
35
+ ## Reemplazar todo de golpe
36
+
37
+ Migrar el sistema de audio entero a procedural en un paso hace imposible saber qué regresión vino de dónde. Un sistema por vez, midiendo antes y después.
38
+
39
+ ## Ignorar que sigue siendo una fuente 3D
40
+
41
+ Un footstep procedural igual necesita posición, atenuación y — si son varios personajes — límite de voces. La síntesis resuelve la memoria, no la gestión de voces.
42
+
43
+ ## Modelo sin parámetros expuestos
44
+
45
+ Si el modelo está hardcodeado, no es procedural: es un sample generado en runtime, con todos los costos y ninguna ventaja. El valor está en que gameplay pueda modularlo.
@@ -0,0 +1,130 @@
1
+ ---
2
+ name: sfx-design
3
+ description: "Diseno de efectos de sonido: capas attack/body/tail, variacion y round-robin, pitch randomization, layering de impactos, anti-repeticion. Usar para: disenar SFX, sonidos de impacto, armas, feedback de accion."
4
+ category: "audio"
5
+ argument-hint: "[sound-name | layers | variation | review]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit
8
+ ---
9
+ # sfx-design — Diseño de Efectos
10
+
11
+ Diseña *cómo suena* un efecto: de qué capas se construye, cómo varía, y por qué se lee como el evento que representa.
12
+
13
+ `/audio-spec` escribe el contrato (qué lo dispara, con qué límites). Esta skill diseña el sonido.
14
+
15
+ ## Cuándo usar
16
+
17
+ - Sonidos hero que merecen diseño individual: el arma principal, el golpe crítico, el skill definitivo
18
+ - Cuando un efecto "no se siente" y hay que diagnosticar por qué
19
+ - Cuando la biblioteca se escucha repetitiva y hay que resolver variación
20
+ - Antes de grabar o comprar assets, para saber qué buscar
21
+
22
+ ## Modos
23
+
24
+ | Modo | Qué hace |
25
+ |---|---|
26
+ | `sound-name` | Diseña un efecto concreto de punta a punta |
27
+ | `layers` | Solo la anatomía por capas: qué banda ocupa cada una |
28
+ | `variation` | Solo el plan de variación: variantes, round-robin, randomización, layer swapping |
29
+ | `review` | Diagnostica un efecto existente contra la tabla de síntomas |
30
+
31
+ ## Input
32
+
33
+ 1. Leer audio bible (paleta, frequency allocation) y el spec del sonido si existe
34
+ 2. Preguntar al usuario: qué evento representa, qué debe sentir el jugador, y si hay referencia sonora
35
+ 3. Identificar la restricción: ¿este sonido suena una vez por partida o cien veces por minuto? Eso cambia todo
36
+
37
+ ---
38
+
39
+ ## Anatomía de un efecto
40
+
41
+ Todo efecto se lee en tres partes. Diseñarlas por separado es la diferencia entre un sonido que funciona y uno que "le falta algo":
42
+
43
+ | Capa | Duración típica | Qué comunica | Se percibe como |
44
+ |---|---|---|---|
45
+ | **Attack** | 1-20 ms | Qué material, cuánta fuerza | Impacto, precisión, "punch" |
46
+ | **Body** | 20-200 ms | Qué tamaño, qué objeto | Peso, escala |
47
+ | **Tail** | 50 ms-2 s | Dónde está, qué espacio | Ambiente, distancia, potencia |
48
+
49
+ **Diagnóstico por síntoma:**
50
+
51
+ | Síntoma | Capa culpable | Arreglo |
52
+ |---|---|---|
53
+ | "Se siente débil" | Attack sin transiente | Sumar una capa de click/crack corta y brillante |
54
+ | "No tiene peso" | Body sin graves | Sumar sub o cuerpo en 60-150 Hz |
55
+ | "Suena a sample de librería" | Tail genérico o ausente | Cola propia, o reverb del espacio real del juego |
56
+ | "Es confuso, no se lee" | Demasiadas capas peleando | Sacar capas hasta que se lea; casi siempre 3 alcanzan |
57
+ | "Se siente lento" | Attack largo | Recortar el pre-ataque; el transiente tiene que estar en los primeros ms |
58
+ | "Molesta después de un rato" | Energía en 2-6 kHz | Bajar; esa banda fatiga rápido |
59
+
60
+ ## Layering
61
+
62
+ Construir por función, no por acumulación. Un impacto potente típico:
63
+
64
+ 1. **Sub** (40-80 Hz) — peso físico. Corto, 60-120 ms. En un handheld no se va a oír: no puede ser la única fuente de fuerza
65
+ 2. **Punch** (100-300 Hz) — el cuerpo que se percibe en cualquier speaker
66
+ 3. **Crack** (2-5 kHz) — la definición y el material
67
+ 4. **Tail** — el espacio
68
+
69
+ **Regla:** cada capa ocupa una banda distinta. Si dos capas pelean la misma banda, una sobra. Es el mismo principio de frequency allocation del audio bible, aplicado dentro de un solo sonido.
70
+
71
+ Cuatro capas es el techo práctico. Arriba de eso el sonido pierde legibilidad y ganás solo peso de archivo.
72
+
73
+ ## Variación y anti-repetición
74
+
75
+ Un sonido sin variación se vuelve audible **como sonido** en vez de como evento. En eventos frecuentes eso pasa alrededor de los 20 minutos de juego.
76
+
77
+ Las herramientas, de más a menos efectiva:
78
+
79
+ | Técnica | Cómo | Nota |
80
+ |---|---|---|
81
+ | **Variantes reales** | 4-8 grabaciones/renders distintos | La única que varía el timbre de verdad |
82
+ | **Round-robin** | Recorrer variantes en orden, sin repetir la última | Le gana a random puro: random repite |
83
+ | **Pitch randomization** | ±2% a ±4% | ±3% es variación; ±20% cambia el objeto |
84
+ | **Volume randomization** | ±1 a ±2 dB | Sutil, siempre suma |
85
+ | **Layer swapping** | Fijar el body, rotar attack y tail | Combinatorio: 3 attacks × 3 tails = 9 sonidos con 6 assets |
86
+ | **Filtro aleatorio** | Cutoff ±10% | Último recurso, se nota poco |
87
+
88
+ **Layer swapping es la de mejor relación resultado/costo** y la menos usada. Con 4 attacks, 2 bodies y 3 tails tenés 24 combinaciones desde 9 archivos.
89
+
90
+ Si el evento es de altísima frecuencia y muchas dimensiones (footsteps sobre 6 superficies × 3 intensidades), la respuesta no es más variantes: es `/procedural-audio`.
91
+
92
+ ## Estilización vs realismo
93
+
94
+ El sonido realista casi nunca es el sonido correcto. Un disparo real es un chasquido corto y poco impresionante; una puerta real suena a nada.
95
+
96
+ Criterio: el efecto tiene que comunicar **la función en el gameplay**, no la física. Si el arma hace 40 de daño y la otra 90, tienen que sonar distintas en peso aunque sean el mismo calibre. La legibilidad le gana al realismo siempre que compiten.
97
+
98
+ ---
99
+
100
+ ## Proceso
101
+
102
+ 1. **Definir la lectura** — en una frase, qué tiene que entender el jugador al escucharlo
103
+ 2. **Diseñar las capas** por función, con banda asignada a cada una
104
+ 3. **Definir la variación** — cuántas variantes, qué randomización, round-robin o no
105
+ 4. **Chequear contra el bible** — ¿respeta la paleta y la allocation de frecuencias?
106
+ 5. **Chequear en contexto** — un sonido nunca se juzga solo: con música, ambiente y otros 10 SFX encima
107
+ 6. **Escribir** — preguntar "¿Escribo el diseño a `<path>`?" antes de usar Write
108
+
109
+ ### Chequeo en contexto
110
+
111
+ El error más caro del sound design es aprobar sonidos en aislamiento. Un efecto perfecto solo puede desaparecer en la mezcla o taparle el ataque a otro. Evaluar siempre con el resto sonando, y al volumen real de juego.
112
+
113
+ ---
114
+
115
+ ## Verdict
116
+
117
+ - **READY** — el sonido tiene lectura definida, capas por banda, plan de variación, y se validó en contexto
118
+ - **CONCERNS** — está diseñado pero no se probó con el resto del mix, o la variación no alcanza para su frecuencia de uso
119
+ - **BLOCKED** — no está claro qué evento representa o falta la dirección del audio bible
120
+
121
+ ## Anti-patterns
122
+
123
+ > → Read references/anti-patterns.md
124
+
125
+ ## Next steps
126
+
127
+ - `/audio-spec` para formalizar el contrato del evento (concurrencia, cooldown, prioridad)
128
+ - `/procedural-audio` si el conteo de variantes se vuelve inmanejable
129
+ - `/audio-mix` para ubicarlo en la jerarquía de buses
130
+ - `/middleware-integration` para implementar el round-robin y la randomización en containers
@@ -0,0 +1,53 @@
1
+ # SFX Design — Anti-patterns
2
+
3
+ ## Aprobar en aislamiento
4
+
5
+ El error más caro. Un sonido perfecto en solo desaparece bajo música y ambiente, o le tapa el ataque a otro. Todo efecto se juzga en contexto y al volumen real de juego.
6
+
7
+ ## Apilar capas hasta que "suene grande"
8
+
9
+ Ocho capas no suenan más grandes que tres: suenan barrosas. La grandeza sale de la separación de bandas y del contraste con el silencio previo, no de la cantidad. Cuatro capas es el techo práctico.
10
+
11
+ ## Dos capas en la misma banda
12
+
13
+ Si el sub y el punch pelean en 80 Hz, una de las dos está de más. Cada capa, su banda.
14
+
15
+ ## Depender del sub para la fuerza
16
+
17
+ En el speaker de un handheld o en earbuds baratos no hay 40 Hz. Si toda la potencia del impacto vive ahí, en la mitad de los dispositivos el sonido es un chasquido. La fuerza tiene que leerse también en 100-300 Hz.
18
+
19
+ ## Pitch randomization exagerada
20
+
21
+ ±20% no es variación, es otro objeto. El arma parece cambiar de calibre entre disparos. ±2-4% y round-robin.
22
+
23
+ ## Random puro en vez de round-robin
24
+
25
+ Random repite: con 4 variantes, la probabilidad de escuchar la misma dos veces seguidas es 25%. Y la repetición inmediata es exactamente lo que se quería evitar. Round-robin excluyendo la última.
26
+
27
+ ## Una sola variante en eventos frecuentes
28
+
29
+ Se vuelve audible como sonido a los 20 minutos. Si el evento se dispara seguido, mínimo 4 variantes o layer swapping.
30
+
31
+ ## Perseguir realismo
32
+
33
+ Un disparo real es poco impresionante y una puerta real suena a nada. El efecto comunica función de gameplay, no física. Si dos armas hacen daño distinto, tienen que sonar distinto en peso.
34
+
35
+ ## Attack con pre-roll
36
+
37
+ 50 ms de silencio o de aire antes del transiente hacen que la acción se sienta laggeada aunque el código sea instantáneo. El transiente va en los primeros milisegundos del archivo.
38
+
39
+ ## Energía gratis en 2-6 kHz
40
+
41
+ Es la banda donde el oído es más sensible y la que fatiga más rápido. Sirve para definición y para feedback de UI; usada de más en todos los SFX, el juego se vuelve cansador en sesiones largas.
42
+
43
+ ## Reverb bakeado en el asset
44
+
45
+ Si la cola trae el espacio grabado, el sonido no se puede reubicar: suena a catedral dentro de un armario. La cola propia va seca y el espacio lo pone el middleware por zona.
46
+
47
+ ## Tail que ignora el 3D
48
+
49
+ Una cola larga en un sonido 3D sigue sonando cuando la fuente ya se alejó, o se corta abrupto al salir del rango. Definir la atenuación considerando la cola, no solo el ataque.
50
+
51
+ ## Escalar por número de variantes
52
+
53
+ 20 samples × 6 superficies × 3 intensidades = 360 archivos y ~180 MB, y aun así se escucha repetición. Cuando el problema tiene varias dimensiones, la respuesta es síntesis, no más grabaciones.