Added untested code for obtaining the most significant bin.

This commit is contained in:
Harrison Deng 2022-04-23 09:13:47 -05:00
parent 01ccde22b8
commit 1aade94d33
2 changed files with 5 additions and 10 deletions

View File

@ -15,17 +15,11 @@ export default class VisUpdateRouter {
#lastBins;
#visualizer;
/**
* @callback VisUpdateRouter~visualizerBinUpdateListener
* @param {number} timeDelta elapsed time since last update.
* @param {number} amplitude The amplitude of the associated bin.
* @param {number} ampDelta change in amplitude of the frequency bin.
*/
/**
* @callback VisUpdateRouter~visualizerRangedUpdateListener
* @param {number} timeDelta elapsed time since last update.
* @param {number} bins the bins of the range.
* @param {number} sigBin The bin with the greatest amplitude. If this bin is outside of the given bounds for the updater, it is rounded to the nearest bound.
*/
/**
@ -39,7 +33,7 @@ export default class VisUpdateRouter {
this.#visualizer.addUpdateListener(this.#visualizerListener);
}
#visualizerListener = (delta, bins) => {
#visualizerListener = (delta, bins, sigBin) => {
const copyOfRangedListeners = [... this.listeners]; // We assume this is sorted properly. A priority queue could be better.
for (let binInd = 0; binInd < this.#lastBins.length; binInd++) {
const lastBin = this.#lastBins[binInd];
@ -48,7 +42,7 @@ export default class VisUpdateRouter {
const { lower, upper, listener } = copyOfRangedListeners[rangedInd];
if (lower > binInd) break; // Don't need to check the rest if the current lowest minimum is greater than the current bin index.
if (binInd <= upper) {
listener(delta, bins.slice(lower, upper));
listener(delta, bins.slice(lower, upper), Math.min(Math.max(sigBin, lower), upper));
copyOfRangedListeners.shift();
rangedInd--;
}

View File

@ -17,6 +17,7 @@ export default class Visualizer {
* @callback Visualizer~visualizerUpdateListener
* @param {number} delta elapsed time since last update.
* @param {Uint8Array} bins the bins with varying frequency values.
* @param {number} sigBin The bin with the greatest amplitude.
*/
/**
@ -66,7 +67,7 @@ export default class Visualizer {
self.#analyzer.getByteFrequencyData(self.#buffer);
self.#updateListeners.forEach(listener => {
listener(delta, self.#buffer);
listener(delta, self.#buffer, self.#buffer.indexOf(Math.max(self.#buffer)));
});
requestAnimationFrame(update);
};