UNPKG

sono

Version:

A simple yet powerful JavaScript library for working with Web Audio

147 lines (114 loc) 4.64 kB
'use strict'; exports.__esModule = true; var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _abstractEffect = require('./abstract-effect'); var _abstractEffect2 = _interopRequireDefault(_abstractEffect); var _sono = require('../core/sono'); var _sono2 = _interopRequireDefault(_sono); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Phaser = function (_AbstractEffect) { (0, _inherits3.default)(Phaser, _AbstractEffect); function Phaser() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$stages = _ref.stages, stages = _ref$stages === undefined ? 8 : _ref$stages, _ref$feedback = _ref.feedback, feedback = _ref$feedback === undefined ? 0.5 : _ref$feedback, _ref$frequency = _ref.frequency, frequency = _ref$frequency === undefined ? 0.5 : _ref$frequency, _ref$gain = _ref.gain, gain = _ref$gain === undefined ? 300 : _ref$gain, _ref$wet = _ref.wet, wet = _ref$wet === undefined ? 0.8 : _ref$wet, _ref$dry = _ref.dry, dry = _ref$dry === undefined ? 0.8 : _ref$dry; (0, _classCallCheck3.default)(this, Phaser); stages = stages || 8; var filters = []; for (var i = 0; i < stages; i++) { filters.push(_sono2.default.context.createBiquadFilter()); } var first = filters[0]; var last = filters[filters.length - 1]; var _this = (0, _possibleConstructorReturn3.default)(this, _AbstractEffect.call(this, first, last)); _this._stages = stages; _this._feedback = _sono2.default.context.createGain(); _this._lfo = _sono2.default.context.createOscillator(); _this._lfoGain = _sono2.default.context.createGain(); _this._lfo.type = 'sine'; for (var _i = 0; _i < filters.length; _i++) { var filter = filters[_i]; filter.type = 'allpass'; filter.frequency.value = 1000 * _i; _this._lfoGain.connect(filter.frequency); // filter.Q.value = 10; if (_i > 0) { filters[_i - 1].connect(filter); } } _this._lfo.connect(_this._lfoGain); _this._lfo.start(0); _this._nodeOut.connect(_this._feedback); _this._feedback.connect(_this._node); _this.wet = wet; _this.dry = dry; _this.update({ frequency: frequency, gain: gain, feedback: feedback }); return _this; } Phaser.prototype.enable = function enable(value) { _AbstractEffect.prototype.enable.call(this, value); if (this._feedback) { this._feedback.disconnect(); } if (value && this._feedback) { this._nodeOut.connect(this._feedback); this._feedback.connect(this._node); } }; Phaser.prototype.update = function update(options) { this.frequency = options.frequency; this.gain = options.gain; this.feedback = options.feedback; }; (0, _createClass3.default)(Phaser, [{ key: 'stages', get: function get() { return this._stages; } }, { key: 'frequency', get: function get() { return this._lfo.frequency.value; }, set: function set(value) { this.setSafeParamValue(this._lfo.frequency, value); } }, { key: 'gain', get: function get() { return this._lfoGain.gain.value; }, set: function set(value) { this.setSafeParamValue(this._lfoGain.gain, value); } }, { key: 'feedback', get: function get() { return this._feedback.gain.value; }, set: function set(value) { this.setSafeParamValue(this._feedback.gain, value); } }]); return Phaser; }(_abstractEffect2.default); exports.default = _sono2.default.register('phaser', function (opts) { return new Phaser(opts); });