UNPKG

@ng-web-apis/audio

Version:

This is a library for declarative use of Web Audio API with Angular

93 lines 11.4 kB
import { __decorate } from "tslib"; import { Attribute, Directive, EventEmitter, inject, Input, Output } from '@angular/core'; import { audioParam } from '../decorators/audio-param'; import { AUDIO_CONTEXT } from '../tokens/audio-context'; import { asAudioNode } from '../tokens/audio-node'; import { CONSTRUCTOR_SUPPORT } from '../tokens/constructor-support'; import { connect } from '../utils/connect'; import { parse } from '../utils/parse'; import * as i0 from "@angular/core"; class WebAudioOscillator extends OscillatorNode { detuneParam; frequencyParam; ended; constructor(autoplay, detuneArg, frequencyArg) { const context = inject(AUDIO_CONTEXT); const modern = inject(CONSTRUCTOR_SUPPORT); const detune = parse(detuneArg, 0); const frequency = parse(frequencyArg, 440); if (modern) { super(context, { detune, frequency }); WebAudioOscillator.init(this, null, autoplay); } else { const result = context.createOscillator(); Object.setPrototypeOf(WebAudioOscillator.prototype, Object.getPrototypeOf(result)); Object.setPrototypeOf(result, WebAudioOscillator.prototype); result.detune.value = detune; result.frequency.value = frequency; WebAudioOscillator.init(result, null, autoplay); return result; } } static init(that, node, autoplay) { connect(node, that); if (autoplay !== null) { that.start(); } const ended = new EventEmitter(); that.ended = ended; that.onended = () => ended.emit(); } set periodicWave(periodicWave) { this.setPeriodicWave(periodicWave); } ngOnDestroy() { try { this.stop(); } catch { // noop } this.disconnect(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioOscillator, deps: [{ token: 'autoplay', attribute: true }, { token: 'detune', attribute: true }, { token: 'frequency', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WebAudioOscillator, isStandalone: true, selector: "[waOscillatorNode]", inputs: { type: "type", channelCount: "channelCount", channelCountMode: "channelCountMode", channelInterpretation: "channelInterpretation", detuneParam: ["detune", "detuneParam"], frequencyParam: ["frequency", "frequencyParam"], periodicWave: "periodicWave" }, outputs: { ended: "ended" }, providers: [asAudioNode(WebAudioOscillator)], exportAs: ["AudioNode"], usesInheritance: true, ngImport: i0 }); } __decorate([ audioParam('detune') ], WebAudioOscillator.prototype, "detuneParam", void 0); __decorate([ audioParam('frequency') ], WebAudioOscillator.prototype, "frequencyParam", void 0); export { WebAudioOscillator }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioOscillator, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[waOscillatorNode]', inputs: ['type', 'channelCount', 'channelCountMode', 'channelInterpretation'], providers: [asAudioNode(WebAudioOscillator)], exportAs: 'AudioNode', }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Attribute, args: ['autoplay'] }] }, { type: undefined, decorators: [{ type: Attribute, args: ['detune'] }] }, { type: undefined, decorators: [{ type: Attribute, args: ['frequency'] }] }]; }, propDecorators: { detuneParam: [{ type: Input, args: ['detune'] }], frequencyParam: [{ type: Input, args: ['frequency'] }], ended: [{ type: Output }], periodicWave: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NjaWxsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvYXVkaW8vc3JjL3NvdXJjZXMvb3NjaWxsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXJDLE1BT2Esa0JBQW1CLFNBQVEsY0FBYztJQUczQyxXQUFXLENBQTRCO0lBSXZDLGNBQWMsQ0FBNEI7SUFHMUMsS0FBSyxDQUFzQjtJQUVsQyxZQUMyQixRQUF1QixFQUN6QixTQUF3QixFQUNyQixZQUEyQjtRQUVuRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLElBQUksTUFBTSxFQUFFO1lBQ1IsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDO1lBQ3BDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2pEO2FBQU07WUFDSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQXdCLENBQUM7WUFFaEUsTUFBTSxDQUFDLGNBQWMsQ0FDakIsa0JBQWtCLENBQUMsU0FBUyxFQUM1QixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUNoQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFNUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUNuQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUVoRCxPQUFPLE1BQU0sQ0FBQztTQUNqQjtJQUNMLENBQUM7SUFFUyxNQUFNLENBQUMsSUFBSSxDQUNqQixJQUF3QixFQUN4QixJQUFzQixFQUN0QixRQUF1QjtRQUV2QixPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXBCLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtZQUNuQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEI7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXZDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUNXLFlBQVksQ0FBQyxZQUEwQjtRQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSTtZQUNBLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNmO1FBQUMsTUFBTTtZQUNKLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO3dHQXhFUSxrQkFBa0Isa0JBYVosVUFBVSw4QkFDVixRQUFRLDhCQUNSLFdBQVc7NEZBZmpCLGtCQUFrQixtV0FIaEIsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7QUFNckM7SUFETixVQUFVLENBQUMsUUFBUSxDQUFDO3VEQUN5QjtBQUl2QztJQUROLFVBQVUsQ0FBQyxXQUFXLENBQUM7MERBQ3lCO1NBUHhDLGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQVA5QixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixDQUFDO29CQUM3RSxTQUFTLEVBQUUsQ0FBQyxXQUFXLG9CQUFvQixDQUFDO29CQUM1QyxRQUFRLEVBQUUsV0FBVztpQkFDeEI7OzBCQWNRLFNBQVM7MkJBQUMsVUFBVTs7MEJBQ3BCLFNBQVM7MkJBQUMsUUFBUTs7MEJBQ2xCLFNBQVM7MkJBQUMsV0FBVzs0Q0FabkIsV0FBVztzQkFGakIsS0FBSzt1QkFBQyxRQUFRO2dCQU1SLGNBQWM7c0JBRnBCLEtBQUs7dUJBQUMsV0FBVztnQkFLWCxLQUFLO3NCQURYLE1BQU07Z0JBbURJLFlBQVk7c0JBRHRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7T25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXR0cmlidXRlLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHthdWRpb1BhcmFtfSBmcm9tICcuLi9kZWNvcmF0b3JzL2F1ZGlvLXBhcmFtJztcbmltcG9ydCB7QVVESU9fQ09OVEVYVH0gZnJvbSAnLi4vdG9rZW5zL2F1ZGlvLWNvbnRleHQnO1xuaW1wb3J0IHthc0F1ZGlvTm9kZX0gZnJvbSAnLi4vdG9rZW5zL2F1ZGlvLW5vZGUnO1xuaW1wb3J0IHtDT05TVFJVQ1RPUl9TVVBQT1JUfSBmcm9tICcuLi90b2tlbnMvY29uc3RydWN0b3Itc3VwcG9ydCc7XG5pbXBvcnQgdHlwZSB7QXVkaW9QYXJhbUlucHV0fSBmcm9tICcuLi90eXBlcy9hdWRpby1wYXJhbS1pbnB1dCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJy4uL3V0aWxzL2Nvbm5lY3QnO1xuaW1wb3J0IHtwYXJzZX0gZnJvbSAnLi4vdXRpbHMvcGFyc2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dhT3NjaWxsYXRvck5vZGVdJyxcbiAgICBpbnB1dHM6IFsndHlwZScsICdjaGFubmVsQ291bnQnLCAnY2hhbm5lbENvdW50TW9kZScsICdjaGFubmVsSW50ZXJwcmV0YXRpb24nXSxcbiAgICBwcm92aWRlcnM6IFthc0F1ZGlvTm9kZShXZWJBdWRpb09zY2lsbGF0b3IpXSxcbiAgICBleHBvcnRBczogJ0F1ZGlvTm9kZScsXG59KVxuZXhwb3J0IGNsYXNzIFdlYkF1ZGlvT3NjaWxsYXRvciBleHRlbmRzIE9zY2lsbGF0b3JOb2RlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBASW5wdXQoJ2RldHVuZScpXG4gICAgQGF1ZGlvUGFyYW0oJ2RldHVuZScpXG4gICAgcHVibGljIGRldHVuZVBhcmFtPzogQXVkaW9QYXJhbUlucHV0IHwgc3RyaW5nO1xuXG4gICAgQElucHV0KCdmcmVxdWVuY3knKVxuICAgIEBhdWRpb1BhcmFtKCdmcmVxdWVuY3knKVxuICAgIHB1YmxpYyBmcmVxdWVuY3lQYXJhbT86IEF1ZGlvUGFyYW1JbnB1dCB8IHN0cmluZztcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBlbmRlZD86IEV2ZW50RW1pdHRlcjx2b2lkPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAQXR0cmlidXRlKCdhdXRvcGxheScpIGF1dG9wbGF5OiBzdHJpbmcgfCBudWxsLFxuICAgICAgICBAQXR0cmlidXRlKCdkZXR1bmUnKSBkZXR1bmVBcmc6IHN0cmluZyB8IG51bGwsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2ZyZXF1ZW5jeScpIGZyZXF1ZW5jeUFyZzogc3RyaW5nIHwgbnVsbCxcbiAgICApIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGluamVjdChBVURJT19DT05URVhUKTtcbiAgICAgICAgY29uc3QgbW9kZXJuID0gaW5qZWN0KENPTlNUUlVDVE9SX1NVUFBPUlQpO1xuICAgICAgICBjb25zdCBkZXR1bmUgPSBwYXJzZShkZXR1bmVBcmcsIDApO1xuICAgICAgICBjb25zdCBmcmVxdWVuY3kgPSBwYXJzZShmcmVxdWVuY3lBcmcsIDQ0MCk7XG5cbiAgICAgICAgaWYgKG1vZGVybikge1xuICAgICAgICAgICAgc3VwZXIoY29udGV4dCwge2RldHVuZSwgZnJlcXVlbmN5fSk7XG4gICAgICAgICAgICBXZWJBdWRpb09zY2lsbGF0b3IuaW5pdCh0aGlzLCBudWxsLCBhdXRvcGxheSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKSBhcyBXZWJBdWRpb09zY2lsbGF0b3I7XG5cbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihcbiAgICAgICAgICAgICAgICBXZWJBdWRpb09zY2lsbGF0b3IucHJvdG90eXBlLFxuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihyZXN1bHQpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZXN1bHQsIFdlYkF1ZGlvT3NjaWxsYXRvci5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICByZXN1bHQuZGV0dW5lLnZhbHVlID0gZGV0dW5lO1xuICAgICAgICAgICAgcmVzdWx0LmZyZXF1ZW5jeS52YWx1ZSA9IGZyZXF1ZW5jeTtcbiAgICAgICAgICAgIFdlYkF1ZGlvT3NjaWxsYXRvci5pbml0KHJlc3VsdCwgbnVsbCwgYXV0b3BsYXkpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBpbml0KFxuICAgICAgICB0aGF0OiBXZWJBdWRpb09zY2lsbGF0b3IsXG4gICAgICAgIG5vZGU6IEF1ZGlvTm9kZSB8IG51bGwsXG4gICAgICAgIGF1dG9wbGF5OiBzdHJpbmcgfCBudWxsLFxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25uZWN0KG5vZGUsIHRoYXQpO1xuXG4gICAgICAgIGlmIChhdXRvcGxheSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhhdC5zdGFydCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAgICAgdGhhdC5lbmRlZCA9IGVuZGVkO1xuICAgICAgICB0aGF0Lm9uZW5kZWQgPSAoKSA9PiBlbmRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHBlcmlvZGljV2F2ZShwZXJpb2RpY1dhdmU6IFBlcmlvZGljV2F2ZSkge1xuICAgICAgICB0aGlzLnNldFBlcmlvZGljV2F2ZShwZXJpb2RpY1dhdmUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIH1cbn1cbiJdfQ==