Skip to content

Guía de diseño de audio

Esta no es una receta individual — es una colección de técnicas para usar el sistema de audio de Yumina para crear un paisaje sonoro completo: BGM que sigue los cambios de escena, efectos de sonido disparados por palabras clave, sonidos ambientales en bucle, crossfades sedosos, y todas las formas de controlar la música desde UI personalizada y narración de IA.


Visión general

El sistema de audio de Yumina tiene múltiples puntos de entrada para controlar el sonido en diferentes niveles:

Método de controlDónde configurarloCaracterísticas
Reproducción automática de playlistPestaña AudioEl más simple — la música de fondo comienza tan pronto como el jugador entra al mundo
BGM condicionalPestaña AudioCambia automáticamente de pista cuando se cumplen condiciones de variable/palabra clave/conteo de turnos, sin comportamientos necesarios
Comportamiento + acción Reproducir AudioPestaña BehaviorsCrossfade en transiciones de escena, combinar con cambios de variable y alternancia de entradas
Directivas de audio de IALa IA escribe [audio: ...] en su respuestaLa IA decide qué reproducir y cuándo — el más flexible, también el menos predecible
API de audio del Root ComponentSección Custom UIDisparar desde botones personalizados, ideal para UI interactiva estilo jukebox

Esta guía cubre 7 patrones uno por uno. Elige lo que necesites, o combínalos.


Patrón 1: Configuración básica de BGM

Lo que vas a construir

Música de fondo que comienza a reproducirse en el momento en que un jugador entra a tu mundo — en bucle, sin configuración extra requerida.

Paso a paso

Paso 1: Sube pistas de audio

Editor → pestaña Audio → haz clic en "Add Track"

CampoValorPor qué
Nombre visibleTema principalPara tu propia referencia
IDmain_themeTodas las referencias usan este ID
TipoBGMMúsica de fondo
Archivo de audioSube tu archivo .mp3 o .oggFormatos de audio comunes soportados
LoopActivadoLa BGM normalmente necesita estar en bucle
Volumen0.7No te pases con el volumen — deja espacio para SFX y ambiente
Fade In2 segundosAparece gradualmente para que no sea discordante

¿Quieres más de una pista? Repite los pasos anteriores para crear pistas adicionales — por ejemplo, explore_bgm (exploración), battle_bgm (combate), town_bgm (pueblo).

Paso 2: Configura la playlist

Aún en la pestaña Audio, encuentra la sección "BGM Playlist":

CampoValorPor qué
Track ListSelecciona main_theme (selecciona todas si tienes varias)Las pistas en la lista se reproducen en orden
Play Modeloop o shuffleloop = reproducir en orden, repetir; shuffle = aleatorizar
AutoplayActivadoLa música empieza cuando el jugador entra al mundo
Wait for First MessageDesactivado (o Activado, según tu preferencia)Si está Activado, la música espera hasta que el jugador envíe su primer mensaje
Gap Seconds0 (o 2)Pausa entre pistas; 0 = transición sin interrupciones

Resultado

El jugador entra al mundo → la música comienza automáticamente (con un fade-in de 2 segundos) → cuando una pista termina, comienza la siguiente → tras la última pista, vuelve al principio.

¿Solo tienes una pista de BGM?

Si solo tienes una canción, simplemente activa loop para esa pista y ponla sola en la playlist. Incluso puedes omitir la playlist por completo y controlarla a través de BGM Condicional o directivas de IA en su lugar.


Patrón 2: Crossfade de BGM en transiciones de escena

Lo que vas a construir

Cuando el jugador se mueve de "Pueblo" a "Mazmorra", la música suave del pueblo se desvanece gradualmente mientras la música ominosa de la mazmorra aumenta — ambas pistas se reproducen simultáneamente durante una breve superposición, haciendo la transición suave y cinematográfica.

Cómo funciona

El jugador hace clic en el botón "Ir a la Mazmorra"
  → El comportamiento se dispara: establece variable location = "dungeon"
  → La misma acción Reproducir Audio del comportamiento: crossfade a dungeon_bgm
  → La pista antigua se desvanece + la nueva pista aumenta, duración de transición 2 segundos

Paso a paso

Paso 1: Prepara pistas de audio

En la pestaña Audio, crea dos (o más) pistas de BGM:

  • village_bgm — música del pueblo, tipo BGM, bucle activado
  • dungeon_bgm — música de la mazmorra, tipo BGM, bucle activado

Pon village_bgm en la playlist como la pista predeterminada, con reproducción automática activada.

Paso 2: Crea una variable

Editor → pestaña Variables → Add Variable

CampoValor
Nombre visibleUbicación actual
IDlocation
TipoString
Valor por defectovillage

Paso 3: Crea un comportamiento

Editor → pestaña Behaviors → Add Behavior

Nombre del comportamiento: Go to Dungeon

Disparador: Action → Action ID: go-dungeon

Acciones (en orden):

#Tipo de acciónConfiguraciónPropósito
1Establecer variablelocation set a dungeonRegistra que el jugador fue a la mazmorra
2Reproducir audioPista dungeon_bgm, operación: crossfade, duración de fundido 2 segundosCambio de pista sedoso
3Habilitar entradaDungeon AtmosphereActiva el lore de la mazmorra
4Deshabilitar entradaVillage AtmosphereDesactiva el lore del pueblo

Crea un comportamiento coincidente "Return to Village" con action ID go-village que hace lo inverso (crossfade a village_bgm, intercambia activación de entradas).

Paso 4: Dispara desde el Root Component

En el Root Component index.tsx (dentro del callback <Chat renderBubble> o en cualquier botón personalizado), llama a executeAction:

tsx
<button onClick={() => api.executeAction("go-dungeon")}>
  Go to Dungeon
</button>

El comportamiento ejecuta todas sus acciones en secuencia — cambia la variable, cambia la música, alterna entradas — todo desde un clic de botón.

¿Qué es crossfade? Fundido cruzado — la pista antigua gradualmente se vuelve más silenciosa mientras la nueva pista gradualmente se vuelve más alta. Ambas pistas se reproducen simultáneamente durante un breve período, sonando como una transición de escena cinematográfica en lugar de un corte abrupto. Una duración de fundido de 2-3 segundos funciona bien.


Patrón 3: Efectos de sonido disparados por palabras clave

Lo que vas a construir

Un sonido de explosión se reproduce automáticamente cuando la IA escribe "explosion". Un sonido de puerta chirriante se reproduce cuando el jugador dice "open the door". Sin comportamientos necesarios — configuras esto directamente en la sección BGM Condicional de la pestaña Audio.

Cómo funciona

BGM Condicional tiene tipos de disparador llamados ai-keyword (palabra clave de IA) y keyword (palabra clave del jugador). El motor escanea el texto de cada mensaje y reproduce la pista correspondiente cuando una palabra clave coincide. A pesar del nombre "BGM Condicional", puede apuntar a cualquier tipo de pista — incluyendo SFX.

Paso a paso

Paso 1: Crea pistas SFX

En la pestaña Audio, crea pistas de efectos de sonido:

SFX de Explosión:

CampoValor
Nombre visibleExplosión
IDexplosion_sfx
TipoSFX
LoopDesactivado (los efectos de sonido normalmente se reproducen una vez)
Volumen0.9

SFX de Apertura de Puerta:

CampoValor
Nombre visibleApertura de puerta
IDdoor_open_sfx
TipoSFX
LoopDesactivado
Volumen0.8

Paso 2: Crea reglas de BGM Condicional

Aún en la pestaña Audio, encuentra la sección "Conditional BGM" → haz clic en "Add Rule"

Regla 1: Reproducir SFX cuando la IA dice "explosion"

CampoValorPor qué
NombreSFX de explosión de IAPara tu propia referencia
Trigger TypeAI Keyword (ai-keyword)Se dispara cuando la respuesta de la IA contiene la palabra clave especificada
Keywordsexplosion, blast, detonatePuedes añadir múltiples sinónimos — coincidir con cualquiera lo dispara
Target Trackexplosion_sfxReproduce el sonido de explosión
Stop Current BGMDesactivadoLos SFX se superponen a la BGM — no detengas la música

Regla 2: Reproducir SFX cuando el jugador dice "open the door"

CampoValorPor qué
NombreSFX puerta del jugadorPara tu propia referencia
Trigger TypePlayer Keyword (keyword)Se dispara cuando el mensaje del jugador contiene la palabra clave especificada
Keywordsopen the door, push the door, open doorMúltiples sinónimos
Target Trackdoor_open_sfxReproduce el sonido de la puerta
Stop Current BGMDesactivadoIgual que antes

Resultado

La IA escribe: "BOOM — una explosión ensordecedora sacude la ladera, el fuego ilumina todo el cielo."
  → El motor escanea y coincide "explosion" → reproduce automáticamente explosion_sfx
  → El jugador escucha el sonido de explosión mientras la BGM sigue sonando

El jugador escribe: "I walk to the door and open it."
  → El motor escanea y coincide "open the door" → reproduce automáticamente door_open_sfx

SFX vs BGM

Los SFX (efectos de sonido) se reproducen una vez y se detienen. La BGM (música de fondo) hace bucle o continúa según la playlist. Cuando una regla de BGM Condicional apunta a una pista de tipo SFX, se reproduce una vez y no reemplaza la música de fondo actual. Pero si stopPreviousBGM se establece en true, detiene la BGM actual primero antes de reproducir la pista — los SFX normalmente no necesitan esto.


Patrón 4: BGM Condicional — Cambio automático impulsado por variables

Lo que vas a construir

Sin comportamientos necesarios — configura una regla directamente en la pestaña Audio: cuando hp baja por debajo de 20, cambia automáticamente a música tensa de crisis; cuando hp vuelve por encima de 20, vuelve a la pista predeterminada.

Cómo funciona

El tipo de disparador variable de BGM Condicional comprueba automáticamente tras cada cambio de variable. Condición cumplida → cambia a la pista objetivo; condición ya no cumplida → retrocede según la configuración fallback (volver a la pista predeterminada de la playlist, o a la pista que estaba sonando previamente).

Paso a paso

Paso 1: Prepara pistas de audio

Asegúrate de que la pestaña Audio tenga:

  • explore_bgm — música de exploración predeterminada (en la playlist)
  • crisis_bgm — música de crisis (solo se reproduce cuando la condición se dispara; no necesita estar en la playlist)

Paso 2: Crea una regla de BGM Condicional

Pestaña Audio → Conditional BGM → Add Rule

CampoValorPor qué
NombreMúsica de crisis por HP bajoPara tu propia referencia
Trigger TypeVariable (variable)Decide según los valores de variables
Conditionhp < 20Se dispara cuando HP está por debajo de 20
Condition LogicAll (all)Solo una condición aquí, así que all y any funcionan igual
Target Trackcrisis_bgmCambia a música de crisis
Priority10Si múltiples reglas coinciden simultáneamente, gana la de mayor prioridad
Fade In Duration1 segundoLa nueva pista aumenta gradualmente
Fade Out Duration1 segundoLa pista antigua se desvanece gradualmente
Stop Current BGMActivadoDetiene la música de exploración antes de reproducir música de crisis
FallbackdefaultCuando la condición ya no se cumple (HP vuelve por encima de 20), vuelve automáticamente a la pista predeterminada de la playlist

Resultado

El jugador está explorando, la BGM es explore_bgm
  → La IA responde: [hp: -15] (hp baja de 30 a 15)
  → El motor detecta hp < 20, condición cumplida
  → explore_bgm se desvanece en 1 segundo, crisis_bgm aumenta en 1 segundo
  → La atmósfera se vuelve tensa instantáneamente

El jugador usa una poción curativa
  → La IA responde: [hp: +20] (hp vuelve de 15 a 35)
  → El motor detecta que hp ya no es < 20, condición no cumplida
  → fallback: "default" → vuelve automáticamente a explore_bgm

Combinaciones multi-condición

Puedes añadir múltiples condiciones a una sola regla. Por ejemplo: hp < 20 Y location == "dungeon" → la música de crisis solo se reproduce cuando estás en la mazmorra con HP bajo. Establece la lógica de condición a all (todas deben coincidir).


Patrón 5: Bucles de sonido ambiental

Lo que vas a construir

Sonidos ambientales que se reproducen continuamente en el fondo de la escena — lluvia, viento, charla de taberna — superpuestos a la BGM para profundizar la inmersión.

Cómo funciona

Ambient es el tercer tipo de pista. Se reproduce independientemente de la BGM — puedes tener una pista de BGM + una pista de ambient sonando simultáneamente. Ambient normalmente se establece en bucle a bajo volumen, sirviendo como un telón de fondo atmosférico constante.

Paso a paso

Paso 1: Crea pistas Ambient

Pestaña Audio → Add Track

CampoValor
Nombre visibleLluvia
IDrain_ambient
TipoAmbient
LoopActivado
Volumen0.3 (el ambient debería ser más silencioso que la BGM — es el telón de fondo)
Fade In3 segundos (aparece gradualmente, no es discordante)
Fade Out3 segundos

Crea más según sea necesario: wind_ambient (viento), tavern_ambient (charla de taberna), forest_ambient (cantos de pájaros e insectos).

Paso 2: Controla el ambient mediante BGM Condicional

Igual que el Patrón 4 — usa una regla de BGM Condicional para controlar cuándo se reproduce el ambient.

Regla: Reproducir ambient de bosque cuando esté en el bosque

CampoValor
NombreAmbiente del bosque
Trigger TypeVariable (variable)
Conditionlocation == forest
Target Trackforest_ambient
Stop Current BGMDesactivado
Fallbackdefault

Clave: stopPreviousBGM debe estar Desactivado. El ambient se superpone a la BGM — no debería detener la música de fondo. Si lo activas, cambiar pistas de ambient también matará cualquier BGM que esté sonando actualmente.

También puedes controlar el ambient mediante comportamientos

Si ya tienes comportamientos de cambio de escena (como el Patrón 2), simplemente añade una acción "Reproducir Audio" a la lista de acciones del comportamiento, apuntando a la pista de ambient:

#Tipo de acciónConfiguraciónPropósito
1Establecer variablelocation set a forestRegistra la ubicación
2Reproducir audioforest_bgm, operación: crossfade, fundido 2sCambia la BGM
3Reproducir audioforest_ambient, operación: play, fade in 3sSuperpone el sonido ambiental
4Reproducir audiotavern_ambient, operación: stop, fade out 3sDetiene el ambient antiguo

De esta forma, un único comportamiento maneja tanto el cambio de BGM como el intercambio de ambient.

Recomendaciones de volumen

BGM: típicamente 0.5-0.7. Ambient: 0.2-0.4. SFX: 0.7-1.0. Con estas tres capas en niveles diferentes, no se pelearán entre sí.


Patrón 6: Controlando audio desde el Root Component

Lo que vas a construir

Un "jukebox" en el Root Component — algunos botones que cada uno reproduce una pista diferente, más un botón "Stop". Este es control puro de UI — no se necesitan comportamientos ni reglas condicionales.

Cómo funciona

useYumina() proporciona estas APIs de audio (todas las duraciones en segundos):

  • api.playAudio?.(trackId, opts) — reproduce la pista especificada. opts incluye volume, fadeDuration, chainTo, maxDuration, duckBgm y loop (sobrescribe el loop de la pista solo para esta reproducción)
  • api.stopAudio?.(trackId?) — detiene la pista especificada (omite el ID para detener todo). Destruye el elemento — usa pauseAudio para reanudar más tarde
  • api.pauseAudio?.(trackId) / api.resumeAudio?.(trackId) — pausa/reanudación real en el sitio
  • api.onAudioEnded?.(cb) — ejecuta cb(trackId) cuando una pista no en bucle termina; devuelve una función para cancelar la suscripción. Úsalo para avanzar automáticamente una lista de reproducción:
tsx
React.useEffect(() => api.onAudioEnded?.((endedId) => {
  if (endedId === currentTrackId && mode !== "single") playNext();
}), [currentTrackId, mode]);

Ambos métodos se pueden llamar directamente en el Root Component index.tsx (dentro de los callbacks <Chat renderBubble>, o en cualquier botón que añadas).

Paso a paso

Paso 1: Prepara pistas de audio

Asegúrate de que la pestaña Audio tenga las pistas que quieres reproducir (créalas como en el Patrón 1). Digamos que tienes:

  • jazz_bgm — jazz
  • rock_bgm — rock
  • classical_bgm — clásica

Paso 2: Escribe el código del Root Component

Editor → sección Custom UI → abre index.tsx → pega lo siguiente (reemplaza el predeterminado return <Chat />):

tsx
export default function MyWorld() {
  const api = useYumina();
  const msgs = api.messages || [];

  const tracks = [
    { id: "jazz_bgm", label: "Jazz", color: "#7c3aed" },
    { id: "rock_bgm", label: "Rock", color: "#dc2626" },
    { id: "classical_bgm", label: "Classical", color: "#0891b2" },
  ];

  return (
    <Chat renderBubble={(msg) => {
      const isLastMsg = msg.messageIndex === msgs.length - 1;
      return (
    <div>
      <div
        style={{ color: "#e2e8f0", lineHeight: 1.7 }}
        dangerouslySetInnerHTML={{ __html: msg.contentHtml }}
      />

      {isLastMsg && (
        <div style={{
          marginTop: "12px",
          padding: "12px",
          background: "rgba(30,41,59,0.5)",
          borderRadius: "8px",
          border: "1px solid #334155",
        }}>
          <div style={{ fontSize: "12px", color: "#94a3b8", marginBottom: "8px" }}>
            Jukebox
          </div>
          <div style={{ display: "flex", gap: "8px", flexWrap: "wrap" }}>
            {tracks.map((t) => (
              <button
                key={t.id}
                onClick={() => api.playAudio?.(t.id, { fadeDuration: 1.5 })}
                style={{
                  padding: "8px 16px",
                  background: t.color,
                  border: "none",
                  borderRadius: "6px",
                  color: "#fff",
                  fontSize: "13px",
                  cursor: "pointer",
                }}
              >
                {t.label}
              </button>
            ))}
            <button
              onClick={() => api.stopAudio?.()}
              style={{
                padding: "8px 16px",
                background: "#475569",
                border: "none",
                borderRadius: "6px",
                color: "#e2e8f0",
                fontSize: "13px",
                cursor: "pointer",
              }}
            >
              Stop
            </button>
          </div>
        </div>
      )}
    </div>
      );
    }} />
  );
}

Desglose línea por línea:

  • MyWorld() es el Root Component — el punto de entrada de la UI del mundo. <Chat renderBubble={...} /> mantiene a la plataforma a cargo de la lista de mensajes, la entrada y el desplazamiento; solo personalizamos el layout por burbuja
  • api.playAudio?.(t.id, { fadeDuration: 1.5 }) — reproduce la pista especificada con un fade-in de 1.5 segundos. Si otra pista está sonando actualmente, la detiene automáticamente primero
  • api.stopAudio?.() — llamada sin argumentos = detiene todo el audio que esté sonando actualmente
  • msg.messageIndex === msgs.length - 1 — solo muestra el jukebox en el último mensaje, así no se repite en cada mensaje

Uso más avanzado

Puedes leer variables para controlar el estado de la UI. Por ejemplo, usa una variable now_playing para seguir el ID de la pista actual, luego muestra un indicador "Sonando ahora" en el botón:

tsx
const nowPlaying = String(api.variables.now_playing || "");

// Actualiza la variable junto con la reproducción
onClick={() => {
  api.playAudio?.(t.id, { fadeDuration: 1.5 });
  api.setVariable("now_playing", t.id);
}}

// Muestra el estado en el botón
{nowPlaying === t.id ? "♪ " + t.label : t.label}

Patrón 7: Control de audio impulsado por IA

Lo que vas a construir

Deja que la IA controle naturalmente la música durante la narración — reproducir una alegre melodía de acordeón al describir la entrada a una taberna, cambiar a BGM intensa de batalla cuando estalla una pelea, reproducir un efecto de sonido de dolor cuando un personaje resulta herido.

Cómo funciona

La IA puede incrustar directivas [audio: trackId action] en sus respuestas. El motor reconoce y ejecuta automáticamente estas directivas mientras las elimina del texto que el jugador ve — como acotaciones en un guion que la audiencia nunca lee, pero que el equipo sigue.

Paso a paso

Paso 1: Registra todas las pistas que la IA podría usar

En la pestaña Audio, crea todas las pistas que quieras que la IA controle:

  • tavern_bgm — música de taberna
  • battle_bgm — música de batalla
  • sword_clash_sfx — efecto de sonido de choque de espadas
  • pain_sfx — efecto de sonido de dolor/lesión
  • rain_ambient — ambient de lluvia

Paso 2: Dile a la IA qué pistas están disponibles mediante el prompt del sistema

La IA no sabrá automáticamente qué pistas has registrado. Necesitas crear una entrada en la pestaña Entries listando las pistas disponibles y las reglas de uso:

Nombre de entrada: Audio Directive Reference

Sección: System Presets

Contenido:

[Sistema de control de audio]
Puedes usar las siguientes directivas de audio en tus respuestas para controlar la música y los efectos de sonido. Las directivas se ejecutan automáticamente y se eliminan del texto que ve el jugador.

Formatos de directiva disponibles:
- [audio: trackId play] — reproducir
- [audio: trackId play 2.0] — reproducir con un fade-in de 2 segundos
- [audio: trackId stop] — detener
- [audio: trackId stop 1.5] — detener con un fade-out de 1.5 segundos
- [audio: trackId crossfade 2.0] — transición crossfade, superposición de 2 segundos
- [audio: trackId volume 0.5] — ajustar el volumen a 0.5
- [audio: trackId play chain:nextTrackId] — cuando esta pista termine, iniciar automáticamente la siguiente

Pistas disponibles:
- tavern_bgm — música animada de acordeón de taberna (buena para escenas sociales, compras)
- battle_bgm — música intensa de batalla (buena para combate, escenas de persecución)
- sword_clash_sfx — efecto de sonido de choque de espadas (bueno para descripciones de acción cuerpo a cuerpo)
- pain_sfx — efecto de sonido de dolor/lesión (bueno para cuando un personaje resulta herido)
- rain_ambient — sonido ambiental de lluvia (bueno para escenas lluviosas)

Pautas de uso:
- Inserta las directivas de audio en puntos narrativos naturales
- Usa crossfade para las transiciones de escena, con una duración de 1.5-2.5 segundos
- Empareja los efectos de sonido con las descripciones de acción, colocándolos cerca del texto correspondiente
- No te excedas — como mucho 2-3 directivas de audio por respuesta

Paso 3: Ejemplo de respuesta de IA

Tras decirle a la IA estas reglas, sus respuestas podrían verse así:

Empujas la pesada puerta de madera de la taberna y una ráfaga de aire cálido te golpea la cara. [audio: tavern_bgm crossfade 2.0]

La taberna está animada — alguien toca el acordeón en la esquina, y un enano en la barra grita por encima de una partida de dados. Apenas has encontrado asiento cuando una figura enmascarada saca de pronto una hoja y se lanza contra ti.

[audio: battle_bgm crossfade 0.5] [audio: sword_clash_sfx play]

Te echas a un lado por instinto. La mesa se parte en dos detrás de ti.

El jugador ve texto narrativo limpio mientras escucha: música de taberna apareciendo → cambio abrupto a música de batalla + efecto de sonido de choque de espadas.

La directiva chain — uso especial

chain permite que una pista inicie automáticamente otra cuando termina:

El sonido de los cuernos de guerra retumba por el valle — ¡la batalla está a punto de comenzar! [audio: war_horn_sfx play chain:battle_bgm]

Tras terminar el toque de cuerno war_horn_sfx, battle_bgm comienza automáticamente — una introducción a la pista principal, más ceremonial que un cambio directo.

La IA podría olvidar usar directivas

La IA no siempre recordará insertar directivas de audio, especialmente en conversaciones largas. Para cambios críticos de BGM de escena (como entrar en una zona de combate), configura reglas de BGM Condicional (Patrón 4) como respaldo. Las directivas de IA son la guinda del pastel; la BGM Condicional es la red de seguridad.


Referencia rápida exhaustiva

Tipos de pista

TipoPropósitoConfiguración típica
BGMMúsica de fondoBucle activado, volumen 0.5-0.7
SFXEfectos de sonido puntualesBucle desactivado, volumen 0.7-1.0
AmbientSonidos ambientales en bucleBucle activado, volumen 0.2-0.4

5 formas de controlar audio

Qué quieres hacerQué métodoDónde configurarlo
Reproducción automática de BGM al entrar al mundoPlaylist + reproducción automáticaPestaña Audio → BGM Playlist
Cambio automático de pista cuando se cumplen condiciones de variableBGM Condicional (disparador de variable)Pestaña Audio → Conditional BGM
Reproducir SFX cuando la respuesta de la IA contiene una palabra claveBGM Condicional (disparador ai-keyword)Pestaña Audio → Conditional BGM
Reproducir SFX cuando el mensaje del jugador contiene una palabra claveBGM Condicional (disparador keyword)Pestaña Audio → Conditional BGM
Cambiar de pista en un número específico de turnoBGM Condicional (disparador turn-count)Pestaña Audio → Conditional BGM
Crossfade en transición de escenaComportamiento + acción Reproducir AudioPestaña Behaviors
Reproducir/detener desde un clic de botónRoot Component api.playAudio?.() / api.stopAudio?.()Sección Custom UI
La IA dispara audio durante la narraciónDirectivas de audio de IA [audio: trackId action]Pestaña Entries (dile a la IA las reglas)

Referencia de directivas de audio de la IA

DirectivaEfecto
[audio: trackId play]Reproducir
[audio: trackId play 2.0]Reproducir con fade-in de 2 segundos
[audio: trackId stop]Detener
[audio: trackId stop 1.5]Detener con fade-out de 1.5 segundos
[audio: trackId crossfade 2.0]Transición crossfade, superposición de 2 segundos
[audio: trackId volume 0.5]Ajustar volumen
[audio: trackId play chain:nextId]Tras terminar, iniciar automáticamente la siguiente pista

Tipos de disparador de BGM Condicional

Tipo de disparadorCuándo se disparaUso típico
variableCuando se cumplen las condiciones de variablehp < 20 reproduce música de crisis
ai-keywordCuando la respuesta de la IA contiene palabra claveLa IA escribe "explosion" reproduce SFX de explosión
keywordCuando el mensaje del jugador contiene palabra claveEl jugador dice "perform" reproduce música
turn-countCuando se alcanza un turno específicoTurno 10 reproduce música de cuenta atrás
session-startCuando comienza la sesiónPista de apertura fija

Parámetros de la acción Reproducir Audio del comportamiento

ParámetroDescripción
Track ID (trackId)Coincide con el ID de pista registrado en la pestaña Audio
Operación (action)play (reproducir), stop (detener), crossfade (cambio crossfade), volume (ajustar volumen)
Volumen (volume)0-1, opcional
Duración del fundido (fadeDuration)Segundos, opcional; 1.5-3 segundos recomendados para crossfade

API de audio del Root Component

MétodoDescripción
api.playAudio?.(trackId, opts)Reproduce una pista. opts puede incluir fadeDuration (segundos), loop, etc.
api.stopAudio?.(trackId?)Detiene una pista. Omite el ID para detener todo
api.pauseAudio?.(trackId) / api.resumeAudio?.(trackId)Pausa/reanuda una pista en el sitio (conserva la posición)
api.onAudioEnded?.(cb)Suscríbete a eventos de pista terminada; devuelve una función para cancelar la suscripción. Úsalo para avanzar automáticamente una lista de reproducción

Problemas comunes

SíntomaCausa probableSolución
No hay sonido en absolutoEl navegador bloquea la reproducción automáticaLos navegadores modernos requieren interacción del usuario (clic, escribir) antes de permitir la reproducción de audio. Haz que el jugador envíe un mensaje primero, o activa "Wait for First Message" en la playlist
La transición de BGM suena entrecortadaNo se usa crossfadeAsegúrate de que la operación "Reproducir Audio" del comportamiento esté establecida en crossfade con una duración de fundido de al menos 1.5 segundos
SFX y BGM se interrumpen entre sístopPreviousBGM está establecido en trueLas reglas de BGM Condicional de tipo SFX deben tener "Detener BGM Actual" desactivado
La IA no usa directivas de audioLa entrada no le dice a la IA sobre ellasCrea una entrada de System Presets listando todos los IDs de pista disponibles y formatos de directiva (mira el Patrón 7)
Ambient demasiado altoVolumen demasiado altoAmbient debería ser 0.2-0.4, con BGM en 0.5-0.7 para mantener la separación
BGM Condicional no se disparaDesajuste de tipo de valor de variableAsegúrate de que el tipo de valor de la condición coincida con el tipo de la variable (por ejemplo, las variables numéricas necesitan comparaciones numéricas, no comparaciones de cadenas)
Múltiples reglas en conflictoMisma prioridadDa a las diferentes reglas de BGM Condicional diferentes valores de prioridad — los números más altos tienen precedencia

Esta es la Receta #14: Guía de diseño de audio

La filosofía de diseño del sistema de audio es: las cosas simples simplemente funcionan (playlist + reproducción automática), y la complejidad se desbloquea por capas (BGM Condicional → control de comportamiento → directivas de IA → API personalizada). No necesitas aprender todos los patrones a la vez — empieza con el Patrón 1, y vuelve por más cuando necesites un control más fino.