Audio Manager

Estimated reading time: 2 minutes

maplebirch.audio imports, caches, and plays mod audio. Audio data is stored in IndexedDB, then decoded and played through the framework with playlist, volume, play mode, and progress support.

Supported formats: .mp3, .wav, .ogg, .m4a, .flac, .webm.

Importing From boot.json

Audio files must be listed in additionFile so ModLoader can provide them. Then declare the folders to import in the maplebirchAddon params.

{
  "modName": "maplebirch",
  "addonName": "maplebirchAddon",
  "modVersion": "^required framework version",
  "params": {
    "audio": ["audio"]
  }
}

Multiple folders:

{
  "params": {
    "audio": ["audio/bgm", "audio/se"]
  }
}

Playback

await maplebirch.audio.playFromMod('myMod', 'battle_theme');
await maplebirch.audio.playFromMod('myMod'); // Play the first track in the mod playlist

maplebirch.audio.pause();
maplebirch.audio.resume();
maplebirch.audio.stop();
maplebirch.audio.togglePlayPause();

await maplebirch.audio.previous();
await maplebirch.audio.next();

Seeking:

maplebirch.audio.seek(50); // Percent
maplebirch.audio.seekTo(30); // Seconds

Importing And Removing

await maplebirch.audio.import('myMod', 'audio');
await maplebirch.audio.import('myMod', 'audio/bgm');

await maplebirch.audio.addFile(file, 'customMod');
await maplebirch.audio.delete('myMod', 'battle_theme');
await maplebirch.audio.clearAudio('myMod');

Playlists

const playlist = await maplebirch.audio.getPlaylist('myMod');
const cached = maplebirch.audio.playlist('myMod');

playlist.clear();
playlist.remove('battle_theme');
playlist.setMode('shuffle');

Play modes:

ValueMeaning
sequentialPlay in order
loop_allLoop the playlist
loop_oneLoop the current track
shuffleShuffle playback
maplebirch.audio.PlayMode = 'loop_all';
maplebirch.audio.cyclePlayMode();

State And Progress

const track = maplebirch.audio.CurrentTrack;
const state = maplebirch.audio.State;
const progress = maplebirch.audio.progress;
const snapshot = maplebirch.audio.snapshot;

maplebirch.audio.formatTime(progress.currentTime);

Common properties:

PropertyDescription
VolumeVolume from 0 to 1
MuteWhether playback is muted
PlayModeCurrent play mode
Stateidle, loading, playing, paused, or stopped
CurrentTrackCurrent track
ActivePlaylistCurrent playlist
currentTimeCurrent playback position in seconds
durationCurrent track duration in seconds
progress{ currentTime, duration, percent }
snapshotCurrent player state snapshot

Binding A Progress Bar

<input id="music-progress" type="range" min="0" max="100" step="0.1" /> <span id="music-time"></span>
maplebirch.audio.bindProgress('music-progress', 'music-time');
maplebirch.audio.unbindProgress('music-progress', 'music-time');

Internal Structure

The public module entry remains src/modules/Audio.ts, registered as maplebirch.audio. Supporting classes live in src/modules/AudioAddon/:

FilePurpose
Audio.tsAudioManager, IndexedDB, cache, events, public API
AudioAddon/Track.tsTrack data object
AudioAddon/Playlist.tsPlaylist, play modes, previous/next/shuffle logic
AudioAddon/AudioBufferPlayer.tsWebAudio playback, pause, seek, and release