react-hifi
Version:
A set of react components wich provides simple abstraption to manipulate HTML5 AudioContext API (Equalizer, visualisation, stereo, basic controls)
43 lines • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var plugin_factory_1 = require("../_lib/plugin-factory");
var helpers_1 = require("../../helpers");
var EqualizerPlugin = /** @class */ (function () {
function EqualizerPlugin() {
}
EqualizerPlugin.prototype.shouldNotUpdate = function (prevProps, nextProps) {
return helpers_1.shallowObject(prevProps.data, nextProps.data) && prevProps.preAmp === nextProps.preAmp;
};
EqualizerPlugin.prototype.createNode = function (audioContext, _a) {
var data = _a.data, _b = _a.preAmp, preAmp = _b === void 0 ? 0 : _b;
var frequencies = Object.keys(data).map(Number);
return frequencies.map(function (freq, idx) {
var filter = new BiquadFilterNode(audioContext);
filter.frequency.value = freq;
filter.gain.value = data[freq] + preAmp;
switch (idx) {
case 0:
filter.type = 'lowshelf';
break;
case frequencies.length - 1:
filter.type = 'highshelf';
break;
default:
filter.type = 'peaking';
filter.Q.value = (2 * freq) / Math.abs(frequencies[idx + 1] - frequencies[idx - 1]);
break;
}
return filter;
});
};
EqualizerPlugin.prototype.updateNode = function (nodes, _a) {
var _b = _a.preAmp, preAmp = _b === void 0 ? 0 : _b, data = _a.data;
nodes.forEach(function (node, idx) {
node.gain.value = data[node.frequency.value] + preAmp;
});
};
return EqualizerPlugin;
}());
exports.EqualizerPlugin = EqualizerPlugin;
exports.default = plugin_factory_1.pluginFactory(new EqualizerPlugin());
//# sourceMappingURL=index.js.map