{"version":3,"file":"49ing-ngx-videogular-modulo.mjs","sources":["../../../../libs/ngx-videogular/modulo/src/lib/utils/modulo.ts","../../../../libs/ngx-videogular/modulo/src/lib/components/vg-modulo.component.ts","../../../../libs/ngx-videogular/modulo/src/lib/components/vg-modulo.component.html","../../../../libs/ngx-videogular/modulo/src/lib/modulo.module.ts","../../../../libs/ngx-videogular/modulo/src/49ing-ngx-videogular-modulo.ts"],"sourcesContent":["import {FluctusInterface} from '../interfaces/fluctus.interface';\n\nconst AudioContext = window[\"AudioContext\"] || window[\"webkitAudioContext\"];\n\nexport class Gondolo implements FluctusInterface {\n  ctx: AudioContext;\n  analyser: AnalyserNode | Array<AnalyserNode>;\n  stereo: boolean;\n  audible: boolean;\n  wavedata: Uint8Array | null;\n  freqdata: any;\n  splitter: ChannelSplitterNode | null;\n  merger: ChannelMergerNode | null;\n  source: MediaElementAudioSourceNode | MediaStreamAudioSourceNode;\n  output: ChannelMergerNode;\n\n  constructor(\n    audio:\n      | HTMLAudioElement\n      | AudioNode\n      | MediaStream\n      | MediaElementAudioSourceNode\n      | MediaStreamAudioSourceNode,\n    ctx?: AudioContext | any,\n    opts?: { stereo?: boolean; audible?: boolean }\n  ) {\n    if (!(this instanceof Gondolo)) {\n      return new Gondolo(audio, ctx, opts);\n    }\n\n    if (!(ctx instanceof AudioContext)) {\n      (opts = ctx), (ctx = null);\n    }\n\n    opts = opts || {};\n    this.ctx = ctx = ctx || new AudioContext();\n\n    if (!(audio instanceof AudioNode)) {\n      audio =\n        audio instanceof Audio || audio instanceof HTMLAudioElement\n          ? ctx.createMediaElementSource(audio)\n          : ctx.createMediaStreamSource(audio);\n    }\n\n    this.audioConfigStateResolver(ctx, opts, audio);\n    this.audioConfigStateParser(ctx);\n  }\n\n  public waveform(output?: Uint8Array, channel?: number): Uint8Array {\n    if (!output) {\n      output =\n        this.wavedata ||\n        (this.wavedata = new Uint8Array(\n          (this.analyser[0] || this.analyser).frequencyBinCount\n        ));\n    }\n\n    const analyser = this.stereo ? this.analyser[channel || 0] : this.analyser;\n\n    analyser.getByteTimeDomainData(output);\n\n    return output;\n  }\n\n  public frequencies(output?: Uint8Array, channel?: number): Uint8Array {\n    if (!output) {\n      output =\n        this.freqdata ||\n        (this.freqdata = new Uint8Array(\n          (this.analyser[0] || this.analyser).frequencyBinCount\n        ));\n    }\n\n    const analyser = this.stereo ? this.analyser[channel || 0] : this.analyser;\n\n    analyser.getByteFrequencyData(output);\n\n    return output;\n  }\n\n  private audioConfigStateResolver(\n    ctx: AudioContext,\n    opts: { stereo?: boolean; audible?: boolean },\n    audio: MediaElementAudioSourceNode | any\n  ): void {\n    this.analyser = ctx.createAnalyser();\n    this.stereo = !!opts.stereo;\n    this.audible = opts.audible !== false;\n    this.wavedata = null;\n    this.freqdata = null;\n    this.splitter = null;\n    this.merger = null;\n    this.source = audio;\n  }\n\n  private audioConfigStateParser(ctx: AudioContext) {\n    if (!this.stereo) {\n      this.output = this.source;\n\n      this.source.connect(this.analyser[0] || this.analyser);\n\n      if (this.audible) {\n        (this.analyser[0] || this.analyser).connect(ctx.destination);\n      }\n    } else {\n      this.analyser = [this.analyser[0] || this.analyser];\n\n      this.analyser.push(ctx.createAnalyser());\n\n      this.splitter = ctx.createChannelSplitter(2);\n      this.merger = ctx.createChannelMerger(2);\n      this.output = this.merger;\n\n      this.source.connect(this.splitter);\n\n      for (let i = 0; i < 2; i++) {\n        this.splitter.connect(this.analyser[i], i, 0);\n        this.analyser[i].connect(this.merger, 0, i);\n      }\n\n      if (this.audible) {\n        this.merger.connect(ctx.destination);\n      }\n    }\n  }\n}\n","import { Component, ElementRef, Input, ViewChild } from \"@angular/core\";\nimport { ModuloConfig } from '../interfaces/modulo-config.interface';\nimport { Gondolo } from \"../utils/modulo\";\n\n@Component({\n  selector: \"vg-modulo\",\n  templateUrl: \"./vg-modulo.component.html\",\n})\nexport class VgModuloComponent {\n  private _audioAnalyser: Gondolo;\n  private _ctx: CanvasRenderingContext2D;\n\n  @Input() moduloConfig: ModuloConfig;\n  @Input() audioElement: HTMLAudioElement;\n\n  @ViewChild(\"waveCanvas\", { static: false }) waveCanvas: ElementRef<HTMLCanvasElement>;\n\n  public startVisualizer() {\n    if (!this._audioAnalyser) {\n      this._audioAnalyser = new Gondolo(this.audioElement);\n\n      const {width, height} = this.moduloConfig.dimensions;\n      const canvasElement = this.waveCanvas.nativeElement;\n\n      this._ctx = canvasElement.getContext(\"2d\");\n\n      canvasElement.width = width;\n      canvasElement.height = height;\n    }\n\n    this.update();\n  }\n\n  public update() {\n    const audioFreq = this._audioAnalyser.waveform();\n    const {fillStyle, strokeStyle, lineWidth, scaleFactor} = this.moduloConfig;\n    const {width, height} = this.waveCanvas.nativeElement;\n\n    // Clear canvas\n    this._ctx.fillStyle = fillStyle;\n    this._ctx.fillRect(0, 0, width, height);\n\n    this._ctx.strokeStyle = strokeStyle;\n    this._ctx.lineWidth = lineWidth;\n\n    // Draw frequency lines\n    this._ctx.beginPath();\n    this._ctx.moveTo(0, height / 2 - audioFreq[0] * scaleFactor);\n\n    for (let i = 0; i < audioFreq.length; i++) {\n      this._ctx.lineTo(\n        (width / audioFreq.length) * i,\n        height / 2 - audioFreq[i] * scaleFactor\n      );\n    }\n\n    this._ctx.moveTo(0, height / 2 + audioFreq[0] * scaleFactor);\n\n    for (let i = 0; i < audioFreq.length; i++) {\n      this._ctx.lineTo(\n        (width / audioFreq.length) * i,\n        height / 2 + audioFreq[i] * scaleFactor\n      );\n    }\n\n    this._ctx.stroke();\n\n    window.requestAnimationFrame(() => this.update());\n  }\n}\n","<canvas #waveCanvas></canvas>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { VgModuloComponent } from \"./components/vg-modulo.component\";\n\n@NgModule({\n  imports: [\n    CommonModule\n  ],\n  declarations: [VgModuloComponent],\n  exports: [VgModuloComponent],\n})\nexport class VgModuloModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}