claude-code-arcane 2.0.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.
- package/CHANGELOG.md +24 -0
- package/README.md +6 -4
- package/agents/audio/audio-director.md +90 -0
- package/agents/audio/audio-programmer.md +97 -0
- package/agents/audio/audio-qa.md +95 -0
- package/agents/audio/composer.md +88 -0
- package/agents/audio/technical-sound-designer.md +90 -0
- package/agents/audio/voice-director.md +96 -0
- package/docs/SKILLS-CATALOG.md +45 -2
- package/docs/USER-GUIDE.md +2 -2
- package/package.json +1 -1
- package/profiles/audio.yaml +45 -0
- package/profiles/second-brain.yaml +37 -0
- package/rules/gamedev/audio-code.md +45 -0
- package/rules/vault-conventions.md +144 -0
- package/skills/adaptive-music/SKILL.md +171 -0
- package/skills/adaptive-music/references/anti-patterns.md +53 -0
- package/skills/audio-audit/SKILL.md +164 -0
- package/skills/audio-audit/references/anti-patterns.md +65 -0
- package/skills/audio-audit/scripts/check_assets.py +208 -0
- package/skills/audio-bible/SKILL.md +119 -0
- package/skills/audio-bible/references/anti-patterns.md +39 -0
- package/skills/audio-mix/SKILL.md +151 -0
- package/skills/audio-mix/references/anti-patterns.md +65 -0
- package/skills/audio-spec/SKILL.md +107 -0
- package/skills/audio-spec/references/anti-patterns.md +45 -0
- package/skills/brain-dump/SKILL.md +53 -0
- package/skills/hub-note/SKILL.md +68 -0
- package/skills/middleware-integration/SKILL.md +186 -0
- package/skills/middleware-integration/references/anti-patterns.md +69 -0
- package/skills/midi-compose/SKILL.md +136 -0
- package/skills/midi-compose/references/smf-format.md +129 -0
- package/skills/midi-compose/scripts/compose_midi.py +326 -0
- package/skills/midi-compose/templates/example-composition.json +69 -0
- package/skills/music-composition/SKILL.md +106 -0
- package/skills/music-composition/references/form.md +57 -0
- package/skills/music-composition/references/game-music.md +82 -0
- package/skills/music-composition/references/harmony.md +82 -0
- package/skills/music-composition/references/melody.md +48 -0
- package/skills/music-composition/references/orchestration.md +69 -0
- package/skills/music-composition/references/rhythm-groove.md +49 -0
- package/skills/obsidian-bases/SKILL.md +85 -0
- package/skills/obsidian-bases/references/bases-syntax.md +123 -0
- package/skills/obsidian-canvas/SKILL.md +91 -0
- package/skills/obsidian-markdown/SKILL.md +110 -0
- package/skills/pdf-generator/scripts/fill_inspect.py +2 -0
- package/skills/pdf-generator/scripts/render_body.py +2 -0
- package/skills/procedural-audio/SKILL.md +157 -0
- package/skills/procedural-audio/references/anti-patterns.md +45 -0
- package/skills/review-dump/SKILL.md +108 -0
- package/skills/review-monthly/SKILL.md +56 -0
- package/skills/review-weekly/SKILL.md +91 -0
- package/skills/second-brain/SKILL.md +211 -0
- package/skills/second-brain/hooks/hooks.json +16 -0
- package/skills/second-brain/hooks/validate-note.sh +85 -0
- package/skills/second-brain/references/cross-project.md +57 -0
- package/skills/second-brain/references/templates/Atomic.md +22 -0
- package/skills/second-brain/references/templates/Daily.md +25 -0
- package/skills/second-brain/references/templates/Dashboard.base +70 -0
- package/skills/second-brain/references/templates/Dump.md +11 -0
- package/skills/second-brain/references/templates/Hub.md +22 -0
- package/skills/second-brain/references/templates/Monthly.md +29 -0
- package/skills/second-brain/references/templates/Weekly.md +29 -0
- package/skills/second-brain/references/templates/codebases.md +37 -0
- package/skills/second-brain/references/templates/hot.md +37 -0
- package/skills/second-brain/references/templates/vault-CLAUDE.md +127 -0
- package/skills/sfx-design/SKILL.md +130 -0
- package/skills/sfx-design/references/anti-patterns.md +53 -0
- package/skills/spatial-audio/SKILL.md +139 -0
- package/skills/spatial-audio/references/anti-patterns.md +53 -0
- package/skills/ui-sound-design/SKILL.md +133 -0
- package/skills/ui-sound-design/references/anti-patterns.md +57 -0
- package/skills/vault-audit/SKILL.md +72 -0
- package/skills/vault-audit/scripts/vault_audit.py +539 -0
- package/skills/vault-clip/SKILL.md +73 -0
- package/skills/vault-recall/SKILL.md +82 -0
- package/skills/vault-recall/scripts/vault_index.py +626 -0
- package/skills/vault-tidy/SKILL.md +76 -0
- package/skills/voice-pipeline/SKILL.md +150 -0
- package/skills/voice-pipeline/references/anti-patterns.md +69 -0
- package/skills/xlsx-generator/scripts/formula_check.py +2 -0
- package/skills/xlsx-generator/scripts/libreoffice_recalc.py +2 -0
- package/skills/xlsx-generator/scripts/xlsx_add_column.py +2 -0
- package/skills/xlsx-generator/scripts/xlsx_insert_row.py +2 -0
- package/skills/xlsx-generator/scripts/xlsx_reader.py +2 -0
- package/skills/zettel/SKILL.md +66 -0
package/docs/SKILLS-CATALOG.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Skills Catalog — Claude Code Arcane
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Los 388 skills disponibles para proyectos consumidores, organizados por division.
|
|
4
|
+
|
|
5
|
+
La tabla cubre 346: hay 42 skills instalables que todavia no estan catalogados aca. Un test de CI (`src/__tests__/doc-counts.test.ts`) verifica que estos numeros coincidan con el filesystem y que el header de cada seccion coincida con sus filas.
|
|
4
6
|
|
|
5
7
|
## Como ejecutar un skill
|
|
6
8
|
|
|
@@ -98,7 +100,27 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
|
|
|
98
100
|
|
|
99
101
|
---
|
|
100
102
|
|
|
101
|
-
##
|
|
103
|
+
## Audio (13 skills)
|
|
104
|
+
|
|
105
|
+
| Skill | Descripcion | Uso |
|
|
106
|
+
|-------|-------------|-----|
|
|
107
|
+
| `/audio-bible` | Identidad sonora: paleta, emotional targets por game state, frequency allocation, standards | `[full\|core\|standards]` |
|
|
108
|
+
| `/audio-spec` | SFX spec sheets y event lists con concurrencia, cooldown y prioridad | `[system-name \| all \| events]` |
|
|
109
|
+
| `/music-composition` | Armonia, melodia, forma, groove, orquestacion con salida accionable | `[harmony\|melody\|form\|groove\|orchestration\|analyze]` |
|
|
110
|
+
| `/adaptive-music` | Musica interactiva: layering, re-secuenciacion, stingers, sync points, histeresis | `[design\|layers\|transitions\|stingers\|map]` |
|
|
111
|
+
| `/midi-compose` | Genera `.mid` desde spec JSON con scripts Python stdlib-only | `[spec-path \| new \| validate]` |
|
|
112
|
+
| `/sfx-design` | Capas attack/body/tail, variacion, round-robin, anti-repeticion | `[sound-name \| layers \| variation \| review]` |
|
|
113
|
+
| `/procedural-audio` | Footsteps, viento y ambientes por sintesis; decision y presupuesto de CPU | `[decide \| footsteps \| wind \| ambience \| budget]` |
|
|
114
|
+
| `/ui-sound-design` | Feedback de UI: duraciones y niveles por tipo, jerarquia, haptics, accesibilidad | `[set \| event-name \| review \| haptics]` |
|
|
115
|
+
| `/spatial-audio` | HRTF vs Ambisonics vs panning, atenuacion, oclusion vs obstruccion, presupuesto | `[decide \| hrtf \| ambisonics \| occlusion \| budget]` |
|
|
116
|
+
| `/audio-mix` | Jerarquia de buses, ducking, mix states, masking, loudness | `[buses \| ducking \| states \| loudness \| review]` |
|
|
117
|
+
| `/middleware-integration` | Wwise/FMOD: containers, eventos, Switch/State/RTPC, banks, contrato con codigo | `[structure \| events \| rtpc \| banks \| contract]` |
|
|
118
|
+
| `/voice-pipeline` | VO: naming, script con contexto, casting, barks, localizacion, batch | `[script \| casting \| naming \| loc \| barks]` |
|
|
119
|
+
| `/audio-audit` | QA: voice count, CPU, memoria, leaks, loudness ASWG-R001, conformidad de assets | `[full \| perf \| loudness \| assets \| platform]` |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## General (54 skills)
|
|
102
124
|
|
|
103
125
|
| Skill | Descripcion | Uso |
|
|
104
126
|
|-------|-------------|-----|
|
|
@@ -455,6 +477,27 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
|
|
|
455
477
|
|
|
456
478
|
---
|
|
457
479
|
|
|
480
|
+
## Second Brain (14 skills)
|
|
481
|
+
|
|
482
|
+
| Skill | Descripcion | Uso |
|
|
483
|
+
|-------|-------------|-----|
|
|
484
|
+
| `/second-brain` | Entry point: crea o adopta el vault (PARA + Zettelkasten + hub files), escribe su CLAUDE.md y su cache hot.md, detecta plugins, conecta otros proyectos al mismo vault y rutea | `[setup\|adopt\|status\|next\|link]` |
|
|
485
|
+
| `/brain-dump` | Captura sin friccion al dump del dia: sin tags, sin clasificar, sin decidir donde va | `[texto a capturar]` |
|
|
486
|
+
| `/review-dump` | Procesa el dump: clasifica item por item con confirmacion, actualiza hubs, rutea tareas y crea el daily | `[today\|YYYY-MM-DD]` |
|
|
487
|
+
| `/review-weekly` | Retrospectiva semanal: temas recurrentes, hilos abiertos y tareas hechas vs no hechas | `[current\|YYYY-Www\|YYYY-MM-DD]` |
|
|
488
|
+
| `/review-monthly` | Retrospectiva mensual: patrones, logros con evidencia, semillas y salud del vault | `[current\|YYYY-MM]` |
|
|
489
|
+
| `/zettel` | Nota atomica con el criterio de cuando una idea pasa de nota de proyecto a permanente | `[idea\|ruta#seccion\|dump YYYY-MM-DD]` |
|
|
490
|
+
| `/hub-note` | Hub file (MOC) por entidad que importa: el tejido entre PARA y Zettelkasten | `[entidad] [--update]` |
|
|
491
|
+
| `/vault-recall` | Busqueda con ranking (BM25, acentos plegados, expansion por alias) y notas relacionadas por vocabulario compartido, via indice cacheado | `<consulta> \| related <nota> [-n N]` |
|
|
492
|
+
| `/vault-clip` | URL a nota limpia: contenido sin menus ni banners, con resumen propio y fuente | `<url> [--full\|--summary]` |
|
|
493
|
+
| `/vault-audit` | Reporte de salud via script Python: huerfanas, links roto, stale, semillas que no crecieron, contradicciones, tag sprawl, nombres duplicados. Read-only | `[--vault <path>] [--stale-days N]` |
|
|
494
|
+
| `/vault-tidy` | Aplica los arreglos del audit con approval item por item. Nunca borra, archiva | `[orphans\|broken\|duplicates\|tasks\|frontmatter\|archive\|all]` |
|
|
495
|
+
| `/obsidian-markdown` | Sintaxis Obsidian: wikilinks, embeds, callouts, block IDs, propiedades. Valida o corrige una nota | `[reference\|check <archivo>\|fix <archivo>]` |
|
|
496
|
+
| `/obsidian-bases` | Archivos .base: vistas, filtros, formulas y summaries. Incluye migracion desde Dataview | `[create <desc>\|explain <archivo>\|migrate <query>]` |
|
|
497
|
+
| `/obsidian-canvas` | Archivos .canvas (JSON Canvas): nodos, grupos y edges con direccion y color | `[create <desc>\|explain <archivo>\|edit <archivo>]` |
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
458
501
|
## E-Commerce (12 skills)
|
|
459
502
|
|
|
460
503
|
| Skill | Descripcion | Uso |
|
package/docs/USER-GUIDE.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## What is Arcane?
|
|
4
4
|
|
|
5
|
-
Arcane is a configuration harness for [Claude Code](https://docs.anthropic.com/en/docs/claude-code). It provides a curated library of **
|
|
5
|
+
Arcane is a configuration harness for [Claude Code](https://docs.anthropic.com/en/docs/claude-code). It provides a curated library of **388 skills**, **98 agents**, **16 hooks**, and **26 rules** that you selectively deploy into any project. Instead of shipping everything to every project (wasting tokens and degrading performance), you pick a **profile** that matches your stack and only the relevant tools get installed.
|
|
6
6
|
|
|
7
7
|
## Table of Contents
|
|
8
8
|
|
|
@@ -536,7 +536,7 @@ Yes, and it's recommended. This way everyone on the team gets the same Claude Co
|
|
|
536
536
|
|
|
537
537
|
### How many tokens does a profile consume?
|
|
538
538
|
|
|
539
|
-
Each skill adds ~30-100 tokens to the system prompt. A typical base profile (20-30 skills) adds ~1-2k tokens. The core profile adds ~500 tokens. Compare that to loading all
|
|
539
|
+
Each skill adds ~30-100 tokens to the system prompt. A typical base profile (20-30 skills) adds ~1-2k tokens. The core profile adds ~500 tokens. Compare that to loading all 388 skills, which is why selective deploy matters.
|
|
540
540
|
|
|
541
541
|
### Why replace instead of merge on install?
|
|
542
542
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: audio
|
|
2
|
+
description: "Game Audio — direccion sonora, composicion, sound design, middleware, VO y QA"
|
|
3
|
+
type: base
|
|
4
|
+
|
|
5
|
+
skills:
|
|
6
|
+
- audio-bible
|
|
7
|
+
- audio-spec
|
|
8
|
+
- music-composition
|
|
9
|
+
- adaptive-music
|
|
10
|
+
- midi-compose
|
|
11
|
+
- sfx-design
|
|
12
|
+
- procedural-audio
|
|
13
|
+
- ui-sound-design
|
|
14
|
+
- spatial-audio
|
|
15
|
+
- audio-mix
|
|
16
|
+
- middleware-integration
|
|
17
|
+
- voice-pipeline
|
|
18
|
+
- audio-audit
|
|
19
|
+
|
|
20
|
+
rules:
|
|
21
|
+
universal:
|
|
22
|
+
[]
|
|
23
|
+
gamedev:
|
|
24
|
+
- audio-code
|
|
25
|
+
|
|
26
|
+
agents:
|
|
27
|
+
- audio
|
|
28
|
+
|
|
29
|
+
permissions:
|
|
30
|
+
allow:
|
|
31
|
+
- "Bash(python *)"
|
|
32
|
+
- "Bash(python3 *)"
|
|
33
|
+
- "Bash(git status*)"
|
|
34
|
+
- "Bash(git add*)"
|
|
35
|
+
- "Bash(git commit*)"
|
|
36
|
+
- "Bash(git diff*)"
|
|
37
|
+
- "Bash(git log*)"
|
|
38
|
+
- "Bash(ls *)"
|
|
39
|
+
- "Bash(find *)"
|
|
40
|
+
- "Read(*)"
|
|
41
|
+
- "Glob(*)"
|
|
42
|
+
- "Grep(*)"
|
|
43
|
+
deny:
|
|
44
|
+
- "Bash(rm -rf *)"
|
|
45
|
+
- "Bash(git push --force*)"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: second-brain
|
|
2
|
+
description: "Second Brain — vault de Obsidian gestionado con Claude Code: captura sin friccion, reviews diario/semanal/mensual, notas atomicas y hub files (PARA + Zettelkasten), busqueda con ranking, captura web, auditoria de salud del vault y sintaxis nativa de Obsidian (markdown, Bases, Canvas)"
|
|
3
|
+
type: addon
|
|
4
|
+
|
|
5
|
+
skills:
|
|
6
|
+
- second-brain
|
|
7
|
+
- brain-dump
|
|
8
|
+
- review-dump
|
|
9
|
+
- review-weekly
|
|
10
|
+
- review-monthly
|
|
11
|
+
- zettel
|
|
12
|
+
- hub-note
|
|
13
|
+
- vault-recall
|
|
14
|
+
- vault-clip
|
|
15
|
+
- vault-audit
|
|
16
|
+
- vault-tidy
|
|
17
|
+
- obsidian-markdown
|
|
18
|
+
- obsidian-bases
|
|
19
|
+
- obsidian-canvas
|
|
20
|
+
|
|
21
|
+
rules:
|
|
22
|
+
universal:
|
|
23
|
+
- vault-conventions
|
|
24
|
+
gamedev:
|
|
25
|
+
[]
|
|
26
|
+
|
|
27
|
+
agents:
|
|
28
|
+
[]
|
|
29
|
+
|
|
30
|
+
permissions:
|
|
31
|
+
allow:
|
|
32
|
+
- "Bash(python *vault_audit.py*)"
|
|
33
|
+
- "Bash(python3 *vault_audit.py*)"
|
|
34
|
+
- "Bash(python *vault_index.py*)"
|
|
35
|
+
- "Bash(python3 *vault_index.py*)"
|
|
36
|
+
deny:
|
|
37
|
+
[]
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "src/audio/**"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Audio Code Rules
|
|
7
|
+
|
|
8
|
+
- NEVER hardcode asset paths or clip references in gameplay code — post middleware events by name/ID
|
|
9
|
+
- Gameplay code MUST NOT call `Play()`/`PlayOneShot()` directly — raise an audio event, let the audio layer resolve it
|
|
10
|
+
- Concurrency limits (max instances, priority, cooldown) MUST be declared in data, never enforced with ad-hoc counters in gameplay
|
|
11
|
+
- Use delta time for ALL fades, ducking ramps and RTPC interpolation (frame-rate independence)
|
|
12
|
+
- NO static singletons for audio state — inject the audio service
|
|
13
|
+
- Every RTPC/parameter driven from gameplay must be normalized and clamped at the boundary before it reaches the middleware
|
|
14
|
+
- Voice budget is a hard limit: define max simultaneous voices per category and drop by priority, never let it grow unbounded
|
|
15
|
+
- Audio must degrade silently — a missing bank or failed event NEVER throws into the gameplay frame
|
|
16
|
+
- Keep the audio update off the render-critical path; audio work budget is 5-10% of frame time
|
|
17
|
+
- Reference the audio bible section each event implements in code comments
|
|
18
|
+
|
|
19
|
+
## Examples
|
|
20
|
+
|
|
21
|
+
**Correct** (event-driven, data-declared):
|
|
22
|
+
|
|
23
|
+
```csharp
|
|
24
|
+
// Gameplay raises intent; the audio layer owns resolution and limits.
|
|
25
|
+
audioService.Post(AudioEvent.PlayerFootstep, transform.position);
|
|
26
|
+
|
|
27
|
+
float wetness = Mathf.Clamp01(surface.Wetness); // clamped at the boundary
|
|
28
|
+
audioService.SetParameter(AudioParam.SurfaceWetness, wetness);
|
|
29
|
+
|
|
30
|
+
// Fade driven by delta time, not frame count.
|
|
31
|
+
currentVolume = Mathf.MoveTowards(currentVolume, targetVolume, fadeRate * Time.deltaTime);
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Incorrect** (hardcoded, direct, frame-dependent):
|
|
35
|
+
|
|
36
|
+
```csharp
|
|
37
|
+
AudioSource.PlayClipAtPoint(
|
|
38
|
+
Resources.Load<AudioClip>("SFX/footstep_concrete_01"), // VIOLATION: hardcoded path
|
|
39
|
+
transform.position); // VIOLATION: direct playback from gameplay
|
|
40
|
+
|
|
41
|
+
AudioManager.Instance.Play("footstep"); // VIOLATION: static singleton
|
|
42
|
+
|
|
43
|
+
currentVolume -= 0.02f; // VIOLATION: no delta time
|
|
44
|
+
audioService.SetParameter(AudioParam.SurfaceWetness, rawSensorValue); // VIOLATION: unclamped
|
|
45
|
+
```
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Vault Conventions Rule (second brain en Obsidian)
|
|
2
|
+
|
|
3
|
+
Reglas que gobiernan toda escritura dentro de un vault de Obsidian. Existen porque un agente que escribe notas sin restricciones degrada el vault mas rapido de lo que lo construye: linkea todo con todo, arrastra tareas en silencio y renombra archivos rompiendo `[[wikilinks]]`.
|
|
4
|
+
|
|
5
|
+
Las rutas son relativas al vault (`--vault`, env `OBSIDIAN_VAULT`, o el directorio actual si contiene `.obsidian/`).
|
|
6
|
+
|
|
7
|
+
## Cuando aplica
|
|
8
|
+
|
|
9
|
+
- Cualquier skill del profile `second-brain` que cree o edite notas.
|
|
10
|
+
- Cualquier escritura en un directorio que contenga `.obsidian/`, incluso desde otro skill.
|
|
11
|
+
- NO aplica a los archivos de configuracion del vault (`.obsidian/**`): no se tocan nunca sin pedido explicito del usuario.
|
|
12
|
+
|
|
13
|
+
## Quién escribe cada archivo
|
|
14
|
+
|
|
15
|
+
Antes de tocar cualquier cosa, la pregunta es de quién es ese archivo. Hay tres clases y el permiso de escritura es distinto en cada una. Adaptado de la distinción **autorado / proyectado** de la base de conocimiento de producto de Educabot, que es la que hace que un agente y una persona escriban en el mismo repositorio sin pisarse.
|
|
16
|
+
|
|
17
|
+
| Clase | Quién escribe | Qué puede hacer el agente | Ejemplos |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| **Autorado** | La persona. Cambia lento | **Nada sin approval.** Ni reformatear, ni "mejorar" | Dumps, notas atómicas, hubs, clips, proyectos, el `CLAUDE.md` del vault, la sección `## Reflexión` de los reviews |
|
|
20
|
+
| **Sintetizado** | El agente, con approval, y queda como nota permanente | Proponer y escribir tras el OK. Idempotente: correr dos veces no duplica | Dailies, weeklies, monthlies, el `## Historial` de un hub |
|
|
21
|
+
| **Proyectado** | El agente, sin preguntar. Derivado y descartable | Reescribir completo cuando corresponda | `hot.md`, el índice `.vault-index.json`, las vistas `.base` |
|
|
22
|
+
|
|
23
|
+
Tres consecuencias que resuelven las dudas que aparecen en la práctica:
|
|
24
|
+
|
|
25
|
+
- **Lo proyectado no se edita a mano.** Si el usuario lo edita, el próximo review lo pisa. Por eso `hot.md` lleva la advertencia adentro.
|
|
26
|
+
- **Lo proyectado no es fuente de verdad.** Si contradice a una nota, la nota gana. Se puede borrar sin perder nada.
|
|
27
|
+
- **Lo autorado no se toca ni para arreglarlo.** Si una nota del usuario tiene el frontmatter roto, se propone el arreglo; no se aplica solo. La excepción son las categorías que `/vault-tidy` aplica con approval item por item.
|
|
28
|
+
|
|
29
|
+
Si no sabés en qué clase cae un archivo, es autorado. El default es no escribir.
|
|
30
|
+
|
|
31
|
+
## El vault apunta, no copia
|
|
32
|
+
|
|
33
|
+
Cuando algo ya tiene una fuente de verdad afuera, el vault guarda **el puntero y el porqué**, nunca una copia:
|
|
34
|
+
|
|
35
|
+
| Contenido | Fuente de verdad | En el vault |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| Código y arquitectura | El repo | `repos:` en el frontmatter, y `codebases.md` con el path local |
|
|
38
|
+
| Tickets, estados, sprints | Jira, ClickUp, Linear | Link, y la decisión que salió de ahí |
|
|
39
|
+
| Diseños | Figma | Link en la nota del tema |
|
|
40
|
+
| Artículos, papers | La web | El clip, con `source:` y **tu** resumen |
|
|
41
|
+
|
|
42
|
+
Una copia se desactualiza en silencio y después hay dos verdades y ninguna gana. Lo que sí acumula el vault es lo que ninguna de esas fuentes tiene: **qué decidiste, por qué, y qué aprendiste**. Eso no vive en Jira ni en el código.
|
|
43
|
+
|
|
44
|
+
## Resolución de rutas: roles, no carpetas
|
|
45
|
+
|
|
46
|
+
Ningún skill escribe en una ruta literal. Escribe en un **rol**, y el `## Rutas` del `CLAUDE.md` del vault dice qué carpeta es ese rol en este vault. Es lo que hace que un vault adoptado con otra estructura funcione sin tocar los skills.
|
|
47
|
+
|
|
48
|
+
| Rol | Qué contiene | Default del `setup` |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `inbox` | captura cruda del día | `_inbox` |
|
|
51
|
+
| `daily` | síntesis diaria | `Reflect/Daily` |
|
|
52
|
+
| `weekly` | retrospectiva semanal | `Reflect/Weekly` |
|
|
53
|
+
| `monthly` | balance mensual | `Reflect/Monthly` |
|
|
54
|
+
| `atomic` | notas atómicas | `03_Resources` |
|
|
55
|
+
| `hubs` | hub files por entidad | `Hubs` |
|
|
56
|
+
| `projects` | proyectos con deadline | `01_Projects` |
|
|
57
|
+
| `areas` | responsabilidades continuas | `02_Areas` |
|
|
58
|
+
| `archive` | cerrado, nunca borrado | `04_Archive` |
|
|
59
|
+
| `templates` | plantillas del usuario | `Templates` |
|
|
60
|
+
|
|
61
|
+
Orden de resolución, sin excepciones:
|
|
62
|
+
|
|
63
|
+
1. El `## Rutas` del `CLAUDE.md` del vault.
|
|
64
|
+
2. Si el vault no lo declara, el default de la tabla, **avisándole al usuario que se está asumiendo**.
|
|
65
|
+
3. Si el rol no existe en este vault (no todos tienen `areas`), preguntar antes de crear la carpeta.
|
|
66
|
+
|
|
67
|
+
Los scripts reciben el mapeo por flag (`--role hubs=People`), nunca lo adivinan. **Si el `CLAUDE.md` del vault declara rutas distintas del default y un skill escribe en el default igual, eso es un bug del skill, no una preferencia.**
|
|
68
|
+
|
|
69
|
+
## Las tres reglas de estructura
|
|
70
|
+
|
|
71
|
+
### 1. Los links van hacia arriba, nunca hacia abajo
|
|
72
|
+
|
|
73
|
+
Cada nota linkea a su contexto, no a su detalle:
|
|
74
|
+
|
|
75
|
+
| Desde | Linkea a | Nunca a |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| Nota de `_inbox/` (dump) | hub files, proyectos, areas | otros dumps |
|
|
78
|
+
| Daily | el dump del dia, notas creadas ese dia | otros dailies |
|
|
79
|
+
| Weekly | los dailies de la semana | notas atomicas sueltas |
|
|
80
|
+
| Monthly | los weeklies del mes | dailies |
|
|
81
|
+
| Hub file | notas atomicas y proyectos del tema | dumps ni dailies |
|
|
82
|
+
|
|
83
|
+
Sin esta regla el agente crea links bidireccionales en todas las direcciones y el grafo se vuelve ruido: cada nota apunta a todo y ninguna relacion significa nada. Los backlinks de Obsidian ya dan la direccion inversa gratis, no hay que escribirla.
|
|
84
|
+
|
|
85
|
+
### 2. Ninguna nota se cierra sin al menos un `[[wikilink]]`
|
|
86
|
+
|
|
87
|
+
Es la unica regla que previene las huerfanas de raiz. Si al terminar una nota no hay a que linkearla, esa es la senal de que falta un hub file: crear el hub (ver `/hub-note`) antes de cerrar la nota, o dejarla en `_inbox/` en vez de archivarla en `03_Resources/`.
|
|
88
|
+
|
|
89
|
+
Excepcion: los dumps crudos de `_inbox/` pueden nacer sin links, porque los agrega `/review-dump`.
|
|
90
|
+
|
|
91
|
+
### 3. Las tareas no hechas no se arrastran en silencio
|
|
92
|
+
|
|
93
|
+
Una tarea abierta en el dump del lunes que sigue abierta el martes **se queda en el lunes**, marcada como cancelada (`- [-]`), y se crea de nuevo en el martes. No se mueve.
|
|
94
|
+
|
|
95
|
+
No haber hecho algo un dia determinado es informacion. Arrastrar la tarea hacia adelante produce una lista limpia y una historia falsa.
|
|
96
|
+
|
|
97
|
+
## Que no puede hacer el agente
|
|
98
|
+
|
|
99
|
+
- **Nunca borrar una nota.** Mover a `04_Archive/` preservando el nombre. El borrado es decision del usuario, siempre.
|
|
100
|
+
- **Nunca renombrar ni mover una nota sin approval explicito.** Rompe `[[wikilinks]]` en silencio: Obsidian solo los actualiza cuando el rename ocurre dentro de la app.
|
|
101
|
+
- **Nunca editar en masa.** Una corrida toca las notas de esa corrida. Los cambios que afectan a muchas notas se proponen como plan y los aplica `/vault-tidy` con approval item por item.
|
|
102
|
+
- **Nunca tocar `Templates/`** salvo pedido explicito: son el contrato del usuario, no del agente.
|
|
103
|
+
- **Nunca reescribir la seccion de reflexion del usuario.** Los reviews sintetizan hechos; la interpretacion la escribe el usuario.
|
|
104
|
+
|
|
105
|
+
## Contrato de frontmatter
|
|
106
|
+
|
|
107
|
+
Todo campo que un skill escriba tiene que estar declarado en el `CLAUDE.md` del vault. Un campo que no esta en el contrato no se inventa: se propone y se agrega al contrato primero.
|
|
108
|
+
|
|
109
|
+
Minimo por tipo de nota:
|
|
110
|
+
|
|
111
|
+
```yaml
|
|
112
|
+
---
|
|
113
|
+
created: 2026-07-27 # ISO, nunca se reescribe
|
|
114
|
+
type: daily # daily | weekly | monthly | dump | atomic | hub | project | area | clip
|
|
115
|
+
tags: []
|
|
116
|
+
---
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Los tipos con campos propios (`status` en proyectos, `source` en clips) los declara el skill que los crea.
|
|
120
|
+
|
|
121
|
+
## Convenciones de escritura
|
|
122
|
+
|
|
123
|
+
- Nada de guiones largos: si un texto generado trae em-dash o en-dash, normalizar a `-` antes de escribir.
|
|
124
|
+
- `[[wikilinks]]` para todo lo interno, `[texto](url)` solo para URLs externas. Obsidian trackea renames de wikilinks, no de markdown links.
|
|
125
|
+
- Fechas ISO (`YYYY-MM-DD`) en frontmatter y en nombres de archivo de notas periodicas.
|
|
126
|
+
- Una idea por nota atomica. Si una nota necesita dos titulos de nivel `##` que no se relacionan, son dos notas.
|
|
127
|
+
|
|
128
|
+
## La estructura no la sostiene este archivo
|
|
129
|
+
|
|
130
|
+
Una convención que solo vive en un documento se muere en tres meses. Lo que la sostiene es lo que corre:
|
|
131
|
+
|
|
132
|
+
| Convención | Qué la hace cumplir |
|
|
133
|
+
|---|---|
|
|
134
|
+
| Frontmatter completo, notas con al menos un link | El hook `PostToolUse` de `second-brain`, al escribir |
|
|
135
|
+
| Huérfanas, links roto, nombres duplicados, semillas que no crecen | `/vault-audit`, cada vez que se corre |
|
|
136
|
+
| Contradicciones sin resolver | `status: contested`, que el audit lista y el monthly mira |
|
|
137
|
+
| Rutas por rol | El `## Rutas` del contrato, que los skills leen antes de escribir |
|
|
138
|
+
| Tareas que no se arrastran | El paso de tareas de `/review-dump`, y `stale_open_tasks` en el audit |
|
|
139
|
+
|
|
140
|
+
Si una regla nueva de este archivo no tiene una columna derecha, es una intención, no una regla. Antes de agregarla, preguntá qué la va a hacer cumplir.
|
|
141
|
+
|
|
142
|
+
## Git como red de seguridad
|
|
143
|
+
|
|
144
|
+
El vault deberia ser un repo git. Antes de una corrida que escribe varias notas (`/review-dump`, `/vault-tidy`), verificar que el arbol este limpio y avisar al usuario si no lo esta. Es lo que permite deshacer una corrida completa sin revisar nota por nota.
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: adaptive-music
|
|
3
|
+
description: "Musica interactiva para juegos: layering vertical, re-secuenciacion horizontal, stingers, reglas de transicion con sync points, y mapeo de estados de gameplay a musica. Usar para: musica adaptativa, sistema de musica dinamica, transiciones musicales, combat music."
|
|
4
|
+
category: "audio"
|
|
5
|
+
argument-hint: "[design|layers|transitions|stingers|map]"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools: Read, Glob, Grep, Write, Edit
|
|
8
|
+
---
|
|
9
|
+
# adaptive-music — Sistemas de Música Interactiva
|
|
10
|
+
|
|
11
|
+
Diseña el sistema que decide **qué música suena cuándo** y **cómo pasa de un estado a otro sin que se escuche la costura**.
|
|
12
|
+
|
|
13
|
+
Esta skill diseña el sistema. El material musical lo escribe `/music-composition`; la implementación en middleware la baja `/middleware-integration`.
|
|
14
|
+
|
|
15
|
+
## Cuándo usar
|
|
16
|
+
|
|
17
|
+
- Cuando la música tiene que responder a gameplay y no alcanza con reproducir un track
|
|
18
|
+
- Cuando las transiciones entre estados (exploración → combate → victoria) suenan a corte
|
|
19
|
+
- Cuando el loop fatiga y necesitás variación estructural, no otro track
|
|
20
|
+
- Antes de que el compositor escriba una nota: el sistema condiciona cómo se compone
|
|
21
|
+
|
|
22
|
+
## Modos
|
|
23
|
+
|
|
24
|
+
| Modo | Qué hace |
|
|
25
|
+
|---|---|
|
|
26
|
+
| `design` | El sistema completo: eje dominante, capas/segmentos, matriz, stingers, parámetros |
|
|
27
|
+
| `layers` | Solo la arquitectura vertical: qué capas, qué rol, qué restricción compositiva |
|
|
28
|
+
| `transitions` | Solo la matriz de transiciones con sync points y segmentos de transición |
|
|
29
|
+
| `stingers` | Solo los stingers: armonía, sincronización, cooldown |
|
|
30
|
+
| `map` | Solo la tabla estado de gameplay → música, con triggers e histéresis |
|
|
31
|
+
|
|
32
|
+
## Input
|
|
33
|
+
|
|
34
|
+
1. Leer audio bible, sección 2 (emotional targets por game state) y 6 (music direction). Si no existe, avisar y ofrecer `/audio-bible`
|
|
35
|
+
2. Listar los estados de gameplay reales — del código o del GDD, no inventados
|
|
36
|
+
3. Preguntar al usuario: middleware target (Wwise / FMOD / engine nativo / sin definir), budget de memoria para música, y si hay material compuesto o se parte de cero
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Los dos ejes
|
|
41
|
+
|
|
42
|
+
Todo sistema de música adaptativa es una combinación de estos dos. Elegir cuál domina es la primera decisión.
|
|
43
|
+
|
|
44
|
+
### Vertical — layering
|
|
45
|
+
|
|
46
|
+
Un mismo bloque temporal, capas que entran y salen. Todas suenan sincronizadas porque comparten grid y armonía.
|
|
47
|
+
|
|
48
|
+
- **Fuerte en:** respuesta inmediata a parámetros continuos (proximidad de enemigo, salud, intensidad de combate)
|
|
49
|
+
- **Débil en:** cambiar de material. Todo suena a la misma pieza
|
|
50
|
+
- **Costo:** memoria (N stems simultáneos) y una restricción compositiva real — cada capa debe funcionar sola y en toda combinación
|
|
51
|
+
|
|
52
|
+
### Horizontal — re-secuenciación
|
|
53
|
+
|
|
54
|
+
Segmentos distintos que se concatenan según reglas, con transiciones en puntos musicalmente válidos.
|
|
55
|
+
|
|
56
|
+
- **Fuerte en:** cambiar de material y de forma; estructura no repetitiva
|
|
57
|
+
- **Débil en:** respuesta inmediata. La transición espera el sync point
|
|
58
|
+
- **Costo:** latencia de respuesta (hasta un compás o más) y complejidad de reglas
|
|
59
|
+
|
|
60
|
+
**Recomendación:** vertical para intensidad continua, horizontal para cambios de estado discretos. La mayoría de los juegos necesitan los dos: capas dentro de cada segmento, re-secuenciación entre segmentos.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Sync points — dónde se puede cortar
|
|
65
|
+
|
|
66
|
+
Una transición suena bien o mal según **dónde** ocurre, no según el crossfade. De más responsivo a más musical:
|
|
67
|
+
|
|
68
|
+
| Sync point | Latencia | Cuándo usarlo |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| **Inmediato** | 0 | Emergencias (muerte del jugador). Suena a corte, y a veces eso está bien |
|
|
71
|
+
| **Siguiente beat** | hasta 1 beat | Reacción rápida que igual respeta el pulso |
|
|
72
|
+
| **Siguiente compás (bar)** | hasta 1 compás | El default sano para la mayoría de los casos |
|
|
73
|
+
| **Siguiente grid** | variable | Cuando definís una grilla más gruesa (2 o 4 compases) |
|
|
74
|
+
| **Exit cue** | hasta el fin del segmento | Máxima musicalidad, máxima latencia |
|
|
75
|
+
| **Entry cue del destino** | — | Define desde dónde arranca el segmento destino |
|
|
76
|
+
|
|
77
|
+
**Segmento de transición** — un fragmento corto que se inserta entre origen y destino. Resuelve los saltos que ningún sync point salva: cambio de tonalidad, de tempo o de métrica. Es la herramienta que más mejora un sistema y la que menos se usa.
|
|
78
|
+
|
|
79
|
+
En Wwise esto es la Transition Matrix del Music Switch Container: origen × destino, con Exit Cue del origen, Entry Cue del destino, fade in/out, y segmento de transición opcional. En FMOD el equivalente son transition regions y transition timelines. El concepto es el mismo; la nomenclatura cambia.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Stingers
|
|
84
|
+
|
|
85
|
+
Frases cortas que se superponen sin interrumpir la música de fondo, sincronizadas al grid para que no suenen encima del tiempo equivocado.
|
|
86
|
+
|
|
87
|
+
- Uso: eventos puntuales que merecen puntuación musical — descubrimiento, kill, item raro, fallo
|
|
88
|
+
- **Deben compartir armonía con el material de fondo**, o sonar deliberadamente disonantes. Un stinger en la tonalidad equivocada es el error más audible del sistema
|
|
89
|
+
- Sincronizar a beat o compás, nunca inmediato
|
|
90
|
+
- Definir cooldown: dos stingers superpuestos suenan a error
|
|
91
|
+
- Si el fondo modula, el stinger necesita versiones por tonalidad o tiene que ser tonalmente neutro (percusión, cluster, ruido)
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Diseño del mapeo
|
|
96
|
+
|
|
97
|
+
El entregable central: la tabla estado → música.
|
|
98
|
+
|
|
99
|
+
| Estado de gameplay | Trigger | Segmento / capas | Sync point | Notas |
|
|
100
|
+
|---|---|---|---|---|
|
|
101
|
+
| Explore calm | default | bed + pulse | bar | loop indefinido |
|
|
102
|
+
| Explore alert | enemigo a <30 m | + harmony | beat | vuelve a calm con 5 s de histéresis |
|
|
103
|
+
| Combat | combate iniciado | segmento combat, todas las capas | bar | |
|
|
104
|
+
| Combat low health | HP < 25% | + intensity, filtro | beat | |
|
|
105
|
+
| Victory | combate resuelto | stinger + segmento victory | exit cue | one-shot, vuelve a explore |
|
|
106
|
+
| Death | HP = 0 | inmediato, corte | inmediato | |
|
|
107
|
+
|
|
108
|
+
**Parámetros continuos** aparte: qué RTPC/parámetro maneja qué, con rango normalizado y curva.
|
|
109
|
+
|
|
110
|
+
| Parámetro | Rango | Controla | Curva |
|
|
111
|
+
|---|---|---|---|
|
|
112
|
+
| `combat_intensity` | 0-1 | volumen de capa intensity | log |
|
|
113
|
+
| `player_health` | 0-1 | filtro low-pass sobre el bus música | lineal |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Histéresis — el detalle que rompe los sistemas
|
|
118
|
+
|
|
119
|
+
Un estado que se calcula por umbral (`enemigo a <30 m`) va a oscilar cuando el jugador camine en el borde. El resultado es música entrando y saliendo cada segundo.
|
|
120
|
+
|
|
121
|
+
Toda transición basada en umbral necesita:
|
|
122
|
+
- **Umbrales distintos por dirección** — entra a 30 m, sale a 40 m
|
|
123
|
+
- **Tiempo mínimo en estado** — no se puede salir antes de N segundos
|
|
124
|
+
- **Debounce del trigger** — la condición tiene que sostenerse antes de contar
|
|
125
|
+
|
|
126
|
+
Sin esto, el sistema funciona en el editor y falla con un jugador real.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Enfoques generativos
|
|
131
|
+
|
|
132
|
+
Cuando la variación por capas y segmentos no alcanza:
|
|
133
|
+
|
|
134
|
+
- **Selección estocástica de capas/segmentos** — la variación sale de qué combinación suena. El más barato y controlable; empezar acá siempre
|
|
135
|
+
- **Cadenas de Markov** — melodía estocástica entrenada sobre material propio. Preserva idioma, no genera estructura
|
|
136
|
+
- **L-systems / gramáticas recursivas** — generan estructura jerárquica por reescritura de reglas. Complemento de Markov, que no tiene forma
|
|
137
|
+
- **Restricciones armónicas** — capa de validación sobre lo generado: el generador propone, las reglas de función y voice leading filtran
|
|
138
|
+
|
|
139
|
+
La generación de notas en tiempo real tiene un techo de calidad y un riesgo de que suene mal en producción que la selección de material pregrabado no tiene. Justificar antes de ir por ahí.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Proceso
|
|
144
|
+
|
|
145
|
+
1. **Listar estados reales** del gameplay, con sus triggers exactos
|
|
146
|
+
2. **Elegir el eje dominante** (vertical / horizontal / mixto) y justificarlo contra el budget
|
|
147
|
+
3. **Definir capas o segmentos** y la restricción compositiva que impone al compositor
|
|
148
|
+
4. **Llenar la matriz de transiciones** con sync points, y marcar dónde hace falta segmento de transición
|
|
149
|
+
5. **Definir stingers** con su armonía y cooldown
|
|
150
|
+
6. **Definir parámetros continuos** con rango y curva
|
|
151
|
+
7. **Agregar histéresis** a toda transición por umbral
|
|
152
|
+
8. **Presentar** al usuario y preguntar "¿Escribo el diseño a `<path>`?" antes de usar Write
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Verdict
|
|
157
|
+
|
|
158
|
+
- **READY** — la matriz está completa, todo umbral tiene histéresis, los stingers tienen armonía definida, y el compositor sabe qué restricción respetar
|
|
159
|
+
- **CONCERNS** — el diseño existe pero hay transiciones sin sync point, umbrales sin histéresis, o el budget de memoria no se verificó contra el número de stems
|
|
160
|
+
- **BLOCKED** — los estados de gameplay no están definidos, o no hay dirección musical de la cual derivar los emotional targets
|
|
161
|
+
|
|
162
|
+
## Anti-patterns
|
|
163
|
+
|
|
164
|
+
> → Read references/anti-patterns.md
|
|
165
|
+
|
|
166
|
+
## Next steps
|
|
167
|
+
|
|
168
|
+
- `/music-composition` para escribir el material respetando las restricciones de capas
|
|
169
|
+
- `/middleware-integration` para implementar la matriz en Wwise/FMOD
|
|
170
|
+
- `/audio-mix` para el ducking entre música y diálogo
|
|
171
|
+
- `/audio-audit` para verificar memoria y voice count del sistema en runtime
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Música Adaptativa — Anti-patterns
|
|
2
|
+
|
|
3
|
+
## Crossfade como única transición
|
|
4
|
+
|
|
5
|
+
Fundir dos piezas en tonalidades o tempos distintos suena a error, no a transición. El crossfade solo funciona si el material comparte armonía y grid. Si no, hace falta sync point + segmento de transición.
|
|
6
|
+
|
|
7
|
+
## Transiciones inmediatas por default
|
|
8
|
+
|
|
9
|
+
Cortar al instante es responsivo y musicalmente destructivo. Reservarlo para muerte del jugador y cortes deliberados. El default sano es siguiente compás.
|
|
10
|
+
|
|
11
|
+
## Umbrales sin histéresis
|
|
12
|
+
|
|
13
|
+
El caso clásico: el jugador camina en el borde de un radio de detección y la música de combate entra y sale seis veces en diez segundos. Umbrales asimétricos + tiempo mínimo en estado + debounce. Siempre.
|
|
14
|
+
|
|
15
|
+
## Capas que dependen entre sí
|
|
16
|
+
|
|
17
|
+
Si la capa de melodía se escribió asumiendo que la de armonía suena, al quitar la armonía la melodía queda flotando sin contexto. Cada capa tiene que funcionar sola y con cualquier subconjunto de las de abajo.
|
|
18
|
+
|
|
19
|
+
## Stingers en la tonalidad equivocada
|
|
20
|
+
|
|
21
|
+
El error más audible del sistema. Si el fondo modula y el stinger es tonal y fijo, va a chocar. Versiones por tonalidad, o stingers tonalmente neutros.
|
|
22
|
+
|
|
23
|
+
## Stingers sin cooldown
|
|
24
|
+
|
|
25
|
+
Cinco kills en dos segundos disparan cinco stingers superpuestos. Suena a bug.
|
|
26
|
+
|
|
27
|
+
## Contar los stems y no la memoria
|
|
28
|
+
|
|
29
|
+
Ocho stems estéreo a 48 kHz sonando simultáneos es mucho más que "ocho archivos". Si van descomprimidos en memoria, el número crece rápido. Verificar el budget antes de comprometer la arquitectura vertical.
|
|
30
|
+
|
|
31
|
+
## Diseñar el sistema después de componer
|
|
32
|
+
|
|
33
|
+
Si el compositor entregó una pieza lineal de tres minutos con clímax, convertirla en capas es imposible sin rehacerla. El sistema se diseña primero y define la restricción compositiva.
|
|
34
|
+
|
|
35
|
+
## Un estado por situación
|
|
36
|
+
|
|
37
|
+
Veinte estados de música para veinte situaciones de gameplay produce una matriz de transiciones de 400 celdas que nadie va a autorear bien. Agrupar situaciones por emotional target: la mayoría de los juegos vive bien con 4-6 estados.
|
|
38
|
+
|
|
39
|
+
## Loop que cierra con cadencia auténtica
|
|
40
|
+
|
|
41
|
+
Cada vuelta suena a arranque forzado. Cerrar abierto: semicadencia, pedal, cadencia plagal.
|
|
42
|
+
|
|
43
|
+
## Música ocupando el rango del diálogo
|
|
44
|
+
|
|
45
|
+
Si el arreglo vive en 500 Hz-2 kHz y hay VO, uno de los dos pierde, y el ducking agresivo se escucha. Se resuelve en el arreglo, no en el mix.
|
|
46
|
+
|
|
47
|
+
## Ignorar el estado inicial y el retorno
|
|
48
|
+
|
|
49
|
+
Se diseña explore → combat con cuidado y se olvida combat → explore. El retorno es la transición que el jugador escucha más veces.
|
|
50
|
+
|
|
51
|
+
## Probar solo en el editor
|
|
52
|
+
|
|
53
|
+
El editor de middleware permite disparar estados a mano, en el orden correcto, sin ruido. El jugador real dispara transiciones en secuencias imposibles. Probar con gameplay, no con botones.
|