65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
import Resonator from '../framework/resonator';
|
|
|
|
|
|
export default class Sound {
|
|
constructor() {
|
|
this.res = new Resonator();
|
|
this.ambience = null;
|
|
this.music = null;
|
|
this.ambienceVolume = 1;
|
|
this.musicVolume = 1;
|
|
this.sfxVolume = 1;
|
|
}
|
|
|
|
play(file) {
|
|
const sound = this.res.loadImmediate(file);
|
|
sound.setVolume(this.sfxVolume);
|
|
sound.play();
|
|
}
|
|
|
|
async setAmbience(file) {
|
|
if (this.ambience) {
|
|
const previousAmbience = this.ambience;
|
|
this.ambience = null;
|
|
setTimeout(() => previousAmbience.fadeOut(6), 1500);
|
|
setTimeout(() => previousAmbience.destroy(), 6000);
|
|
}
|
|
if (!file) return;
|
|
this.ambience = this.res.stream(file, 0);
|
|
this.ambience.setVolume(this.ambienceVolume);
|
|
this.ambience.play();
|
|
this.ambience.loop(true);
|
|
this.ambience.fadeIn(3);
|
|
}
|
|
|
|
setMusic(file) {
|
|
if (this.music) {
|
|
const previousMusic = this.music;
|
|
setTimeout(() => previousMusic.fadeOut(2), 500);
|
|
setTimeout(() => previousMusic.destroy(), 2000);
|
|
}
|
|
if (!file) return;
|
|
this.music = this.res.stream(file, 1);
|
|
this.music.setVolume(this.musicVolume);
|
|
this.music.play();
|
|
this.music.fadeIn(2);
|
|
}
|
|
|
|
setImpulse(file) {
|
|
this.res.setEnvironmentImpulse(file);
|
|
}
|
|
|
|
setMusicVolume(volume) {
|
|
this.musicVolume = volume;
|
|
if (this.music) this.music.setVolume(volume);
|
|
}
|
|
|
|
setAmbienceVolume(volume) {
|
|
this.ambienceVolume = volume;
|
|
if (this.ambience) this.ambience.setVolume(volume);
|
|
}
|
|
|
|
setSFXVolume(volume) {
|
|
this.sfxVolume = volume;
|
|
}
|
|
} |