Skip to content
cccskills
FreePublished on GitHub

middleware-integration

Integracion de middleware de audio (Wwise/FMOD): containers, eventos, Switches/States/RTPCs, atenuaciones, soundbanks, streaming vs memoria, y el contrato con el codigo de gameplay. Usar para: Wwise, FMOD, event authoring, RTPC, soundbanks, arquitectura de audio.

The English summary is being prepared. Showing the original description.

SebastianLuser/claude-code-arcane3 stars(GitHub 3 + cccskills 0)

Run score Not tested

See how to install

Files included (2)

  • SKILL.md8.5 KB
  • references/anti-patterns.md3.0 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

middleware-integration — Wwise / FMOD

Diseña la estructura del proyecto de middleware y el contrato entre el audio y el código de gameplay.

Conceptos agnósticos donde se puede; nomenclatura de Wwise como referencia principal, con el equivalente FMOD anotado, porque los dos modelan lo mismo con nombres distintos.

Cuándo usar

  • Estructurar un proyecto de Wwise/FMOD desde cero
  • Definir el contrato de eventos que va a postear el código
  • Diseñar la organización de soundbanks
  • El proyecto de middleware creció desordenado y hay que reorganizarlo
  • Decidir qué va en memoria y qué va en streaming

Input

  1. Leer /audio-spec (event lists), /audio-mix (buses) y /adaptive-music (matriz de transiciones) si existen
  2. Determinar el middleware y su versión
  3. Preguntar al usuario: plataformas target, budget de memoria de audio, y si el proyecto ya existe o se arranca limpio

Equivalencias Wwise ↔ FMOD

ConceptoWwiseFMOD Studio
Unidad que dispara el códigoEventEvent
Contenedor de variaciónRandom / Sequence ContainerMulti-instrument, Scatterer
Selección por estado discretoSwitch ContainerParameter (labeled)
Mezcla continua entre variantesBlend ContainerParameter con automatización
Parámetro continuoRTPC (Game Parameter)Parameter (continuous)
Estado globalStateGlobal parameter / Snapshot
Agrupación de mezclaActor-Mixer / BusGroup bus
Snapshot de mezclaState con propiedades de busSnapshot
Curva de distanciaAttenuation ShareSet3D panner + curvas
EmpaquetadoSoundBankBank
Música interactivaMusic Switch / Playlist ContainerEvent con transition regions

Estructura del proyecto

Organizar por sistema de gameplay, no por tipo de sonido. Weapons/Shotgun/ es navegable; Impacts/ con todo mezclado no.

Actor-Mixer Hierarchy
├── Player          (locomoción, armas, voz del jugador)
├── Enemies         (por arquetipo)
├── World           (props, entorno, destructibles)
├── Ambience        (por zona)
└── UI

Interactive Music
└── (por estado: Explore, Combat, Victory...)

Events
└── (espeja la jerarquía de Actor-Mixer)

Reglas que evitan el desorden:

  • Un evento por acción de gameplay, no por sonido. Play_Weapon_Fire con un Switch de tipo de arma le gana a un evento por arma
  • Los ShareSets (atenuación, conversión, efectos) se definen una vez y se reusan. Un ShareSet por objeto es la causa número uno de proyectos inmanejables
  • Work units separados por sistema: es lo que permite que dos personas trabajen sin conflictos de merge

Containers

ContainerCuándoCuidado
RandomVariación de un mismo sonidoUsar shuffle (round-robin), no random puro: random repite
SequenceSonidos que tienen orden (carga → disparo)Definir qué pasa al interrumpir
SwitchSelección por estado discreto (superficie, tipo de arma)Definir el default: si el Switch no está seteado, el evento no suena
BlendMezcla continua por parámetro (RPM de motor)Cuidar el solapamiento de las curvas o hay huecos

Switches, States y RTPCs

Tres cosas distintas, y confundirlas es un error de arquitectura frecuente:

AlcanceTipoEjemplo
SwitchPor objeto de juegoDiscretoSuperficie bajo este personaje
StateGlobalDiscretoEl juego está en pausa
RTPCGlobal o por objetoContinuoSalud del jugador, intensidad de combate

Regla: si es una propiedad de un objeto específico, es Switch. Si es una condición del juego entero, es State. Si es un número que varía suave, es RTPC.

Usar un State para algo que es por objeto es el bug que produce "todos los personajes caminan sobre la superficie del jugador".

Contrato de RTPCs: todo RTPC necesita rango declarado, curva, y valor por default. El código normaliza y clampea antes de enviarlo — el middleware no debería recibir nunca un valor fuera de rango.

Soundbanks

Estrategia por defecto que funciona en la mayoría de los proyectos:

BankContenidoCuándo carga
InitEstructura del proyecto, busesAl arrancar, siempre
GlobalUI, voz del jugador, música persistenteAl arrancar, siempre
Level_XXAmbiente y props del nivelAl cargar el nivel
Character_XXPor personaje/enemigoCon el spawn del personaje

Streaming vs memoria:

Va en memoriaVa en streaming
Todo lo corto y frecuente (SFX, UI, footsteps)Música
Cualquier cosa que necesite latencia ceroDiálogo largo
Ambientes largos

El streaming ahorra memoria y cuesta latencia y accesos a disco. Un SFX en streaming llega tarde; la música en memoria se come el budget.

Prefetch para lo streameado que necesita arrancar rápido: los primeros ms van en memoria y el resto se stremea.

Contrato con el código

Lo que el código tiene que poder hacer, y nada más:

PostEvent(eventName, gameObject)      → dispara
StopEvent(playingId, fadeMs)          → detiene lo que loopea
SetSwitch(group, value, gameObject)   → propiedad de objeto
SetState(group, value)                → condición global
SetRTPC(param, value01, gameObject?)  → parámetro, normalizado
RegisterGameObject / Unregister       → ciclo de vida

Reglas del contrato (las mismas que enforcea rules/gamedev/audio-code.md):

  • Gameplay nunca referencia assets, solo nombres de evento
  • Todo loop tiene un stop explícito, y se detiene al destruirse el objeto dueño
  • Los RTPCs llegan normalizados y clampeados
  • Un evento que falla (bank no cargado) no rompe el frame: degrada en silencio
  • Registrar y des-registrar game objects es obligatorio — objetos filtrados son un leak clásico

Profiling

El middleware trae el profiler, y es la única fuente de verdad sobre lo que pasa en runtime:

  • Voces activas vs el límite configurado, y qué se está descartando
  • CPU de audio contra el 5-10% del frame
  • Memoria por bank y total
  • Valores de RTPC en vivo — sirve para descubrir que el código manda un rango equivocado
  • Árbol de contribución de voz — por qué un sonido se oye más o menos de lo esperado
  • Capturas exportables para análisis offline

Para profilear objetos de juego hay que tener la captura activa en la vista de Game Object antes de disparar los eventos, o no se registra nada.


Proceso

  1. Definir la jerarquía por sistema de gameplay, con work units separados
  2. Crear los ShareSets de atenuación y conversión antes de los objetos, para que se reusen
  3. Autorear los eventos desde la event list de /audio-spec, uno por acción
  4. Definir Switch/State/RTPC con su alcance correcto, rango y default
  5. Diseñar los buses desde /audio-mix
  6. Definir los banks y qué va en streaming
  7. Documentar el contrato para el equipo de código
  8. Escribir — preguntar "¿Escribo la arquitectura a <path>?" antes de usar Write

Nota sobre automatización

Wwise expone WAAPI y FMOD tiene su API de scripting, así que la autoría en batch es automatizable. Hay servidores MCP de terceros que exponen WAAPI a un agente, pero al momento de escribir esto el más completo se declara EXPERIMENTAL y explícitamente no recomendado para proyectos de producción. Si querés explorarlo, hacelo en un proyecto de prueba, nunca sobre el proyecto real.


Verdict

  • READY — jerarquía por sistema, ShareSets reusados, cada parámetro con el alcance correcto, banks definidos, contrato documentado
  • CONCERNS — la estructura existe pero hay ShareSets duplicados, parámetros con alcance equivocado (State donde va Switch), o banks sin estrategia de carga
  • BLOCKED — falta la event list de /audio-spec o la estructura de buses de /audio-mix

Anti-patterns

→ Read references/anti-patterns.md

Next steps

  • /audio-audit para profilear voces, CPU y memoria en runtime
  • /adaptive-music si falta la matriz de transiciones de música
  • /audio-spec si la event list no existe todavía

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Plan, design, and implement A/B tests and experiments with statistical rigor. Covers hypothesis frameworks, sample sizing, metrics, and result analysis.

The English summary is being prepared. Showing the original description.

SebastianLuser/claude-code-arcane3Updated Oct 27, 2026

Web/mobile accessibility decision guide: WCAG 2.2 AA, ARIA, keyboard nav, focus management, contrast, testing. Use for: a11y, accessibility, wcag, aria, screen reader, keyboard, contrast.

The English summary is being prepared. Showing the original description.

SebastianLuser/claude-code-arcane3Updated Oct 27, 2026

Generate, iterate, and scale ad creative for paid advertising across Google, Meta, LinkedIn, and X. Covers platform specs, creative frameworks, and quality validation.

The English summary is being prepared. Showing the original description.

SebastianLuser/claude-code-arcane3Updated Oct 27, 2026

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.

The English summary is being prepared. Showing the original description.

SebastianLuser/claude-code-arcane3Updated Oct 27, 2026

Design multi-agent systems, create agent architectures, define communication patterns, and build autonomous agent workflows with structured evaluation frameworks.

The English summary is being prepared. Showing the original description.

SebastianLuser/claude-code-arcane3Updated Oct 27, 2026

Inter-agent communication protocol for C-suite agent teams. Defines invocation syntax, loop prevention, isolation rules, response formats, and quality loops.

The English summary is being prepared. Showing the original description.

SebastianLuser/claude-code-arcane3Updated Oct 27, 2026

See all skills by SebastianLuser

Report a problem with this skill