Added untested code for obtaining the most significant bin.
This commit is contained in:
parent
01ccde22b8
commit
1aade94d33
@ -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--;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user