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; #lastBins;
#visualizer; #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 * @callback VisUpdateRouter~visualizerRangedUpdateListener
* @param {number} timeDelta elapsed time since last update. * @param {number} timeDelta elapsed time since last update.
* @param {number} bins the bins of the range. * @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); 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. 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++) { for (let binInd = 0; binInd < this.#lastBins.length; binInd++) {
const lastBin = this.#lastBins[binInd]; const lastBin = this.#lastBins[binInd];
@ -48,7 +42,7 @@ export default class VisUpdateRouter {
const { lower, upper, listener } = copyOfRangedListeners[rangedInd]; 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 (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) { if (binInd <= upper) {
listener(delta, bins.slice(lower, upper)); listener(delta, bins.slice(lower, upper), Math.min(Math.max(sigBin, lower), upper));
copyOfRangedListeners.shift(); copyOfRangedListeners.shift();
rangedInd--; rangedInd--;
} }

View File

@ -17,6 +17,7 @@ export default class Visualizer {
* @callback Visualizer~visualizerUpdateListener * @callback Visualizer~visualizerUpdateListener
* @param {number} delta elapsed time since last update. * @param {number} delta elapsed time since last update.
* @param {Uint8Array} bins the bins with varying frequency values. * @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.#analyzer.getByteFrequencyData(self.#buffer);
self.#updateListeners.forEach(listener => { self.#updateListeners.forEach(listener => {
listener(delta, self.#buffer); listener(delta, self.#buffer, self.#buffer.indexOf(Math.max(self.#buffer)));
}); });
requestAnimationFrame(update); requestAnimationFrame(update);
}; };