@ng-web-apis/audio
Version:
This is a library for declarative use of Web Audio API with Angular
36 lines • 5.07 kB
JavaScript
import { Directive, ElementRef, inject } from '@angular/core';
import { AUDIO_CONTEXT } from '../tokens/audio-context';
import { asAudioNode } from '../tokens/audio-node';
import { CONSTRUCTOR_SUPPORT } from '../tokens/constructor-support';
import * as i0 from "@angular/core";
class WebAudioMediaSource extends MediaElementAudioSourceNode {
constructor() {
const context = inject(AUDIO_CONTEXT);
const modern = inject(CONSTRUCTOR_SUPPORT);
const nativeElement = inject(ElementRef).nativeElement;
if (modern) {
super(context, { mediaElement: nativeElement });
}
else {
const result = context.createMediaElementSource(nativeElement);
Object.setPrototypeOf(result, WebAudioMediaSource.prototype);
return result;
}
}
ngOnDestroy() {
this.disconnect();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioMediaSource, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WebAudioMediaSource, isStandalone: true, selector: "audio[waMediaElementAudioSourceNode], video[waMediaElementAudioSourceNode]", providers: [asAudioNode(WebAudioMediaSource)], exportAs: ["AudioNode"], usesInheritance: true, ngImport: i0 });
}
export { WebAudioMediaSource };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebAudioMediaSource, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: 'audio[waMediaElementAudioSourceNode], video[waMediaElementAudioSourceNode]',
providers: [asAudioNode(WebAudioMediaSource)],
exportAs: 'AudioNode',
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9hdWRpby9zcmMvc291cmNlcy9tZWRpYS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTVELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sK0JBQStCLENBQUM7O0FBRWxFLE1BT2EsbUJBQ1QsU0FBUSwyQkFBMkI7SUFHbkM7UUFDSSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQWUsYUFBYSxDQUFDLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0MsTUFBTSxhQUFhLEdBQXFCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFFekUsSUFBSSxNQUFNLEVBQUU7WUFDUixLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUMsWUFBWSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUM7U0FDakQ7YUFBTTtZQUNILE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUUvRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU3RCxPQUFPLE1BQTZCLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO3dHQXRCUSxtQkFBbUI7NEZBQW5CLG1CQUFtQix5SEFIakIsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQzs7U0FHcEMsbUJBQW1COzRGQUFuQixtQkFBbUI7a0JBUC9CLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFDSiw0RUFBNEU7b0JBQ2hGLFNBQVMsRUFBRSxDQUFDLFdBQVcscUJBQXFCLENBQUM7b0JBQzdDLFFBQVEsRUFBRSxXQUFXO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7QVVESU9fQ09OVEVYVH0gZnJvbSAnLi4vdG9rZW5zL2F1ZGlvLWNvbnRleHQnO1xuaW1wb3J0IHthc0F1ZGlvTm9kZX0gZnJvbSAnLi4vdG9rZW5zL2F1ZGlvLW5vZGUnO1xuaW1wb3J0IHtDT05TVFJVQ1RPUl9TVVBQT1JUfSBmcm9tICcuLi90b2tlbnMvY29uc3RydWN0b3Itc3VwcG9ydCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6XG4gICAgICAgICdhdWRpb1t3YU1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZV0sIHZpZGVvW3dhTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlXScsXG4gICAgcHJvdmlkZXJzOiBbYXNBdWRpb05vZGUoV2ViQXVkaW9NZWRpYVNvdXJjZSldLFxuICAgIGV4cG9ydEFzOiAnQXVkaW9Ob2RlJyxcbn0pXG5leHBvcnQgY2xhc3MgV2ViQXVkaW9NZWRpYVNvdXJjZVxuICAgIGV4dGVuZHMgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlXG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGluamVjdDxBdWRpb0NvbnRleHQ+KEFVRElPX0NPTlRFWFQpO1xuICAgICAgICBjb25zdCBtb2Rlcm4gPSBpbmplY3QoQ09OU1RSVUNUT1JfU1VQUE9SVCk7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQ6IEhUTUxNZWRpYUVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZikubmF0aXZlRWxlbWVudDtcblxuICAgICAgICBpZiAobW9kZXJuKSB7XG4gICAgICAgICAgICBzdXBlcihjb250ZXh0LCB7bWVkaWFFbGVtZW50OiBuYXRpdmVFbGVtZW50fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShuYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlc3VsdCwgV2ViQXVkaW9NZWRpYVNvdXJjZS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIFdlYkF1ZGlvTWVkaWFTb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIH1cbn1cbiJdfQ==