@pankajparashar/react-voice-visualizer
Version:
React library for audio recording and visualization using Web Audio API
120 lines (119 loc) • 3.49 kB
TypeScript
import { Dispatch, MutableRefObject, SetStateAction } from 'react';
export interface BarItem {
startY: number;
barHeight: number;
}
export interface Controls {
audioRef: MutableRefObject<HTMLAudioElement | null>;
isRecordingInProgress: boolean;
isPausedRecording: boolean;
audioData: Uint8Array;
recordingTime: number;
mediaRecorder: MediaRecorder | null;
duration: number;
currentAudioTime: number;
audioSrc: string;
isPausedRecordedAudio: boolean;
isProcessingRecordedAudio: boolean;
isCleared: boolean;
isAvailableRecordedAudio: boolean;
recordedBlob: Blob | null;
bufferFromRecordedBlob: AudioBuffer | null;
formattedDuration: string;
formattedRecordingTime: string;
formattedRecordedAudioCurrentTime: string;
startRecording: () => void;
togglePauseResume: () => void;
startAudioPlayback: () => void;
stopAudioPlayback: () => void;
stopRecording: () => void;
saveAudioFile: () => void;
clearCanvas: () => void;
setCurrentAudioTime: Dispatch<SetStateAction<number>>;
error: Error | null;
isProcessingOnResize: boolean;
isProcessingStartRecording: boolean;
isPreloadedBlob: boolean;
setPreloadedAudioBlob: (blob: Blob) => void;
_setIsProcessingAudioOnComplete: Dispatch<SetStateAction<boolean>>;
_setIsProcessingOnResize: Dispatch<SetStateAction<boolean>>;
}
export interface BarsData {
max: number;
}
export interface DrawByLiveStreamParams {
audioData: Uint8Array;
unit: number;
index: MutableRefObject<number>;
index2: MutableRefObject<number>;
canvas: HTMLCanvasElement;
isRecordingInProgress: boolean;
isPausedRecording: boolean;
picks: Array<BarItem | null>;
backgroundColor: string;
barWidth: number;
mainBarColor: string;
secondaryBarColor: string;
rounded: number;
animateCurrentPick: boolean;
fullscreen: boolean;
}
export interface DrawByBlob {
barsData: BarsData[];
canvas: HTMLCanvasElement;
barWidth: number;
gap: number;
backgroundColor: string;
mainBarColor: string;
secondaryBarColor: string;
currentAudioTime?: number;
rounded: number;
duration: number;
}
export interface PaintLineFromCenterToRightParams {
context: CanvasRenderingContext2D;
color: string;
rounded: number;
width: number;
height: number;
barWidth: number;
}
export interface GetDataForCanvasParams {
canvas: HTMLCanvasElement;
backgroundColor: string;
}
export interface PaintLineParams {
context: CanvasRenderingContext2D;
color: string;
rounded: number | number[];
x: number;
y: number;
w: number;
h: number;
}
export type GetBarsDataParams = {
bufferData: Float32Array;
height: number;
width: number;
barWidth: number;
gap: number;
};
export interface useVoiceVisualizerParams {
onStartRecording?: () => void;
onStopRecording?: () => void;
onPausedRecording?: () => void;
onResumedRecording?: () => void;
onClearCanvas?: () => void;
onEndAudioPlayback?: () => void;
onStartAudioPlayback?: () => void;
onPausedAudioPlayback?: () => void;
onResumedAudioPlayback?: () => void;
onErrorPlayingAudio?: (error: Error) => void;
shouldHandleBeforeUnload?: boolean;
}
export interface UseWebWorkerParams<T> {
fn: AnyFunction;
initialValue: T;
onMessageReceived?: () => void;
}
export type AnyFunction = (...args: any[]) => any;