KEXEL's picture
1.1
b0bfea8 verified
/**
* @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;
}
}