UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

73 lines (72 loc) 2.73 kB
"use strict"; export function convertFrequencyBandsToOctaveBandsDivisions2(values, target, divisions) { const divisionsMult = divisions; let octaveIndex = 0; let currentOctaveSize = 1; const valuesCount = values.length; const divideMethod = divisions == 2 ? divideOctave2 : divideOctave4; for (let i = 0; i < valuesCount; ) { const { octaveIndexTmp } = divideMethod({ values, target, currentOctaveSize, i, octaveIndex, divisionsMult }); octaveIndex = octaveIndexTmp; i += currentOctaveSize; currentOctaveSize *= 2; } } function divideOctave2(params) { const { values, target, currentOctaveSize, i, octaveIndex, divisionsMult } = params; let octaveIndexTmp = octaveIndex; const [valuesCount0, valuesCount1] = octaveSubSizes(currentOctaveSize); let currentOctaveStart = 0; const sizes = [valuesCount0, valuesCount1]; for (const size of sizes) { let currentOctaveValue = 0; for (let j = 0; j < size; j++) { const currentIndex = i + j + currentOctaveStart; currentOctaveValue += values[currentIndex]; } currentOctaveStart += size; target[octaveIndexTmp] = currentOctaveValue * divisionsMult; octaveIndexTmp++; } return { octaveIndexTmp }; } function octaveSubSizes(currentOctaveSize) { const valuesCount0 = Math.max(1, Math.floor(currentOctaveSize / 3)); const valuesCount1 = currentOctaveSize - valuesCount0; return [valuesCount0, valuesCount1]; } function divideOctave4(params) { const { values, target, currentOctaveSize, i, octaveIndex, divisionsMult } = params; let octaveIndexTmp = octaveIndex; const [valuesCount0, valuesCount1] = octaveSubSizes(currentOctaveSize); const [valuesCount00, valuesCount01] = octaveSubSizes(valuesCount0); const [valuesCount10, valuesCount11] = octaveSubSizes(valuesCount1); let currentOctaveStart = 0; const sizes = [valuesCount00, valuesCount01, valuesCount10, valuesCount11]; for (const size of sizes) { let currentOctaveValue = 0; for (let j = 0; j < size; j++) { const currentIndex = i + j + currentOctaveStart; currentOctaveValue += values[currentIndex]; } currentOctaveStart += size; target[octaveIndexTmp] = currentOctaveValue * divisionsMult; octaveIndexTmp++; } return { octaveIndexTmp }; } export function convertFrequencyBandsToOctaveBands(values, target) { let octaveIndex = 0; let currentOctaveSize = 1; const valuesCount = values.length; for (let i = 0; i < valuesCount; ) { let currentOctaveValue = 0; for (let j = 0; j < currentOctaveSize; j++) { currentOctaveValue += values[i + j]; } target[octaveIndex] = currentOctaveValue; i += currentOctaveSize; currentOctaveSize *= 2; octaveIndex++; } }