Added bin range listener function.
This commit is contained in:
parent
5fdd6f2f01
commit
6cac185c9b
@ -5,7 +5,7 @@ import Visualizer from "./Visualizer.js";
|
|||||||
* A visualizer update manager offers an extra layer of abstraction on top of the {@link Visualizer}'s update listener.
|
* A visualizer update manager offers an extra layer of abstraction on top of the {@link Visualizer}'s update listener.
|
||||||
*
|
*
|
||||||
* Specifically, the update manager handles updates directly from the {@link Visualizer} and checks for changes in the individual bins. These changes are then broadcasted to the individual bin listeners.
|
* Specifically, the update manager handles updates directly from the {@link Visualizer} and checks for changes in the individual bins. These changes are then broadcasted to the individual bin listeners.
|
||||||
* If a bin has not changed, then it will not receive an update call. This means that there may be savings in function calls if this is used over the {@link Visualizer} directly.
|
* In the rare event that a bin has not changed, then it will not receive an update call.
|
||||||
*/
|
*/
|
||||||
export default class VisualizerUpdateManager {
|
export default class VisualizerUpdateManager {
|
||||||
/**
|
/**
|
||||||
@ -24,7 +24,7 @@ export default class VisualizerUpdateManager {
|
|||||||
const lastBin = this._lastBins[binInd];
|
const lastBin = this._lastBins[binInd];
|
||||||
if (lastBin !== bins[binInd]) {
|
if (lastBin !== bins[binInd]) {
|
||||||
this._binnedListeners[binInd].forEach(listener => {
|
this._binnedListeners[binInd].forEach(listener => {
|
||||||
listener(delta, bins[binInd] - lastBin);
|
listener(delta, bins[binInd], bins[binInd] - lastBin);
|
||||||
});
|
});
|
||||||
this._lastBins[binInd] = bins[binInd];
|
this._lastBins[binInd] = bins[binInd];
|
||||||
}
|
}
|
||||||
@ -35,9 +35,11 @@ export default class VisualizerUpdateManager {
|
|||||||
/**
|
/**
|
||||||
* @callback visualizerBinUpdateListener
|
* @callback visualizerBinUpdateListener
|
||||||
* @param {number} timeDelta elapsed time since last update.
|
* @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.
|
* @param {number} ampDelta change in amplitude of the frequency bin.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {number} freqBin the frequency bin this update listener should listen to.
|
* @param {number} freqBin the frequency bin this update listener should listen to.
|
||||||
@ -50,6 +52,22 @@ export default class VisualizerUpdateManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Similar to {@link VisualizerUpdateManager#AddVisualizerBinUpdateListener}, this method adds the same listener to a range of bins.
|
||||||
|
*
|
||||||
|
* @param {number} min The lower bound of the bins to listen to (inclusive).
|
||||||
|
* @param {number} max The upper bound of the bins to listen to (inclusive).
|
||||||
|
* @param {visualizerBinUpdateListener} listener The listener to register to these bins.
|
||||||
|
* @returns {boolean} True if and only if the listener was added at least once.
|
||||||
|
*/
|
||||||
|
addVisualizerRangeUpdateListener(min, max, listener) {
|
||||||
|
let added = false;
|
||||||
|
for (let i = min; i <= max; i++) {
|
||||||
|
if (this.AddVisualizerBinUpdateListener(i, listener)) added = true;
|
||||||
|
}
|
||||||
|
return added;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {number} freqBin the frequency bin the update listener to be removed from is in.
|
* @param {number} freqBin the frequency bin the update listener to be removed from is in.
|
||||||
@ -63,6 +81,22 @@ export default class VisualizerUpdateManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Similar to {@link removeVisualizerBinUpdateListener}, this method removes the given listener from a range of bins.
|
||||||
|
*
|
||||||
|
* @param {number} min The lower bound of bins to remove the listener from (inclusive).
|
||||||
|
* @param {number} max The upper bound of bin to remove the listener from (inclusive.)
|
||||||
|
* @param {visualizerBinUpdateListener} listener The update listener to remove from the bins.
|
||||||
|
* @returns {boolean} True if and only if at least one listener was removed.
|
||||||
|
*/
|
||||||
|
removeVisualizerRangeUpdateListener(min, max, listener) {
|
||||||
|
let removed = false;
|
||||||
|
for (let i = min; i <= max; i++) {
|
||||||
|
if (this.removeVisualizerBinUpdateListener(i, listener)) removed = true;
|
||||||
|
}
|
||||||
|
return removed;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {visualizerBinUpdateListener[][]} binnedListeners an array of the same length as the number of bins where each element is another array containing the listeners for that bin.
|
* @param {visualizerBinUpdateListener[][]} binnedListeners an array of the same length as the number of bins where each element is another array containing the listeners for that bin.
|
||||||
@ -81,4 +115,13 @@ export default class VisualizerUpdateManager {
|
|||||||
getBinnedListeners() {
|
getBinnedListeners() {
|
||||||
return this._binnedListeners;
|
return this._binnedListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears this manager of all listeners.
|
||||||
|
*/
|
||||||
|
clearBinnedListeners() {
|
||||||
|
this._binnedListeners.forEach(bin => {
|
||||||
|
bin.length = 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user