@ng-web-apis/audio
Version:
This is a library for declarative use of Web Audio API with Angular
130 lines • 13.8 kB
JavaScript
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 { CONSTRUCTOR_SUPPORT } from '../tokens/constructor-support';
import { fallbackAudioParam } from '../utils/fallback-audio-param';
import * as i0 from "@angular/core";
class WebAudioListener extends GainNode {
forwardXParam;
forwardYParam;
forwardZParam;
positionXParam;
positionYParam;
positionZParam;
upXParam;
upYParam;
upZParam;
constructor() {
const context = inject(AUDIO_CONTEXT, { self: true });
const modern = inject(CONSTRUCTOR_SUPPORT);
if (modern) {
super(context);
}
else {
const result = context.createGain();
Object.setPrototypeOf(result, WebAudioListener.prototype);
return result;
}
}
get forwardX() {
return this.context.listener.forwardX;
}
get forwardY() {
return this.context.listener.forwardY;
}
get forwardZ() {
return this.context.listener.forwardZ;
}
get positionX() {
return this.context.listener.positionX;
}
get positionY() {
return this.context.listener.positionY;
}
get positionZ() {
return this.context.listener.positionZ;
}
get upX() {
return this.context.listener.upX;
}
get upY() {
return this.context.listener.upY;
}
get upZ() {
return this.context.listener.upZ;
}
ngOnChanges() {
if (this.context.listener.positionX instanceof AudioParam) {
return;
}
// Fallback for older browsers
this.context.listener.setOrientation(fallbackAudioParam(this.forwardXParam), fallbackAudioParam(this.forwardYParam), fallbackAudioParam(this.forwardZParam), fallbackAudioParam(this.upXParam), fallbackAudioParam(this.upYParam), fallbackAudioParam(this.upZParam));
this.context.listener.setPosition(fallbackAudioParam(this.positionXParam), fallbackAudioParam(this.positionYParam), fallbackAudioParam(this.positionZParam));
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioListener, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WebAudioListener, isStandalone: true, selector: "[waAudioContext],[waOfflineAudioContext][length][sampleRate]", inputs: { forwardXParam: ["forwardX", "forwardXParam"], forwardYParam: ["forwardY", "forwardYParam"], forwardZParam: ["forwardZ", "forwardZParam"], positionXParam: ["positionX", "positionXParam"], positionYParam: ["positionY", "positionYParam"], positionZParam: ["positionZ", "positionZParam"], upXParam: ["upX", "upXParam"], upYParam: ["upY", "upYParam"], upZParam: ["upZ", "upZParam"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
}
__decorate([
audioParam('forwardX')
], WebAudioListener.prototype, "forwardXParam", void 0);
__decorate([
audioParam('forwardY')
], WebAudioListener.prototype, "forwardYParam", void 0);
__decorate([
audioParam('forwardZ')
], WebAudioListener.prototype, "forwardZParam", void 0);
__decorate([
audioParam('positionX')
], WebAudioListener.prototype, "positionXParam", void 0);
__decorate([
audioParam('positionY')
], WebAudioListener.prototype, "positionYParam", void 0);
__decorate([
audioParam('positionZ')
], WebAudioListener.prototype, "positionZParam", void 0);
__decorate([
audioParam('upX')
], WebAudioListener.prototype, "upXParam", void 0);
__decorate([
audioParam('upY')
], WebAudioListener.prototype, "upYParam", void 0);
__decorate([
audioParam('upZ')
], WebAudioListener.prototype, "upZParam", void 0);
export { WebAudioListener };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioListener, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: '[waAudioContext],[waOfflineAudioContext][length][sampleRate]',
}]
}], ctorParameters: function () { return []; }, propDecorators: { forwardXParam: [{
type: Input,
args: ['forwardX']
}], forwardYParam: [{
type: Input,
args: ['forwardY']
}], forwardZParam: [{
type: Input,
args: ['forwardZ']
}], positionXParam: [{
type: Input,
args: ['positionX']
}], positionYParam: [{
type: Input,
args: ['positionY']
}], positionZParam: [{
type: Input,
args: ['positionZ']
}], upXParam: [{
type: Input,
args: ['upX']
}], upYParam: [{
type: Input,
args: ['upY']
}], upZParam: [{
type: Input,
args: ['upZ']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGVuZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2F1ZGlvL3NyYy9kaXJlY3RpdmVzL2xpc3RlbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdkQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFakUsTUFJYSxnQkFBaUIsU0FBUSxRQUFRO0lBR25DLGFBQWEsQ0FBbUI7SUFJaEMsYUFBYSxDQUFtQjtJQUloQyxhQUFhLENBQW1CO0lBSWhDLGNBQWMsQ0FBbUI7SUFJakMsY0FBYyxDQUFtQjtJQUlqQyxjQUFjLENBQW1CO0lBSWpDLFFBQVEsQ0FBbUI7SUFJM0IsUUFBUSxDQUFtQjtJQUkzQixRQUFRLENBQW1CO0lBRWxDO1FBQ0ksTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTNDLElBQUksTUFBTSxFQUFFO1lBQ1IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xCO2FBQU07WUFDSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFcEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFMUQsT0FBTyxNQUEwQixDQUFDO1NBQ3JDO0lBQ0wsQ0FBQztJQUVELElB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QUFVO2dCQU1WLGNBQWM7c0JBRnBCLEtBQUs7dUJBQUMsV0FBVztnQkFNWCxjQUFjO3NCQUZwQixLQUFLO3VCQUFDLFdBQVc7Z0JBTVgsY0FBYztzQkFGcEIsS0FBSzt1QkFBQyxXQUFXO2dCQU1YLFFBQVE7c0JBRmQsS0FBSzt1QkFBQyxLQUFLO2dCQU1MLFFBQVE7c0JBRmQsS0FBSzt1QkFBQyxLQUFLO2dCQU1MLFFBQVE7c0JBRmQsS0FBSzt1QkFBQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge09uQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7YXVkaW9QYXJhbX0gZnJvbSAnLi4vZGVjb3JhdG9ycy9hdWRpby1wYXJhbSc7XG5pbXBvcnQge0FVRElPX0NPTlRFWFR9IGZyb20gJy4uL3Rva2Vucy9hdWRpby1jb250ZXh0JztcbmltcG9ydCB7Q09OU1RSVUNUT1JfU1VQUE9SVH0gZnJvbSAnLi4vdG9rZW5zL2NvbnN0cnVjdG9yLXN1cHBvcnQnO1xuaW1wb3J0IHR5cGUge0F1ZGlvUGFyYW1JbnB1dH0gZnJvbSAnLi4vdHlwZXMvYXVkaW8tcGFyYW0taW5wdXQnO1xuaW1wb3J0IHtmYWxsYmFja0F1ZGlvUGFyYW19IGZyb20gJy4uL3V0aWxzL2ZhbGxiYWNrLWF1ZGlvLXBhcmFtJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t3YUF1ZGlvQ29udGV4dF0sW3dhT2ZmbGluZUF1ZGlvQ29udGV4dF1bbGVuZ3RoXVtzYW1wbGVSYXRlXScsXG59KVxuZXhwb3J0IGNsYXNzIFdlYkF1ZGlvTGlzdGVuZXIgZXh0ZW5kcyBHYWluTm9kZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCdmb3J3YXJkWCcpXG4gICAgQGF1ZGlvUGFyYW0oJ2ZvcndhcmRYJylcbiAgICBwdWJsaWMgZm9yd2FyZFhQYXJhbT86IEF1ZGlvUGFyYW1JbnB1dDtcblxuICAgIEBJbnB1dCgnZm9yd2FyZFknKVxuICAgIEBhdWRpb1BhcmFtKCdmb3J3YXJkWScpXG4gICAgcHVibGljIGZvcndhcmRZUGFyYW0/OiBBdWRpb1BhcmFtSW5wdXQ7XG5cbiAgICBASW5wdXQoJ2ZvcndhcmRaJylcbiAgICBAYXVkaW9QYXJhbSgnZm9yd2FyZFonKVxuICAgIHB1YmxpYyBmb3J3YXJkWlBhcmFtPzogQXVkaW9QYXJhbUlucHV0O1xuXG4gICAgQElucHV0KCdwb3NpdGlvblgnKVxuICAgIEBhdWRpb1BhcmFtKCdwb3NpdGlvblgnKVxuICAgIHB1YmxpYyBwb3NpdGlvblhQYXJhbT86IEF1ZGlvUGFyYW1JbnB1dDtcblxuICAgIEBJbnB1dCgncG9zaXRpb25ZJylcbiAgICBAYXVkaW9QYXJhbSgncG9zaXRpb25ZJylcbiAgICBwdWJsaWMgcG9zaXRpb25ZUGFyYW0/OiBBdWRpb1BhcmFtSW5wdXQ7XG5cbiAgICBASW5wdXQoJ3Bvc2l0aW9uWicpXG4gICAgQGF1ZGlvUGFyYW0oJ3Bvc2l0aW9uWicpXG4gICAgcHVibGljIHBvc2l0aW9uWlBhcmFtPzogQXVkaW9QYXJhbUlucHV0O1xuXG4gICAgQElucHV0KCd1cFgnKVxuICAgIEBhdWRpb1BhcmFtKCd1cFgnKVxuICAgIHB1YmxpYyB1cFhQYXJhbT86IEF1ZGlvUGFyYW1JbnB1dDtcblxuICAgIEBJbnB1dCgndXBZJylcbiAgICBAYXVkaW9QYXJhbSgndXBZJylcbiAgICBwdWJsaWMgdXBZUGFyYW0/OiBBdWRpb1BhcmFtSW5wdXQ7XG5cbiAgICBASW5wdXQoJ3VwWicpXG4gICAgQGF1ZGlvUGFyYW0oJ3VwWicpXG4gICAgcHVibGljIHVwWlBhcmFtPzogQXVkaW9QYXJhbUlucHV0O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBpbmplY3QoQVVESU9fQ09OVEVYVCwge3NlbGY6IHRydWV9KTtcbiAgICAgICAgY29uc3QgbW9kZXJuID0gaW5qZWN0KENPTlNUUlVDVE9SX1NVUFBPUlQpO1xuXG4gICAgICAgIGlmIChtb2Rlcm4pIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVHYWluKCk7XG5cbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZXN1bHQsIFdlYkF1ZGlvTGlzdGVuZXIucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBXZWJBdWRpb0xpc3RlbmVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmb3J3YXJkWCgpOiBBdWRpb1BhcmFtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZvcndhcmRZKCk6IEF1ZGlvUGFyYW0ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRZO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZm9yd2FyZFooKTogQXVkaW9QYXJhbSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFo7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwb3NpdGlvblgoKTogQXVkaW9QYXJhbSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQubGlzdGVuZXIucG9zaXRpb25YO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcG9zaXRpb25ZKCk6IEF1ZGlvUGFyYW0ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBvc2l0aW9uWigpOiBBdWRpb1BhcmFtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblo7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1cFgoKTogQXVkaW9QYXJhbSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBYO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXBZKCk6IEF1ZGlvUGFyYW0ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHVwWigpOiBBdWRpb1BhcmFtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFo7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWCBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZhbGxiYWNrIGZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0T3JpZW50YXRpb24oXG4gICAgICAgICAgICBmYWxsYmFja0F1ZGlvUGFyYW0odGhpcy5mb3J3YXJkWFBhcmFtKSxcbiAgICAgICAgICAgIGZhbGxiYWNrQXVkaW9QYXJhbSh0aGlzLmZvcndhcmRZUGFyYW0pLFxuICAgICAgICAgICAgZmFsbGJhY2tBdWRpb1BhcmFtKHRoaXMuZm9yd2FyZFpQYXJhbSksXG4gICAgICAgICAgICBmYWxsYmFja0F1ZGlvUGFyYW0odGhpcy51cFhQYXJhbSksXG4gICAgICAgICAgICBmYWxsYmFja0F1ZGlvUGFyYW0odGhpcy51cFlQYXJhbSksXG4gICAgICAgICAgICBmYWxsYmFja0F1ZGlvUGFyYW0odGhpcy51cFpQYXJhbSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5zZXRQb3NpdGlvbihcbiAgICAgICAgICAgIGZhbGxiYWNrQXVkaW9QYXJhbSh0aGlzLnBvc2l0aW9uWFBhcmFtKSxcbiAgICAgICAgICAgIGZhbGxiYWNrQXVkaW9QYXJhbSh0aGlzLnBvc2l0aW9uWVBhcmFtKSxcbiAgICAgICAgICAgIGZhbGxiYWNrQXVkaW9QYXJhbSh0aGlzLnBvc2l0aW9uWlBhcmFtKSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=