UNPKG

@ng-web-apis/audio

Version:

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

51 lines 7.76 kB
import { Attribute, Directive, EventEmitter, inject, Output } from '@angular/core'; import { AUDIO_CONTEXT } from '../tokens/audio-context'; import { asAudioNode, AUDIO_NODE } from '../tokens/audio-node'; import { connect } from '../utils/connect'; import * as i0 from "@angular/core"; class WebAudioScriptProcessor extends ScriptProcessorNode { audioprocess; constructor(bufferSize, numberOfInputChannels, numberOfOutputChannels) { const context = inject(AUDIO_CONTEXT); const node = inject(AUDIO_NODE, { skipSelf: true }); try { const result = context.createScriptProcessor(parseInt(bufferSize ?? '', 10) || 0, parseInt(numberOfInputChannels ?? '', 10) || 2, parseInt(numberOfOutputChannels ?? '', 10) || 2); Object.setPrototypeOf(result, WebAudioScriptProcessor.prototype); connect(node, result); const audioprocess = new EventEmitter(); result.audioprocess = audioprocess; result.onaudioprocess = (e) => audioprocess.emit(e); return result; } catch { } super(); } ngOnDestroy() { this.disconnect(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioScriptProcessor, deps: [{ token: 'bufferSize', attribute: true }, { token: 'numberOfInputChannels', attribute: true }, { token: 'numberOfOutputChannels', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WebAudioScriptProcessor, isStandalone: true, selector: "[waScriptProcessorNode]", inputs: { channelCount: "channelCount", channelCountMode: "channelCountMode", channelInterpretation: "channelInterpretation" }, outputs: { audioprocess: "audioprocess" }, providers: [asAudioNode(WebAudioScriptProcessor)], exportAs: ["AudioNode"], usesInheritance: true, ngImport: i0 }); } export { WebAudioScriptProcessor }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioScriptProcessor, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[waScriptProcessorNode]', inputs: ['channelCount', 'channelCountMode', 'channelInterpretation'], providers: [asAudioNode(WebAudioScriptProcessor)], exportAs: 'AudioNode', }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Attribute, args: ['bufferSize'] }] }, { type: undefined, decorators: [{ type: Attribute, args: ['numberOfInputChannels'] }] }, { type: undefined, decorators: [{ type: Attribute, args: ['numberOfOutputChannels'] }] }]; }, propDecorators: { audioprocess: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LXByb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvYXVkaW8vc3JjL25vZGVzL3NjcmlwdC1wcm9jZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxXQUFXLEVBQUUsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGtCQUFrQixDQUFDOztBQUV6QyxNQU9hLHVCQUF3QixTQUFRLG1CQUFtQjtJQUVyRCxZQUFZLENBQXNDO0lBRXpELFlBQzZCLFVBQXlCLEVBQ2QscUJBQW9DLEVBQ25DLHNCQUFxQztRQUUxRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBRWxELElBQUk7WUFDQSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQ3hDLFFBQVEsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDbkMsUUFBUSxDQUFDLHFCQUFxQixJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQzlDLFFBQVEsQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUN2QixDQUFDO1lBRTdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFdEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7WUFFOUQsTUFBTSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDbkMsTUFBTSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwRCxPQUFPLE1BQU0sQ0FBQztTQUNqQjtRQUFDLE1BQU0sR0FBRTtRQUVWLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQzt3R0FuQ1EsdUJBQXVCLGtCQUtqQixZQUFZLDhCQUNaLHVCQUF1Qiw4QkFDdkIsd0JBQXdCOzRGQVA5Qix1QkFBdUIsaVBBSHJCLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7O1NBR3hDLHVCQUF1Qjs0RkFBdkIsdUJBQXVCO2tCQVBuQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLENBQUM7b0JBQ3JFLFNBQVMsRUFBRSxDQUFDLFdBQVcseUJBQXlCLENBQUM7b0JBQ2pELFFBQVEsRUFBRSxXQUFXO2lCQUN4Qjs7MEJBTVEsU0FBUzsyQkFBQyxZQUFZOzswQkFDdEIsU0FBUzsyQkFBQyx1QkFBdUI7OzBCQUNqQyxTQUFTOzJCQUFDLHdCQUF3Qjs0Q0FMaEMsWUFBWTtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBdHRyaWJ1dGUsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7QVVESU9fQ09OVEVYVH0gZnJvbSAnLi4vdG9rZW5zL2F1ZGlvLWNvbnRleHQnO1xuaW1wb3J0IHthc0F1ZGlvTm9kZSwgQVVESU9fTk9ERX0gZnJvbSAnLi4vdG9rZW5zL2F1ZGlvLW5vZGUnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICcuLi91dGlscy9jb25uZWN0JztcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t3YVNjcmlwdFByb2Nlc3Nvck5vZGVdJyxcbiAgICBpbnB1dHM6IFsnY2hhbm5lbENvdW50JywgJ2NoYW5uZWxDb3VudE1vZGUnLCAnY2hhbm5lbEludGVycHJldGF0aW9uJ10sXG4gICAgcHJvdmlkZXJzOiBbYXNBdWRpb05vZGUoV2ViQXVkaW9TY3JpcHRQcm9jZXNzb3IpXSxcbiAgICBleHBvcnRBczogJ0F1ZGlvTm9kZScsXG59KVxuZXhwb3J0IGNsYXNzIFdlYkF1ZGlvU2NyaXB0UHJvY2Vzc29yIGV4dGVuZHMgU2NyaXB0UHJvY2Vzc29yTm9kZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGF1ZGlvcHJvY2Vzcz86IEV2ZW50RW1pdHRlcjxBdWRpb1Byb2Nlc3NpbmdFdmVudD47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEF0dHJpYnV0ZSgnYnVmZmVyU2l6ZScpIGJ1ZmZlclNpemU6IHN0cmluZyB8IG51bGwsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ251bWJlck9mSW5wdXRDaGFubmVscycpIG51bWJlck9mSW5wdXRDaGFubmVsczogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbnVtYmVyT2ZPdXRwdXRDaGFubmVscycpIG51bWJlck9mT3V0cHV0Q2hhbm5lbHM6IHN0cmluZyB8IG51bGwsXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBpbmplY3QoQVVESU9fQ09OVEVYVCk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBpbmplY3QoQVVESU9fTk9ERSwge3NraXBTZWxmOiB0cnVlfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlU2NyaXB0UHJvY2Vzc29yKFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGJ1ZmZlclNpemUgPz8gJycsIDEwKSB8fCAwLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG51bWJlck9mSW5wdXRDaGFubmVscyA/PyAnJywgMTApIHx8IDIsXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobnVtYmVyT2ZPdXRwdXRDaGFubmVscyA/PyAnJywgMTApIHx8IDIsXG4gICAgICAgICAgICApIGFzIFdlYkF1ZGlvU2NyaXB0UHJvY2Vzc29yO1xuXG4gICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVzdWx0LCBXZWJBdWRpb1NjcmlwdFByb2Nlc3Nvci5wcm90b3R5cGUpO1xuICAgICAgICAgICAgY29ubmVjdChub2RlLCByZXN1bHQpO1xuXG4gICAgICAgICAgICBjb25zdCBhdWRpb3Byb2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPEF1ZGlvUHJvY2Vzc2luZ0V2ZW50PigpO1xuXG4gICAgICAgICAgICByZXN1bHQuYXVkaW9wcm9jZXNzID0gYXVkaW9wcm9jZXNzO1xuICAgICAgICAgICAgcmVzdWx0Lm9uYXVkaW9wcm9jZXNzID0gKGUpID0+IGF1ZGlvcHJvY2Vzcy5lbWl0KGUpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIH1cbn1cbiJdfQ==