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