UNPKG

@ng-web-apis/audio

Version:

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

99 lines 11.5 kB
import { __decorate } from "tslib"; import { Directive, inject, Input } from '@angular/core'; import { audioParam } from '../decorators/audio-param'; import { AUDIO_CONTEXT } from '../tokens/audio-context'; import { asAudioNode, AUDIO_NODE } from '../tokens/audio-node'; import { CONSTRUCTOR_SUPPORT } from '../tokens/constructor-support'; import { connect } from '../utils/connect'; import { fallbackAudioParam } from '../utils/fallback-audio-param'; import * as i0 from "@angular/core"; class WebAudioPanner extends PannerNode { orientationXParam; orientationYParam; orientationZParam; positionXParam; positionYParam; positionZParam; constructor() { const context = inject(AUDIO_CONTEXT); const node = inject(AUDIO_NODE, { skipSelf: true }); const modern = inject(CONSTRUCTOR_SUPPORT); if (modern) { super(context); connect(node, this); } else { const result = context.createPanner(); Object.setPrototypeOf(result, WebAudioPanner.prototype); connect(node, result); return result; } } ngOnChanges() { if (this.positionX instanceof AudioParam) { return; } // Fallback for older browsers this.setOrientation(fallbackAudioParam(this.orientationXParam), fallbackAudioParam(this.orientationYParam), fallbackAudioParam(this.orientationZParam)); this.setPosition(fallbackAudioParam(this.positionXParam), fallbackAudioParam(this.positionYParam), fallbackAudioParam(this.positionZParam)); } ngOnDestroy() { this.disconnect(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioPanner, deps: [], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WebAudioPanner, isStandalone: true, selector: "[waPannerNode]", inputs: { coneInnerAngle: "coneInnerAngle", coneOuterAngle: "coneOuterAngle", coneOuterGain: "coneOuterGain", distanceModel: "distanceModel", maxDistance: "maxDistance", panningModel: "panningModel", refDistance: "refDistance", rolloffFactor: "rolloffFactor", channelCount: "channelCount", channelCountMode: "channelCountMode", channelInterpretation: "channelInterpretation", orientationXParam: "orientationXParam", orientationYParam: "orientationYParam", orientationZParam: "orientationZParam", positionXParam: "positionXParam", positionYParam: "positionYParam", positionZParam: "positionZParam" }, providers: [asAudioNode(WebAudioPanner)], exportAs: ["AudioNode"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); } __decorate([ audioParam('orientationX') ], WebAudioPanner.prototype, "orientationXParam", void 0); __decorate([ audioParam('orientationY') ], WebAudioPanner.prototype, "orientationYParam", void 0); __decorate([ audioParam('orientationZ') ], WebAudioPanner.prototype, "orientationZParam", void 0); __decorate([ audioParam('positionX') ], WebAudioPanner.prototype, "positionXParam", void 0); __decorate([ audioParam('positionY') ], WebAudioPanner.prototype, "positionYParam", void 0); __decorate([ audioParam('positionZ') ], WebAudioPanner.prototype, "positionZParam", void 0); export { WebAudioPanner }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioPanner, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[waPannerNode]', inputs: [ 'coneInnerAngle', 'coneOuterAngle', 'coneOuterGain', 'distanceModel', 'maxDistance', 'panningModel', 'refDistance', 'rolloffFactor', 'channelCount', 'channelCountMode', 'channelInterpretation', ], providers: [asAudioNode(WebAudioPanner)], exportAs: 'AudioNode', }] }], ctorParameters: function () { return []; }, propDecorators: { orientationXParam: [{ type: Input }], orientationYParam: [{ type: Input }], orientationZParam: [{ type: Input }], positionXParam: [{ type: Input }], positionYParam: [{ type: Input }], positionZParam: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9hdWRpby9zcmMvbm9kZXMvcGFubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdkQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsV0FBVyxFQUFFLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFakUsTUFtQmEsY0FBZSxTQUFRLFVBQVU7SUFHbkMsaUJBQWlCLENBQW1CO0lBSXBDLGlCQUFpQixDQUFtQjtJQUlwQyxpQkFBaUIsQ0FBbUI7SUFJcEMsY0FBYyxDQUFtQjtJQUlqQyxjQUFjLENBQW1CO0lBSWpDLGNBQWMsQ0FBbUI7SUFFeEM7UUFDSSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTNDLElBQUksTUFBTSxFQUFFO1lBQ1IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN2QjthQUFNO1lBQ0gsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBb0IsQ0FBQztZQUV4RCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEQsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV0QixPQUFPLE1BQU0sQ0FBQztTQUNqQjtJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxJQUFJLENBQUMsU0FBUyxZQUFZLFVBQVUsRUFBRTtZQUN0QyxPQUFPO1NBQ1Y7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FDZixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFDMUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQzFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUM3QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FDWixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQ3ZDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDdkMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUMxQyxDQUFDO0lBQ04sQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQzt3R0EvRFEsY0FBYzs0RkFBZCxjQUFjLHFwQkFIWixDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQzs7QUFNakM7SUFETixVQUFVLENBQUMsY0FBYyxDQUFDO3lEQUNnQjtBQUlwQztJQUROLFVBQVUsQ0FBQyxjQUFjLENBQUM7eURBQ2dCO0FBSXBDO0lBRE4sVUFBVSxDQUFDLGNBQWMsQ0FBQzt5REFDZ0I7QUFJcEM7SUFETixVQUFVLENBQUMsV0FBVyxDQUFDO3NEQUNnQjtBQUlqQztJQUROLFVBQVUsQ0FBQyxXQUFXLENBQUM7c0RBQ2dCO0FBSWpDO0lBRE4sVUFBVSxDQUFDLFdBQVcsQ0FBQztzREFDZ0I7U0F2Qi9CLGNBQWM7NEZBQWQsY0FBYztrQkFuQjFCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLE1BQU0sRUFBRTt3QkFDSixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLHVCQUF1QjtxQkFDMUI7b0JBQ0QsU0FBUyxFQUFFLENBQUMsV0FBVyxnQkFBZ0IsQ0FBQztvQkFDeEMsUUFBUSxFQUFFLFdBQVc7aUJBQ3hCOzBFQUlVLGlCQUFpQjtzQkFGdkIsS0FBSztnQkFNQyxpQkFBaUI7c0JBRnZCLEtBQUs7Z0JBTUMsaUJBQWlCO3NCQUZ2QixLQUFLO2dCQU1DLGNBQWM7c0JBRnBCLEtBQUs7Z0JBTUMsY0FBYztzQkFGcEIsS0FBSztnQkFNQyxjQUFjO3NCQUZwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge09uQ2hhbmdlcywgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGlyZWN0aXZlLCBpbmplY3QsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHthdWRpb1BhcmFtfSBmcm9tICcuLi9kZWNvcmF0b3JzL2F1ZGlvLXBhcmFtJztcbmltcG9ydCB7QVVESU9fQ09OVEVYVH0gZnJvbSAnLi4vdG9rZW5zL2F1ZGlvLWNvbnRleHQnO1xuaW1wb3J0IHthc0F1ZGlvTm9kZSwgQVVESU9fTk9ERX0gZnJvbSAnLi4vdG9rZW5zL2F1ZGlvLW5vZGUnO1xuaW1wb3J0IHtDT05TVFJVQ1RPUl9TVVBQT1JUfSBmcm9tICcuLi90b2tlbnMvY29uc3RydWN0b3Itc3VwcG9ydCc7XG5pbXBvcnQgdHlwZSB7QXVkaW9QYXJhbUlucHV0fSBmcm9tICcuLi90eXBlcy9hdWRpby1wYXJhbS1pbnB1dCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJy4uL3V0aWxzL2Nvbm5lY3QnO1xuaW1wb3J0IHtmYWxsYmFja0F1ZGlvUGFyYW19IGZyb20gJy4uL3V0aWxzL2ZhbGxiYWNrLWF1ZGlvLXBhcmFtJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t3YVBhbm5lck5vZGVdJyxcbiAgICBpbnB1dHM6IFtcbiAgICAgICAgJ2NvbmVJbm5lckFuZ2xlJyxcbiAgICAgICAgJ2NvbmVPdXRlckFuZ2xlJyxcbiAgICAgICAgJ2NvbmVPdXRlckdhaW4nLFxuICAgICAgICAnZGlzdGFuY2VNb2RlbCcsXG4gICAgICAgICdtYXhEaXN0YW5jZScsXG4gICAgICAgICdwYW5uaW5nTW9kZWwnLFxuICAgICAgICAncmVmRGlzdGFuY2UnLFxuICAgICAgICAncm9sbG9mZkZhY3RvcicsXG4gICAgICAgICdjaGFubmVsQ291bnQnLFxuICAgICAgICAnY2hhbm5lbENvdW50TW9kZScsXG4gICAgICAgICdjaGFubmVsSW50ZXJwcmV0YXRpb24nLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbYXNBdWRpb05vZGUoV2ViQXVkaW9QYW5uZXIpXSxcbiAgICBleHBvcnRBczogJ0F1ZGlvTm9kZScsXG59KVxuZXhwb3J0IGNsYXNzIFdlYkF1ZGlvUGFubmVyIGV4dGVuZHMgUGFubmVyTm9kZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKVxuICAgIEBhdWRpb1BhcmFtKCdvcmllbnRhdGlvblgnKVxuICAgIHB1YmxpYyBvcmllbnRhdGlvblhQYXJhbT86IEF1ZGlvUGFyYW1JbnB1dDtcblxuICAgIEBJbnB1dCgpXG4gICAgQGF1ZGlvUGFyYW0oJ29yaWVudGF0aW9uWScpXG4gICAgcHVibGljIG9yaWVudGF0aW9uWVBhcmFtPzogQXVkaW9QYXJhbUlucHV0O1xuXG4gICAgQElucHV0KClcbiAgICBAYXVkaW9QYXJhbSgnb3JpZW50YXRpb25aJylcbiAgICBwdWJsaWMgb3JpZW50YXRpb25aUGFyYW0/OiBBdWRpb1BhcmFtSW5wdXQ7XG5cbiAgICBASW5wdXQoKVxuICAgIEBhdWRpb1BhcmFtKCdwb3NpdGlvblgnKVxuICAgIHB1YmxpYyBwb3NpdGlvblhQYXJhbT86IEF1ZGlvUGFyYW1JbnB1dDtcblxuICAgIEBJbnB1dCgpXG4gICAgQGF1ZGlvUGFyYW0oJ3Bvc2l0aW9uWScpXG4gICAgcHVibGljIHBvc2l0aW9uWVBhcmFtPzogQXVkaW9QYXJhbUlucHV0O1xuXG4gICAgQElucHV0KClcbiAgICBAYXVkaW9QYXJhbSgncG9zaXRpb25aJylcbiAgICBwdWJsaWMgcG9zaXRpb25aUGFyYW0/OiBBdWRpb1BhcmFtSW5wdXQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGluamVjdChBVURJT19DT05URVhUKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGluamVjdChBVURJT19OT0RFLCB7c2tpcFNlbGY6IHRydWV9KTtcbiAgICAgICAgY29uc3QgbW9kZXJuID0gaW5qZWN0KENPTlNUUlVDVE9SX1NVUFBPUlQpO1xuXG4gICAgICAgIGlmIChtb2Rlcm4pIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgICAgICAgICAgY29ubmVjdChub2RlLCB0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFubmVyKCkgYXMgV2ViQXVkaW9QYW5uZXI7XG5cbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZXN1bHQsIFdlYkF1ZGlvUGFubmVyLnByb3RvdHlwZSk7XG4gICAgICAgICAgICBjb25uZWN0KG5vZGUsIHJlc3VsdCk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uWCBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZhbGxiYWNrIGZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uKFxuICAgICAgICAgICAgZmFsbGJhY2tBdWRpb1BhcmFtKHRoaXMub3JpZW50YXRpb25YUGFyYW0pLFxuICAgICAgICAgICAgZmFsbGJhY2tBdWRpb1BhcmFtKHRoaXMub3JpZW50YXRpb25ZUGFyYW0pLFxuICAgICAgICAgICAgZmFsbGJhY2tBdWRpb1BhcmFtKHRoaXMub3JpZW50YXRpb25aUGFyYW0pLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKFxuICAgICAgICAgICAgZmFsbGJhY2tBdWRpb1BhcmFtKHRoaXMucG9zaXRpb25YUGFyYW0pLFxuICAgICAgICAgICAgZmFsbGJhY2tBdWRpb1BhcmFtKHRoaXMucG9zaXRpb25ZUGFyYW0pLFxuICAgICAgICAgICAgZmFsbGJhY2tBdWRpb1BhcmFtKHRoaXMucG9zaXRpb25aUGFyYW0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgfVxufVxuIl19