UNPKG

@ng-web-apis/audio

Version:

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

65 lines 7.98 kB
import { Attribute, ContentChildren, Directive, inject } from '@angular/core'; import { AUDIO_CONTEXT } from '../tokens/audio-context'; import { AUDIO_NODE } from '../tokens/audio-node'; import { CONSTRUCTOR_SUPPORT } from '../tokens/constructor-support'; import { connect } from '../utils/connect'; import * as i0 from "@angular/core"; class WebAudioChannelSplitter extends ChannelSplitterNode { constructor(outputs) { const context = inject(AUDIO_CONTEXT); const node = inject(AUDIO_NODE, { skipSelf: true }); const modern = inject(CONSTRUCTOR_SUPPORT); const numberOfOutputs = parseInt(outputs ?? '', 10) || 6; if (modern) { super(context, { numberOfOutputs }); connect(node, this); } else { const result = context.createChannelSplitter(numberOfOutputs); Object.setPrototypeOf(result, WebAudioChannelSplitter.prototype); connect(node, result); return result; } } ngOnDestroy() { this.disconnect(); } set channels(channels) { this.disconnect(); channels .filter((node) => !!node) .forEach((node, index) => { this.connect(node, index); }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioChannelSplitter, deps: [{ token: 'numberOfOutputs', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WebAudioChannelSplitter, isStandalone: true, selector: "[waChannelSplitterNode]", inputs: { channelCount: "channelCount", channelCountMode: "channelCountMode", channelInterpretation: "channelInterpretation" }, providers: [ { provide: AUDIO_NODE, useValue: null, }, ], queries: [{ propertyName: "channels", predicate: AUDIO_NODE }], exportAs: ["AudioNode"], usesInheritance: true, ngImport: i0 }); } export { WebAudioChannelSplitter }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioChannelSplitter, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[waChannelSplitterNode]', inputs: ['channelCount', 'channelCountMode', 'channelInterpretation'], providers: [ { provide: AUDIO_NODE, useValue: null, }, ], exportAs: 'AudioNode', }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Attribute, args: ['numberOfOutputs'] }] }]; }, propDecorators: { channels: [{ type: ContentChildren, args: [AUDIO_NODE, { descendants: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1zcGxpdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvYXVkaW8vc3JjL25vZGVzL2NoYW5uZWwtc3BsaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU1RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFekMsTUFZYSx1QkFBd0IsU0FBUSxtQkFBbUI7SUFDNUQsWUFBMEMsT0FBc0I7UUFDNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekQsSUFBSSxNQUFNLEVBQUU7WUFDUixLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQztZQUNsQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3ZCO2FBQU07WUFDSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFOUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakUsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV0QixPQUFPLE1BQWlDLENBQUM7U0FDNUM7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFDYyxRQUFRLENBQUMsUUFBcUM7UUFDeEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLFFBQVE7YUFDSCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDeEIsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzt3R0FoQ1EsdUJBQXVCLGtCQUNULGlCQUFpQjs0RkFEL0IsdUJBQXVCLHNNQVJyQjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixRQUFRLEVBQUUsSUFBSTthQUNqQjtTQUNKLG1EQTJCZ0IsVUFBVTs7U0F4QmxCLHVCQUF1Qjs0RkFBdkIsdUJBQXVCO2tCQVpuQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLENBQUM7b0JBQ3JFLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsVUFBVTs0QkFDbkIsUUFBUSxFQUFFLElBQUk7eUJBQ2pCO3FCQUNKO29CQUNELFFBQVEsRUFBRSxXQUFXO2lCQUN4Qjs7MEJBRWdCLFNBQVM7MkJBQUMsaUJBQWlCOzRDQXdCMUIsUUFBUTtzQkFEckIsZUFBZTt1QkFBQyxVQUFVLEVBQUUsRUFBQyxXQUFXLEVBQUUsS0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge09uRGVzdHJveSwgUXVlcnlMaXN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXR0cmlidXRlLCBDb250ZW50Q2hpbGRyZW4sIERpcmVjdGl2ZSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtBVURJT19DT05URVhUfSBmcm9tICcuLi90b2tlbnMvYXVkaW8tY29udGV4dCc7XG5pbXBvcnQge0FVRElPX05PREV9IGZyb20gJy4uL3Rva2Vucy9hdWRpby1ub2RlJztcbmltcG9ydCB7Q09OU1RSVUNUT1JfU1VQUE9SVH0gZnJvbSAnLi4vdG9rZW5zL2NvbnN0cnVjdG9yLXN1cHBvcnQnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICcuLi91dGlscy9jb25uZWN0JztcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t3YUNoYW5uZWxTcGxpdHRlck5vZGVdJyxcbiAgICBpbnB1dHM6IFsnY2hhbm5lbENvdW50JywgJ2NoYW5uZWxDb3VudE1vZGUnLCAnY2hhbm5lbEludGVycHJldGF0aW9uJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEFVRElPX05PREUsXG4gICAgICAgICAgICB1c2VWYWx1ZTogbnVsbCxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGV4cG9ydEFzOiAnQXVkaW9Ob2RlJyxcbn0pXG5leHBvcnQgY2xhc3MgV2ViQXVkaW9DaGFubmVsU3BsaXR0ZXIgZXh0ZW5kcyBDaGFubmVsU3BsaXR0ZXJOb2RlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBjb25zdHJ1Y3RvcihAQXR0cmlidXRlKCdudW1iZXJPZk91dHB1dHMnKSBvdXRwdXRzOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBpbmplY3QoQVVESU9fQ09OVEVYVCk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBpbmplY3QoQVVESU9fTk9ERSwge3NraXBTZWxmOiB0cnVlfSk7XG4gICAgICAgIGNvbnN0IG1vZGVybiA9IGluamVjdChDT05TVFJVQ1RPUl9TVVBQT1JUKTtcbiAgICAgICAgY29uc3QgbnVtYmVyT2ZPdXRwdXRzID0gcGFyc2VJbnQob3V0cHV0cyA/PyAnJywgMTApIHx8IDY7XG5cbiAgICAgICAgaWYgKG1vZGVybikge1xuICAgICAgICAgICAgc3VwZXIoY29udGV4dCwge251bWJlck9mT3V0cHV0c30pO1xuICAgICAgICAgICAgY29ubmVjdChub2RlLCB0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKG51bWJlck9mT3V0cHV0cyk7XG5cbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZXN1bHQsIFdlYkF1ZGlvQ2hhbm5lbFNwbGl0dGVyLnByb3RvdHlwZSk7XG4gICAgICAgICAgICBjb25uZWN0KG5vZGUsIHJlc3VsdCk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgV2ViQXVkaW9DaGFubmVsU3BsaXR0ZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIEBDb250ZW50Q2hpbGRyZW4oQVVESU9fTk9ERSwge2Rlc2NlbmRhbnRzOiBmYWxzZX0pXG4gICAgcHJvdGVjdGVkIHNldCBjaGFubmVscyhjaGFubmVsczogUXVlcnlMaXN0PEF1ZGlvTm9kZSB8IG51bGw+KSB7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICBjaGFubmVsc1xuICAgICAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gISFub2RlKVxuICAgICAgICAgICAgLmZvckVhY2goKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0KG5vZGUhLCBpbmRleCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=