@ng-web-apis/audio
Version:
This is a library for declarative use of Web Audio API with Angular
51 lines • 7.76 kB
JavaScript
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==