@geheimgang188/fmod-service-api
Version:
FMOD service API
123 lines • 8.46 kB
JavaScript
"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZC1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGktZ2VuZXJhdG9yL2Ztb2QtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBSUEsa0VBQTZEO0FBRzdELE1BQWEsU0FBUztJQWdCbEIsWUFBYSxJQUFZLEVBQUUsUUFBZ0IsRUFBRSwwQkFBb0MsRUFBRSxTQUF3QixFQUFFLE1BQWdCO1FBTDVHLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUE4RCxDQUFDO1FBRTFHLGtEQUFrRDtRQUNsQyxXQUFNLEdBQW9CLEVBQUUsQ0FBQztRQUd6QyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztJQUNqRSxDQUFDO0lBRUQsSUFBSSxDQUFFLEdBQWEsRUFBRSxVQUF3Qjs7UUFDekMsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxLQUFLLENBQUUsc0JBQXNCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLEtBQU0sTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRyxDQUFDO1lBQ2hDLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsS0FBSyxDQUFFLDRCQUE0QixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUUsQ0FBQztZQUNoRSxLQUFLLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDSCxJQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFHLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBRSwwQkFBMEIsQ0FBRSxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUssSUFBSTs7WUFDTixJQUFLLElBQUksQ0FBQyxVQUFVLEtBQUssK0JBQWEsQ0FBQyxRQUFRLEVBQUcsQ0FBQztnQkFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBRSxHQUFHLElBQUksQ0FBQyxFQUFFLG1EQUFtRCxDQUFFLENBQUM7WUFDckYsQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUMsRUFBRSxDQUFFLENBQUM7UUFDcEMsQ0FBQztLQUFBO0lBRUQ7OztPQUdHO0lBQ0csU0FBUyxDQUFFLFFBQWdCOztZQUM3QixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUUsQ0FBQztRQUNuRCxDQUFDO0tBQUE7SUFFRDs7O09BR0c7SUFDRyxTQUFTLENBQUUsUUFBZ0I7O1lBQzdCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUUsQ0FBQztRQUNuRCxDQUFDO0tBQUE7SUFFSyxLQUFLOztZQUNQLHNDQUFzQztZQUN0QyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBRSxDQUFDO1FBQ3JDLENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0gsSUFBSTtRQUNBLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsQ0FBRSxFQUFnQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxDQUFFLElBQWdCLEVBQVMsRUFBRTtZQUMxQyxJQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRyxDQUFDO2dCQUMzQixFQUFFLENBQUUsSUFBSSxDQUFFLENBQUM7WUFDZixDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBRSxFQUFFLEVBQUUsUUFBUSxDQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUUsUUFBUSxDQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFFLEVBQWdDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUUsRUFBRSxDQUFFLENBQUM7UUFDakQsSUFBSyxRQUFRLEVBQUcsQ0FBQztZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLFFBQVEsQ0FBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUUsRUFBRSxDQUFFLENBQUM7UUFDdkMsQ0FBQztJQUNMLENBQUM7SUFFYSxnQkFBZ0I7O1lBQzFCLElBQUssSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTO2dCQUFHLE1BQU0sSUFBSSxLQUFLLENBQUUsd0NBQXdDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFDO1lBRTNHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBRSxJQUFJLENBQUMsUUFBUSxDQUFFLENBQUM7WUFDekQsS0FBTSxNQUFNLGNBQWMsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUcsQ0FBQztnQkFDN0QsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFFLGNBQWMsQ0FBRSxDQUFDO1lBQzlELENBQUM7UUFDTCxDQUFDO0tBQUE7Q0FDSjtBQXZIRCw4QkF1SEMifQ==