@web-engine-dev/audio
Game audio engine with spatial audio, buses, and adaptive music for web-engine-dev.
Features
- Spatial Audio: 3D positioned sound sources
- Audio Buses: Hierarchical mixing with effects
- Adaptive Music: Dynamic music systems
- Sound Pooling: Efficient sound instance management
- Web Audio API: Native browser audio support
- Audio Sprites: Multiple sounds in single file
Installation
bash
npm install @web-engine-dev/audio
# or
pnpm add @web-engine-dev/audioQuick Start
typescript
import { AudioManager, SoundEmitter, AudioBus } from '@web-engine-dev/audio';
// Initialize audio manager
const audio = new AudioManager();
// Load sounds
await audio.load('explosion', 'sounds/explosion.mp3');
await audio.load('music', 'sounds/background.mp3');
// Play 2D sound
audio.play('explosion', { volume: 0.8 });
// Play 3D spatial sound
audio.playAt('explosion', position, {
maxDistance: 50,
rolloff: 'linear',
});
// Play background music
audio.playMusic('music', { loop: true, fadeIn: 2.0 });API Overview
Audio Buses
typescript
// Create bus hierarchy
const masterBus = audio.createBus('master');
const sfxBus = audio.createBus('sfx', { parent: masterBus });
const musicBus = audio.createBus('music', { parent: masterBus });
// Adjust bus volume
sfxBus.setVolume(0.7);
musicBus.setVolume(0.5);
// Add effects
sfxBus.addEffect(new ReverbEffect());Spatial Audio
typescript
const emitter = new SoundEmitter({
position: Vec3.ZERO,
maxDistance: 100,
rolloffModel: 'inverse',
innerAngle: 45,
outerAngle: 180,
});
emitter.play('footstep');
emitter.setPosition(newPosition);Adaptive Music
typescript
const musicSystem = new AdaptiveMusicSystem({
layers: [
{ name: 'base', file: 'music_base.mp3' },
{ name: 'combat', file: 'music_combat.mp3' },
{ name: 'drums', file: 'music_drums.mp3' },
],
});
// Crossfade layers based on game state
musicSystem.setLayerWeight('combat', inCombat ? 1 : 0);Peer Dependencies
@web-engine-dev/math- Vector math for spatial audio