ngx-mic-recorder
Version:
Microphone recorder for Angular
1 lines • 43.1 kB
Source Map (JSON)
{"version":3,"file":"ngx-mic-recorder.mjs","sources":["../../../projects/ngx-mic-recorder/src/lib/utils/mp3-encoder.ts","../../../projects/ngx-mic-recorder/src/lib/utils/audio-context.ts","../../../projects/ngx-mic-recorder/src/lib/ngx-mic-recorder.service.ts","../../../projects/ngx-mic-recorder/src/lib/utils/audio-visualizer.ts","../../../projects/ngx-mic-recorder/src/lib/ngx-mic-recorder.component.ts","../../../projects/ngx-mic-recorder/src/lib/ngx-mic-recorder.component.html","../../../projects/ngx-mic-recorder/src/lib/ngx-mic-recorder.module.ts","../../../projects/ngx-mic-recorder/src/public-api.ts","../../../projects/ngx-mic-recorder/src/ngx-mic-recorder.ts"],"sourcesContent":["// @ts-ignore\r\nimport { Mp3Encoder } from 'lamejstmp';\r\n\r\ninterface Config {\r\n bitRate: number;\r\n sampleRate: number;\r\n}\r\n\r\nexport class MP3Encoder {\r\n config: Config;\r\n mp3Encoder: Mp3Encoder;\r\n maxSamples: number;\r\n samplesMono: Int16Array | null;\r\n dataBuffer: Int8Array[] = [];\r\n\r\n constructor(config?: Config) {\r\n this.config = {\r\n sampleRate: 44100,\r\n bitRate: 128,\r\n };\r\n\r\n Object.assign(this.config, config);\r\n\r\n this.mp3Encoder = new Mp3Encoder(\r\n 1,\r\n this.config.sampleRate,\r\n this.config.bitRate\r\n );\r\n\r\n this.maxSamples = 1152;\r\n\r\n this.samplesMono = null;\r\n this.clearBuffer();\r\n }\r\n\r\n clearBuffer() {\r\n this.dataBuffer = [];\r\n }\r\n\r\n appendToBuffer(buffer: Iterable<number>) {\r\n this.dataBuffer.push(new Int8Array(buffer));\r\n }\r\n\r\n floatTo16BitPCM(input: Float32Array, output: Int16Array) {\r\n for (let i = 0; i < input.length; i++) {\r\n const s = Math.max(-1, Math.min(1, input[i]));\r\n output[i] = s < 0 ? s * 0x8000 : s * 0x7fff;\r\n }\r\n }\r\n\r\n convertBuffer(arrayBuffer: Float32Array) {\r\n const data = new Float32Array(arrayBuffer);\r\n const out = new Int16Array(arrayBuffer.length);\r\n this.floatTo16BitPCM(data, out);\r\n\r\n return out;\r\n }\r\n\r\n encode(arrayBuffer: Float32Array) {\r\n this.samplesMono = this.convertBuffer(arrayBuffer);\r\n let remaining = this.samplesMono.length;\r\n\r\n for (let i = 0; remaining >= 0; i += this.maxSamples) {\r\n const left = this.samplesMono.subarray(i, i + this.maxSamples);\r\n const mp3buffer = this.mp3Encoder.encodeBuffer(left);\r\n this.appendToBuffer(mp3buffer);\r\n remaining -= this.maxSamples;\r\n }\r\n }\r\n\r\n finish() {\r\n this.appendToBuffer(this.mp3Encoder.flush());\r\n\r\n return this.dataBuffer;\r\n }\r\n}\r\n","declare global {\r\n interface Window {\r\n webkitAudioContext: typeof AudioContext\r\n }\r\n}\r\n\r\nconst audioCtx = new (window.AudioContext || window['webkitAudioContext'])();\r\nlet analyser = audioCtx.createAnalyser();\r\n\r\nexport const AudioContext = {\r\n getAudioContext(): AudioContext {\r\n return audioCtx;\r\n },\r\n\r\n startAnalyze(stream: MediaStream): void {\r\n const audioCtx = AudioContext.getAudioContext();\r\n audioCtx.resume().then(() => {\r\n const analyser = AudioContext.getAnalyser();\r\n const sourceNode = audioCtx.createMediaStreamSource(stream);\r\n sourceNode.connect(analyser);\r\n });\r\n },\r\n\r\n pauseAnalyze(): void {\r\n const audioCtx = AudioContext.getAudioContext();\r\n void audioCtx.suspend();\r\n },\r\n\r\n resumeAnalyze(): void {\r\n const audioCtx = AudioContext.getAudioContext();\r\n void audioCtx.resume();\r\n },\r\n\r\n getAnalyser(): AnalyserNode {\r\n return analyser;\r\n },\r\n\r\n resetAnalyser(): void {\r\n analyser = audioCtx.createAnalyser();\r\n },\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, from, map, switchMap } from 'rxjs';\r\nimport { MP3Encoder } from './utils/mp3-encoder';\r\nimport { AudioContext } from './utils/audio-context';\r\n\r\nexport interface RecordingEvents {\r\n afterStartRecording: () => void;\r\n afterStopRecording: (blob: Blob) => void;\r\n onPause: () => void;\r\n onResume: () => void;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgxMicRecorderService {\r\n private _isRecordingSubject = new BehaviorSubject<boolean>(false);\r\n private _isPausedSubject = new BehaviorSubject<boolean>(false);\r\n private _recordingTimeSubject = new BehaviorSubject<number>(0);\r\n private _recordedBlobSubject = new BehaviorSubject<Blob | null>(null);\r\n private _recordingStateSubject = new BehaviorSubject<RecordingState>('inactive');\r\n private _timeInterval?: any;\r\n private _audioContext = new (window.AudioContext || window['webkitAudioContext'])();\r\n private _mic?: MediaStreamAudioSourceNode;\r\n private _processor?: ScriptProcessorNode;\r\n private _activeStream?: MediaStream;\r\n private _mp3Encoder = new MP3Encoder();\r\n private _mediaRecorder?: MediaRecorder;\r\n private _recordingEvents?: Partial<RecordingEvents>;\r\n\r\n public isRecording$ = this._isRecordingSubject.asObservable();\r\n public isPaused$ = this._isPausedSubject.asObservable();\r\n public recordingTime$ = this._recordingTimeSubject.asObservable().pipe(map(s => new Date(s * 1000).toISOString().slice(11, 19)));\r\n public recordedBlob$ = this._recordedBlobSubject.asObservable();\r\n public recordedBlobAsMp3$ = this.recordedBlob$.pipe(switchMap(() => from(this._getMp3())));\r\n public recordingState$ = this._recordingStateSubject.asObservable();\r\n\r\n private _startTimer(): void {\r\n this._timeInterval = setInterval(() => {\r\n this._recordingTimeSubject.next(this._recordingTimeSubject.getValue() + 1)\r\n }, 1000);\r\n }\r\n\r\n private _stopTimer(): void {\r\n clearInterval(this._timeInterval);\r\n this._timeInterval = undefined;\r\n }\r\n\r\n private _getMp3(): Promise<Blob> {\r\n const finalBuffer = this._mp3Encoder.finish();\r\n\r\n return new Promise((resolve, reject) => {\r\n if (finalBuffer.length === 0) {\r\n reject(new Error('No buffer to send'));\r\n } else {\r\n resolve(new Blob(finalBuffer, { type: 'audio/mp3' }));\r\n this._mp3Encoder.clearBuffer();\r\n }\r\n });\r\n }\r\n\r\n public setRecordingEvents(events: Partial<RecordingEvents>) {\r\n this._recordingEvents = events;\r\n }\r\n\r\n\r\n public toggleStartStop = (): void => {\r\n const isRecording = this._isRecordingSubject.getValue();\r\n\r\n if (isRecording) {\r\n this.stopRecording();\r\n } else {\r\n this.startRecording();\r\n }\r\n }\r\n\r\n public startRecording = (): void => {\r\n if (this._timeInterval !== undefined) return;\r\n\r\n navigator.mediaDevices\r\n .getUserMedia({ audio: true })\r\n .then((stream) => {\r\n this._activeStream = stream;\r\n this._isRecordingSubject.next(true);\r\n const recorder: MediaRecorder = new MediaRecorder(stream);\r\n this._mediaRecorder = recorder;\r\n recorder.start();\r\n this._startTimer();\r\n this._recordingStateSubject.next('recording');\r\n this._mic = this._audioContext.createMediaStreamSource(stream);\r\n this._processor = this._audioContext.createScriptProcessor(0, 1, 1);\r\n this._mic.connect(this._processor);\r\n this._processor.connect(this._audioContext.destination);\r\n\r\n this._processor.onaudioprocess = (event) => {\r\n this._mp3Encoder.encode(event.inputBuffer.getChannelData(0));\r\n };\r\n\r\n if (this._recordingEvents?.afterStartRecording) this._recordingEvents?.afterStartRecording();\r\n\r\n recorder.addEventListener('dataavailable', (event: BlobEvent) => {\r\n this._recordedBlobSubject.next(event.data);\r\n // if (onDataAvailable) onDataAvailable(event.data);\r\n recorder.stream.getTracks().forEach((t) => t.stop());\r\n this._mediaRecorder = undefined;\r\n });\r\n AudioContext.startAnalyze(stream);\r\n })\r\n .catch((err) => console.log(err));\r\n }\r\n\r\n public stopRecording = (): void => {\r\n this._mediaRecorder?.stop();\r\n this._stopTimer();\r\n this._recordingTimeSubject.next(0)\r\n this._isRecordingSubject.next(false);\r\n this._isPausedSubject.next(false);\r\n this._recordingStateSubject.next('inactive');\r\n AudioContext.resetAnalyser();\r\n if (this._recordingEvents?.afterStopRecording) this._recordingEvents.afterStopRecording(this._recordedBlobSubject.getValue() as Blob);\r\n\r\n if (this._processor && this._mic) {\r\n this._mic.disconnect();\r\n this._processor.disconnect();\r\n if (this._audioContext && this._audioContext.state !== 'closed') {\r\n this._audioContext.close();\r\n }\r\n this._processor.onaudioprocess = null;\r\n this._activeStream?.getAudioTracks().forEach((track) => track.stop());\r\n }\r\n }\r\n\r\n public togglePauseAndResume = (): void => {\r\n const isRecording = this._isRecordingSubject.getValue();\r\n if (!isRecording) return;\r\n const isPaused = this._isPausedSubject.getValue();\r\n if (isPaused) {\r\n this.resume();\r\n } else {\r\n this.pause();\r\n }\r\n }\r\n\r\n public resume = (): void => {\r\n this._isPausedSubject.next(false)\r\n this._mediaRecorder?.resume();\r\n this._recordingStateSubject.next('recording');\r\n AudioContext.resumeAnalyze();\r\n void this._audioContext.resume();\r\n this._startTimer();\r\n if (this._recordingEvents?.onResume) this._recordingEvents.onResume();\r\n }\r\n\r\n public pause = (): void => {\r\n this._isPausedSubject.next(true);\r\n this._mediaRecorder?.pause();\r\n this._recordingStateSubject.next('paused');\r\n AudioContext.pauseAnalyze();\r\n void this._audioContext.suspend();\r\n this._stopTimer();\r\n if (this._recordingEvents?.onPause) this._recordingEvents.onPause();\r\n }\r\n\r\n}\r\n","import { AudioContext } from './audio-context';\r\n\r\nlet drawVisual;\r\n\r\nexport interface AudioVisualizationOptions {\r\n canvas: HTMLCanvasElement;\r\n width: number;\r\n height: number;\r\n backgroundColor: string;\r\n strokeColor: string;\r\n}\r\n\r\nconst defaultOptions: Omit<AudioVisualizationOptions, 'canvas'> = {\r\n width: 300,\r\n height: 150,\r\n strokeColor: '#212121',\r\n backgroundColor: 'white',\r\n}\r\n\r\nexport type AudioVisualizationType = 'SineWave' | 'FrequencyBars' | 'FrequencyCircles';\r\n\r\ntype Args = Partial<Omit<AudioVisualizationOptions, 'canvas'>> & Pick<AudioVisualizationOptions, 'canvas'>;\r\n\r\nexport const AudioVisualizer = {\r\n visualizeSineWave({\r\n canvas,\r\n backgroundColor,\r\n strokeColor,\r\n width,\r\n height,\r\n }: AudioVisualizationOptions): void {\r\n const canvasCtx = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n let analyser = AudioContext.getAnalyser();\r\n\r\n const bufferLength = analyser.fftSize;\r\n const dataArray = new Uint8Array(bufferLength);\r\n\r\n canvasCtx.clearRect(0, 0, width, height);\r\n\r\n function draw(): void {\r\n drawVisual = requestAnimationFrame(draw);\r\n\r\n analyser = AudioContext.getAnalyser();\r\n\r\n analyser.getByteTimeDomainData(dataArray);\r\n\r\n canvasCtx.fillStyle = backgroundColor;\r\n canvasCtx.fillRect(0, 0, width, height);\r\n\r\n canvasCtx.lineWidth = 2;\r\n canvasCtx.strokeStyle = strokeColor;\r\n\r\n canvasCtx.beginPath();\r\n\r\n const sliceWidth = width / bufferLength;\r\n let x = 0;\r\n\r\n for (let i = 0; i < bufferLength; i++) {\r\n const v = dataArray[i] / 128.0;\r\n const y = (v * height) / 2;\r\n\r\n if (i === 0) {\r\n canvasCtx.moveTo(x, y);\r\n } else {\r\n canvasCtx.lineTo(x, y);\r\n }\r\n\r\n x += sliceWidth;\r\n }\r\n\r\n canvasCtx.lineTo(canvas.width, canvas.height / 2);\r\n canvasCtx.stroke();\r\n }\r\n\r\n draw();\r\n },\r\n\r\n visualizeFrequencyBars({\r\n canvas,\r\n backgroundColor,\r\n strokeColor,\r\n width,\r\n height,\r\n }: AudioVisualizationOptions): void {\r\n const canvasCtx = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n let analyser = AudioContext.getAnalyser();\r\n analyser.fftSize = 256;\r\n const bufferLength = analyser.frequencyBinCount;\r\n const dataArray = new Uint8Array(bufferLength);\r\n\r\n canvasCtx.clearRect(0, 0, width, height);\r\n\r\n const draw = () => {\r\n drawVisual = requestAnimationFrame(draw);\r\n\r\n analyser = AudioContext.getAnalyser();\r\n analyser.getByteFrequencyData(dataArray);\r\n\r\n canvasCtx.fillStyle = backgroundColor;\r\n canvasCtx.fillRect(0, 0, width, height);\r\n\r\n const barWidth = (width / bufferLength) * 2.5;\r\n let barHeight;\r\n let x = 0;\r\n\r\n for (let i = 0; i < bufferLength; i++) {\r\n barHeight = dataArray[i];\r\n\r\n const rgb = this.hexToRgb(strokeColor);\r\n\r\n canvasCtx.fillStyle = strokeColor;\r\n canvasCtx.fillRect(x, height - barHeight / 2, barWidth, barHeight / 2);\r\n\r\n x += barWidth + 1;\r\n }\r\n };\r\n\r\n draw();\r\n },\r\n\r\n visualizeFrequencyCircles({\r\n canvas,\r\n backgroundColor,\r\n strokeColor,\r\n width,\r\n height,\r\n }: AudioVisualizationOptions): void {\r\n const canvasCtx = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n let analyser = AudioContext.getAnalyser();\r\n analyser.fftSize = 32;\r\n const bufferLength = analyser.frequencyBinCount;\r\n\r\n const dataArray = new Uint8Array(bufferLength);\r\n canvasCtx.clearRect(0, 0, width, height);\r\n\r\n const draw = () => {\r\n drawVisual = requestAnimationFrame(draw);\r\n analyser = AudioContext.getAnalyser();\r\n analyser.getByteFrequencyData(dataArray);\r\n const reductionAmount = 3;\r\n const reducedDataArray = new Uint8Array(bufferLength / reductionAmount);\r\n\r\n for (let i = 0; i < bufferLength; i += reductionAmount) {\r\n let sum = 0;\r\n for (let j = 0; j < reductionAmount; j++) {\r\n sum += dataArray[i + j];\r\n }\r\n reducedDataArray[i / reductionAmount] = sum / reductionAmount;\r\n }\r\n\r\n canvasCtx.clearRect(0, 0, width, height);\r\n canvasCtx.beginPath();\r\n canvasCtx.arc(\r\n width / 2,\r\n height / 2,\r\n Math.min(height, width) / 2,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n canvasCtx.fillStyle = backgroundColor;\r\n canvasCtx.fill();\r\n const stepSize = Math.min(height, width) / 2.0 / reducedDataArray.length;\r\n canvasCtx.strokeStyle = strokeColor;\r\n\r\n for (let i = 0; i < reducedDataArray.length; i++) {\r\n canvasCtx.beginPath();\r\n const normalized = reducedDataArray[i] / 128;\r\n const r = stepSize * i + stepSize * normalized;\r\n canvasCtx.arc(width / 2, height / 2, r, 0, 2 * Math.PI);\r\n canvasCtx.stroke();\r\n }\r\n };\r\n draw();\r\n },\r\n\r\n hexToRgb(hex: string): {r: number, g: number, b: number} | null {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : null;\r\n },\r\n\r\n visualize(type: AudioVisualizationType | undefined, options: Args): void {\r\n this[`visualize${type || 'SineWave'}`]({\r\n ...defaultOptions,\r\n ...options\r\n } as AudioVisualizationOptions);\r\n }\r\n};\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ContentChild,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { NgxMicRecorderService } from './ngx-mic-recorder.service';\r\nimport { AudioVisualizationOptions, AudioVisualizationType, AudioVisualizer } from './utils/audio-visualizer';\r\nimport { Subscription } from 'rxjs';\r\n\r\ntype StartStopTemplateContext = { $implicit: boolean, toggle: Function, start: Function, stop: Function};\r\n\r\ntype PauseResumeTemplateContext = {\r\n $implicit: boolean,\r\n isPaused: boolean,\r\n toggle: Function,\r\n resume: Function,\r\n pause: Function,\r\n recordingState: RecordingState,\r\n recordingTime: string\r\n};\r\n\r\n@Directive({\r\n selector: '[ngx-mic-start-and-stop]'\r\n})\r\nexport class NgxMicStartStopTemplate {\r\n constructor(public templateRef: TemplateRef<StartStopTemplateContext>) {\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[ngx-mic-pause-and-resume]'\r\n})\r\nexport class NgxPauseResumeTemplate {\r\n constructor(public templateRef: TemplateRef<PauseResumeTemplateContext>) {}\r\n}\r\n\r\n@Component({\r\n selector: 'ngx-mic-recorder',\r\n templateUrl: './ngx-mic-recorder.component.html',\r\n styleUrls: ['./ngx-mic-recorder.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class NgxMicRecorderComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @ViewChild('canvas') canvas!: ElementRef<HTMLCanvasElement>;\r\n @ContentChild(NgxMicStartStopTemplate) startStopTemplateRef?: NgxMicStartStopTemplate;\r\n @ContentChild(NgxPauseResumeTemplate) pauseResumeTemplateRef?: NgxPauseResumeTemplate;\r\n @Input() showVisualization = true;\r\n @Input() visualizationType?: AudioVisualizationType;\r\n @Input() visualizationOptions?: Omit<AudioVisualizationOptions, 'canvas'>;\r\n @Output() getAsMp3 = new EventEmitter<{ data: Blob, url: string}>();\r\n @Output() getAsBlob = new EventEmitter<Blob>();\r\n @Output() afterStartRecording = new EventEmitter<void>();\r\n @Output() afterStopRecording = new EventEmitter<Blob>();\r\n @Output() onPauseRecording = new EventEmitter<void>();\r\n @Output() onResumeRecording = new EventEmitter<void>();\r\n\r\n private _subscription?: Subscription;\r\n\r\n constructor(public ngxMicRecorderService: NgxMicRecorderService) { }\r\n\r\n ngOnInit(): void {\r\n this._subscription = this.ngxMicRecorderService.recordedBlobAsMp3$.subscribe(\r\n (data) => {\r\n this.getAsMp3.emit({data, url: URL.createObjectURL(data)})\r\n }\r\n )\r\n this._subscription.add(\r\n this.ngxMicRecorderService.recordedBlob$.subscribe((data) => this.getAsBlob.emit(data!))\r\n )\r\n\r\n this.ngxMicRecorderService.setRecordingEvents({\r\n afterStartRecording: () => this.afterStartRecording.emit(),\r\n afterStopRecording: (blob) => this.afterStopRecording.emit(blob),\r\n onPause: () => this.onPauseRecording.emit(),\r\n onResume: () => this.onResumeRecording.emit(),\r\n })\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n AudioVisualizer.visualize(this.visualizationType, {\r\n canvas: this.canvas.nativeElement,\r\n ...this.visualizationOptions\r\n })\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._subscription?.unsubscribe();\r\n }\r\n\r\n public getStartStopTemplateContext($implicit: boolean): StartStopTemplateContext {\r\n return {\r\n $implicit,\r\n toggle: this.ngxMicRecorderService.toggleStartStop,\r\n start: this.ngxMicRecorderService.startRecording,\r\n stop: this.ngxMicRecorderService.stopRecording\r\n }\r\n }\r\n\r\n\r\n public getPauseResumeTemplateContext($implicit: boolean, isPaused: boolean, recordingTime: string, recordingState: RecordingState): PauseResumeTemplateContext {\r\n return {\r\n $implicit,\r\n isPaused,\r\n recordingState,\r\n recordingTime,\r\n toggle: this.ngxMicRecorderService.togglePauseAndResume,\r\n pause: this.ngxMicRecorderService.pause,\r\n resume: this.ngxMicRecorderService.resume\r\n }\r\n }\r\n}\r\n","<div class=\"ngx-mic-recorder\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"startStopTemplateRef?.templateRef || defaultStartStopTemplate\"\r\n [ngTemplateOutletContext]=\"getStartStopTemplateContext((ngxMicRecorderService.isRecording$ | async) ?? false)\"\r\n\r\n ></ng-template>\r\n <ng-template\r\n [ngTemplateOutlet]=\"pauseResumeTemplateRef?.templateRef || defaultPauseAndResume\"\r\n [ngTemplateOutletContext]=\"getPauseResumeTemplateContext(\r\n (ngxMicRecorderService.isRecording$ | async) ?? false,\r\n (ngxMicRecorderService.isPaused$ | async) ?? false,\r\n (ngxMicRecorderService.recordingTime$ | async) ?? '00:00:00',\r\n (ngxMicRecorderService.recordingState$ | async) ?? 'inactive'\r\n )\"\r\n\r\n ></ng-template>\r\n</div>\r\n\r\n<canvas *ngIf=\"showVisualization\" #canvas [class.hidden]=\"!(ngxMicRecorderService.isRecording$ | async)\"></canvas>\r\n\r\n\r\n<ng-template #defaultStartStopTemplate let-isRecording let-toggle=\"toggle\">\r\n <div class=\"ngx-mic-recorder__start-stop\" (click)=\"toggle()\">\r\n <div class=\"ngx-mic-recorder__state\">\r\n <span *ngIf=\"isRecording\" class=\"ngx-mic-recorder__stop\"></span>\r\n <svg *ngIf=\"!isRecording\" class=\"ngx-mic-recorder__start\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" aria-hidden=\"true\"\r\n id=\"footer-sample-full\" preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 24 24\">\r\n <path fill=\"currentColor\" d=\"M12 14q-1.25 0-2.125-.875T9 11V5q0-1.25.875-2.125T12 2q1.25 0 2.125.875T15 5v6q0 1.25-.875 2.125T12 14Zm-1 7v-3.075q-2.6-.35-4.3-2.325Q5 13.625 5 11h2q0 2.075 1.463 3.537Q9.925 16 12 16t3.538-1.463Q17 13.075 17 11h2q0 2.625-1.7 4.6q-1.7 1.975-4.3 2.325V21Z\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template\r\n #defaultPauseAndResume\r\n let-isRecording\r\n let-toggle=\"toggle\"\r\n let-recordingTime=\"recordingTime\"\r\n let-isPaused=\"isPaused\"\r\n let-recordingState=\"recordingState\"\r\n>\r\n <ng-template [ngIf]=\"isRecording\">\r\n <div class=\"ngx-mic-recorder__recording-time\">\r\n {{ recordingTime }}\r\n </div>\r\n <div class=\"ngx-mic-recorder__toggle\" (click)=\"toggle()\">\r\n <span [class.blink]=\"!isPaused\"></span>\r\n <p>{{ recordingState }}</p>\r\n </div>\r\n </ng-template>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport {\r\n NgxMicRecorderComponent,\r\n NgxMicStartStopTemplate,\r\n NgxPauseResumeTemplate,\r\n} from './ngx-mic-recorder.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n NgxMicRecorderComponent,\r\n NgxMicStartStopTemplate,\r\n NgxPauseResumeTemplate,\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n NgxMicRecorderComponent,\r\n NgxMicStartStopTemplate,\r\n NgxPauseResumeTemplate,\r\n ]\r\n})\r\nexport class NgxMicRecorderModule { }\r\n","/*\r\n * Public API Surface of ngx-mic-recorder\r\n */\r\n\r\nexport * from './lib/ngx-mic-recorder.service';\r\nexport * from './lib/ngx-mic-recorder.component';\r\nexport * from './lib/ngx-mic-recorder.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxMicRecorderService"],"mappings":"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"}