UNPKG

@geheimgang188/fmod-service-api

Version:
123 lines 8.46 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FmodEvent = void 0; const fmod_event_type_1 = require("./interfaces/fmod-event-type"); class FmodEvent { constructor(name, bankName, additionalBankRequirements, eventType, logger) { this._markerListeners = new Map(); // Add parameters which should be initialised here this.params = []; this.id = `${eventType}:/${name}`; this._logger = logger; this._eventType = eventType; this.eventName = name; this.bankName = bankName; this.additionalBankRequirements = additionalBankRequirements; } init(api, bankLoader) { var _a, _b; (_a = this._logger) === null || _a === void 0 ? void 0 : _a.debug(`Initialising event ${this.id}`); this._api = api; this._bankLoader = bankLoader; for (const param of this.params) { (_b = this._logger) === null || _b === void 0 ? void 0 : _b.debug(`- Initialising parameter ${param.name}`); param.init(this.id, api); } } get api() { if (this._api === undefined) { throw new Error('API not initialised yet.'); } return this._api; } get eventType() { return this._eventType; } play() { return __awaiter(this, void 0, void 0, function* () { if (this._eventType === fmod_event_type_1.FmodEventType.snapshot) { throw new Error(`${this.id} is a snapshot and should be start()ed/stop()ped.`); } yield this.ensureBankLoaded(); return this.api.play(this.id); }); } /** * Plays an event that contains a programmer instrument * @param voiceKey Key to pass to the programmer instrument */ playVoice(voiceKey) { return __awaiter(this, void 0, void 0, function* () { yield this.ensureBankLoaded(); return this.api.playVoice(this.id, voiceKey); }); } /** * @param voiceKey Key used for the programmer instrument * @returns Number of stopped voices */ stopVoice(voiceKey) { return __awaiter(this, void 0, void 0, function* () { return this.api.stopVoice(this.id, voiceKey); }); } start() { return __awaiter(this, void 0, void 0, function* () { // TODO Support restart from beginning yield this.ensureBankLoaded(); return this.api.start(this.id); }); } /** * @returns Number of stopped instances */ stop() { return this.api.stop(this.id); } /** * Subscribe to marker events for this specific FMOD event. * Marker events occur when playback in FMOD runs over e.g. a destination marker. * * Only markers whose event path matches this event’s ID will be forwarded. */ onMarker(cb) { const filtered = (data) => { if (data.event === this.id) { cb(data); } }; this._markerListeners.set(cb, filtered); this.api.onMarker(filtered); } /** * Unsubscribe a marker event callback. */ offMarker(cb) { const filtered = this._markerListeners.get(cb); if (filtered) { this.api.offMarker(filtered); this._markerListeners.delete(cb); } } ensureBankLoaded() { return __awaiter(this, void 0, void 0, function* () { if (this._bankLoader === undefined) throw new Error(`Bank loader not initialised on event ${this.id}`); yield this._bankLoader.ensureBankLoaded(this.bankName); for (const additionalBank of this.additionalBankRequirements) { yield this._bankLoader.ensureBankLoaded(additionalBank); } }); } } exports.FmodEvent = FmodEvent; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZC1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGktZ2VuZXJhdG9yL2Ztb2QtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBSUEsa0VBQTZEO0FBRzdELE1BQWEsU0FBUztJQWdCbEIsWUFBYSxJQUFZLEVBQUUsUUFBZ0IsRUFBRSwwQkFBb0MsRUFBRSxTQUF3QixFQUFFLE1BQWdCO1FBTDVHLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUE4RCxDQUFDO1FBRTFHLGtEQUFrRDtRQUNsQyxXQUFNLEdBQW9CLEVBQUUsQ0FBQztRQUd6QyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztJQUNqRSxDQUFDO0lBRUQsSUFBSSxDQUFFLEdBQWEsRUFBRSxVQUF3Qjs7UUFDekMsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxLQUFLLENBQUUsc0JBQXNCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLEtBQU0sTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRyxDQUFDO1lBQ2hDLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsS0FBSyxDQUFFLDRCQUE0QixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUUsQ0FBQztZQUNoRSxLQUFLLENBQUMsSUFBSSxDQUFF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