/** * @typedef {Object} SoundFontRange * @property {number} min - the minimum midi note * @property {number} max - the maximum midi note */ export class BasicZone { /** * The zone's velocity range * min -1 means that it is a default value * @type {SoundFontRange} */ velRange = { min: -1, max: 127 }; /** * The zone's key range * min -1 means that it is a default value * @type {SoundFontRange} */ keyRange = { min: -1, max: 127 }; /** * Indicates if the zone is global * @type {boolean} */ isGlobal = false; /** * The zone's generators * @type {Generator[]} */ generators = []; /** * The zone's modulators * @type {Modulator[]} */ modulators = []; /** * @returns {boolean} */ get hasKeyRange() { return this.keyRange.min !== -1; } /** * @returns {boolean} */ get hasVelRange() { return this.velRange.min !== -1; } /** * @param generatorType {generatorTypes} * @param notFoundValue {number} * @returns {number} */ getGeneratorValue(generatorType, notFoundValue) { return this.generators.find(g => g.generatorType === generatorType)?.generatorValue ?? notFoundValue; } }