El módulo Audio envuelve la potente Web Audio API del navegador para ofrecer un manejo sencillo de efectos de sonido, música de fondo, y síntesis procedural de sonido (creación de sonidos mediante código sin usar archivos).
Para cargar y reproducir recursos de audio MP3, WAV, OGG, etc., con control de volumen y loops. También permite generar pitidos y sonidos retro al vuelo sin cargar archivos pesados.
Siempre que tu juego necesite feedback sonoro. Funciona con Engine, PIXIEngine, LittleEngine y DOMEngine - no depende del renderizador. Cada motor llama Audio.init() en su init().
El contexto de audio debe ser inicializado, idealmente después de que la página haya cargado o como respuesta al primer clic del usuario (políticas del navegador).
Audio.init();Audio.load(name, url) -> PromiseCarga un archivo de audio y lo asocia a un nombre en caché. Como es asíncrono, debes usarawaito un.then().Audio.play(name, vol = 1, loop = false) -> { source, gain }Reproduce un audio previamente cargado.name: Nombre asignado en.load().vol: Volumen (0 a 1).loop:truesi es música de fondo que debe repetirse. Devuelve el nodo fuente y el nodo de ganancia por si necesitas manipularlos directamente (ej. para detenerlos después).
async function initGame() {
Audio.init();
// Cargar los recursos
await Audio.load('explosion', 'assets/audio/boom.wav');
await Audio.load('bgm', 'assets/audio/music.mp3');
// Reproducir música en bucle al 50% de volumen
Audio.play('bgm', 0.5, true);
}
// Más tarde en el update
function onPlayerHit() {
Audio.play('explosion', 0.8);
}Perfecto para game jams o juegos de estilo retro donde no quieres incluir archivos externos pesados.
-
Audio.synth(name, type = 'sine', freq = 440, duration = 0.1, volume = 0.3, slideFreq = null)Genera una onda y la guarda en caché bajonamepara reproducirla después conAudio.play(). No suena al definirla.name(string): Identificador usado luego enAudio.play(name).type(string):'sine'(suave),'square'(estridente/8-bits),'saw'(sierra, metálico),'noise'(ruido blanco, útil para explosiones). Cualquier otro valor produce una onda senoidal.freq(number): Frecuencia en Hercios. (ej. 440 es un La central).duration(number): Duración en segundos (ej. 0.1).volume(number): Volumen de 0 a 1.slideFreq(number|null): Frecuencia final para un deslizamiento de tono (ej. 880 → 1760 en un "win").
-
Audio.synth({ type, freq, duration, volume, slideFreq })Variante con objeto que reproduce el sonido al instante (one-shot), sin guardarlo en caché. Útil para eventos puntuales sin nombre.
// Definir sonidos al iniciar el juego
Audio.synth('jump', 'sine', 600, 0.15, 0.5);
Audio.synth('coin', 'square', 1200, 0.1);
Audio.synth('win', 'sine', 523, 0.55, 0.22, 880); // slide de tono
// Reproducir cuando ocurra el evento
Audio.play('jump');
Audio.play('coin', 0.8);
// One-shot inmediato (sin nombre)
Audio.synth({ type: 'noise', freq: 80, duration: 0.35, volume: 0.4 });Audio.resume()Intenta reanudar el contexto de audio. Los navegadores pausan el audio hasta que el usuario interactúa (ej. hace clic). Si ves que el audio no suena, puedes llamar a esto tras un click.Audio.toggleMute() -> booleanSilencia o restaura todo el audio del motor. Devuelvetruesi quedó en silencio,falsesi tiene sonido. Útil para un botón de "Mute" en la UI.