Home Reference Source

main/model/component/Audio.js

import { Howler } from 'link/Howler';

export class Audio {

    static get STATE() {
        return {
            CREATED: 0,
            BUFFERING: 1,
            LOADED: 2,
            RUNNING: 3
        }
    }

    constructor(source, { loop = false } = {}) {
        this.state = Audio.STATE.CREATED;
        this.source = source;
        this.loop = loop;
        this.sound = null;
    }

    get loaded() {
        return this.state >= Audio.STATE.LOADED;
    }

    play() {
        if (this.state > Audio.STATE.BUFFERING) {
            this.sound.play();
        }
    }

    stop() {
        if (this.state === Audio.STATE.RUNNING) {
            this.sound.stop();
        }
    }

    clone() {
        return new Audio(this.source, { loop: this.loop });
    }

}