audio-inspect
Version:
Lightweight yet powerful audio analysis library
85 lines (80 loc) • 2.31 kB
TypeScript
interface AudioData {
sampleRate: number;
channelData: Float32Array[];
duration: number;
numberOfChannels: number;
length: number;
}
type FFTProviderType = 'webfft' | 'native' | 'custom';
interface FFTResult {
complex: Float32Array;
magnitude: Float32Array;
phase: Float32Array;
frequencies: Float32Array;
}
interface IFFTProvider {
readonly name: string;
readonly size: number;
readonly sampleRate: number;
fft(input: Float32Array): FFTResult | Promise<FFTResult>;
dispose(): void;
profile?(): Promise<void>;
}
interface FFTProviderConfig {
type: FFTProviderType;
fftSize: number;
sampleRate: number;
enableProfiling?: boolean;
customProvider?: IFFTProvider;
}
interface FFTProviderResolver {
createProvider(config: FFTProviderConfig): Promise<IFFTProvider>;
}
interface FFTProviderRequest {
fftSize: number;
sampleRate: number;
provider?: FFTProviderType;
enableProfiling?: boolean;
fallbackToNative?: boolean;
resolver?: FFTProviderResolver;
}
interface FFTProviderCache {
getOrCreate(request: FFTProviderRequest): Promise<IFFTProvider>;
clear(): void;
}
interface StereoAnalysisOptions {
frameSize?: number;
hopSize?: number;
calculatePhase?: boolean;
calculateITD?: boolean;
calculateILD?: boolean;
provider?: FFTProviderType;
enableProfiling?: boolean;
providerCache?: FFTProviderCache | undefined;
}
interface StereoAnalysisResult {
correlation: number;
coherence?: Float32Array;
width: number;
widthFrequency?: Float32Array;
balance: number;
phaseDifference?: number;
phaseCorrelation?: number;
midSideRatio: number;
itd?: number;
ild?: number;
goniometer?: {
x: Float32Array;
y: Float32Array;
};
}
declare function getStereoAnalysis(audio: AudioData, options?: StereoAnalysisOptions): Promise<StereoAnalysisResult>;
declare function getTimeVaryingStereoAnalysis(audio: AudioData, options?: StereoAnalysisOptions & {
windowSize?: number;
}): Promise<{
times: Float32Array;
correlation: Float32Array;
width: Float32Array;
balance: Float32Array;
}>;
export { type StereoAnalysisOptions, type StereoAnalysisResult, getStereoAnalysis, getTimeVaryingStereoAnalysis };