diff --git a/npm/dist/WebAudioFontPlayer.js b/npm/dist/WebAudioFontPlayer.js index 5e71ffc..4bfac97 100644 --- a/npm/dist/WebAudioFontPlayer.js +++ b/npm/dist/WebAudioFontPlayer.js @@ -296,10 +296,17 @@ function WebAudioFontPlayer() { return envelope; }; this.adjustPreset = function (audioContext, preset) { - for (var i = 0; i < preset.zones.length; i++) { - this.adjustZone(audioContext, preset.zones[i]); - } - }; + const fixedZones = []; + for (let zone of preset.zones) { + if (zone.keyRangeLow > zone.keyRangeHigh) continue; // pathological case, not used anyway + fixedZones.push(zone); + this.adjustZone(audioContext, zone); + } //loop preset.zones + preset.zones = fixedZones; + // removing 1-semitone gaps between zones; important for microtones: + for (let index = 1; index < preset.zones.length; ++index) + preset.zones[index].keyRangeLow = preset.zones[index - 1].keyRangeHigh; + }; this.adjustZone = function (audioContext, zone) { if (zone.buffer) { // diff --git a/npm/src/player.js b/npm/src/player.js index 77fdc70..5e3e368 100644 --- a/npm/src/player.js +++ b/npm/src/player.js @@ -169,9 +169,16 @@ function WebAudioFontPlayer() { return envelope; }; this.adjustPreset = function (audioContext, preset) { - for (var i = 0; i < preset.zones.length; i++) { - this.adjustZone(audioContext, preset.zones[i]); - } + const fixedZones = []; + for (let zone of preset.zones) { + if (zone.keyRangeLow > zone.keyRangeHigh) continue; // pathological case, not used anyway + fixedZones.push(zone); + this.adjustZone(audioContext, zone); + } //loop preset.zones + preset.zones = fixedZones; + // removing 1-semitone gaps between zones; important for microtones: + for (let index = 1; index < preset.zones.length; ++index) + preset.zones[index].keyRangeLow = preset.zones[index - 1].keyRangeHigh; }; this.adjustZone = function (audioContext, zone) { if (zone.buffer) {