Skip to main content

audio

Play sound effects (SE) and background music (BGM) with volume, fading, and playback control. Sound effects are one-shot; BGM is continuous with transport controls.

Import

import { audio } from "@hmcs/sdk";

Sound Effects

audio.se.play(asset, options?) plays a one-shot sound effect. The call returns immediately after the sound begins playing.

// Play a sound effect by asset ID
await audio.se.play("my-mod:click");

// With playback options
await audio.se.play("my-mod:alert", {
volume: 0.5,
speed: 1.2,
panning: -0.5, // -1.0 = left, 0.0 = center, 1.0 = right
});

SeOptions

FieldTypeDefaultDescription
volumenumber1.0Volume level (0.0--1.0)
speednumber1.0Playback speed multiplier
panningnumber0.0Stereo panning (-1.0 left to 1.0 right)

Background Music

Only one BGM track plays at a time. Starting a new track replaces the current one.

Play

// Loop by default
await audio.bgm.play("my-mod:battle-theme");

// One-shot with fade-in
await audio.bgm.play("my-mod:intro", {
loop: false,
volume: 0.6,
fadeIn: { durationSecs: 3.0, easing: "easeIn" },
});

Stop

// Immediate stop
await audio.bgm.stop();

// Fade out over 2 seconds
await audio.bgm.stop({
fadeOut: { durationSecs: 2.0, easing: "easeOut" },
});

Pause and Resume

await audio.bgm.pause();
await audio.bgm.resume();

Update

Change volume or speed while playing. Use the tween field to animate the transition.

// Fade volume to 0.3 over 1 second
await audio.bgm.update({
volume: 0.3,
tween: { durationSecs: 1.0, easing: "easeInOut" },
});

// Change speed immediately
await audio.bgm.update({ speed: 0.8 });

Status

const status = await audio.bgm.status();
if (status.state === "playing") {
console.log(`Now playing: ${status.asset} at volume ${status.volume}`);
}

Types

BgmPlayOptions

FieldTypeDefaultDescription
loopbooleantrueLoop playback
volumenumber1.0Volume level (0.0--1.0)
speednumber1.0Playback speed multiplier
fadeInFadeTween--Fade-in transition settings

BgmStopOptions

FieldTypeDefaultDescription
fadeOutFadeTween--Fade-out transition settings. Omit for immediate stop.

BgmUpdateOptions

FieldTypeDefaultDescription
volumenumber--New volume level
speednumber--New playback speed
tweenFadeTween--Transition settings for the change

FadeTween

FieldTypeDefaultDescription
durationSecsnumber--Duration in seconds
easingstring"linear""linear", "easeIn", "easeOut", or "easeInOut"

BgmStatus

FieldTypeDescription
assetstring | nullCurrent asset ID, or null if stopped
statestring"playing", "paused", or "stopped"
loopbooleanWhether looping is enabled
volumenumberCurrent volume level
speednumberCurrent playback speed

Next Steps

  • Effects -- Trigger visual stamp effects on screen
  • Signals -- Cross-process pub/sub messaging for real-time sync