audio-inspect
Version:
Lightweight yet powerful audio analysis library
227 lines (222 loc) • 6.92 kB
TypeScript
/**
* audio-inspect ライブラリの型定義
*/
/**
* 音声データの構造
*/
interface AudioData {
/** サンプルレート(Hz) */
sampleRate: number;
/** チャンネルごとのオーディオデータ */
channelData: Float32Array[];
/** 音声の長さ(秒) */
duration: number;
/** チャンネル数 */
numberOfChannels: number;
/** サンプル数 */
length: number;
}
/**
* 振幅測定のオプション
*/
interface AmplitudeOptions {
channel?: number;
asDB?: boolean;
reference?: number;
truePeak?: boolean;
oversamplingFactor?: number;
interpolation?: 'linear' | 'cubic' | 'sinc';
}
/**
* プログレス通知オプション
*/
interface ProgressOptions {
onProgress?: (percent: number, message?: string) => void;
}
/**
* 基本的な解析結果インターフェース
*/
interface BaseAnalysisResult {
/** メタデータ */
sampleRate: number;
duration: number;
/** 処理情報 */
processingTime?: number;
}
/**
* 新しいWaveform解析結果(Float32Array対応)
*/
interface WaveformAnalysisResult extends BaseAnalysisResult {
/** 振幅データ(直接使用可能) */
amplitudes: Float32Array;
/** タイムスタンプ(オプショナル) */
timestamps?: Float32Array;
/** メタデータ */
frameCount: number;
samplesPerFrame: number;
framesPerSecond: number;
/** 統計情報 */
maxAmplitude: number;
averageAmplitude: number;
}
/**
* 新しいPeaks解析結果(Float32Array対応)
*/
interface PeaksAnalysisResult extends BaseAnalysisResult {
/** サンプル位置 */
positions: Float32Array;
/** ピーク振幅 */
amplitudes: Float32Array;
/** 時間(秒) */
times: Float32Array;
/** 統計情報 */
maxAmplitude: number;
averageAmplitude: number;
count: number;
}
/**
* 新しいRMS解析結果(統一されたインターフェース)
*/
interface RMSAnalysisResult extends BaseAnalysisResult {
/** RMS値 */
value: number;
/** デシベル値(オプショナル) */
valueDB?: number;
/** 処理したチャンネル */
channel: number;
}
/**
* ピーク検出のオプション
*/
interface PeaksOptions {
/** 抽出するピークの数(デフォルト: 100) */
count?: number;
/** ピーク検出の閾値(0-1、デフォルト: 0.1) */
threshold?: number;
/** 解析するチャンネル(デフォルト: 0、-1で全チャンネルの平均) */
channel?: number;
/** 最小ピーク間距離(サンプル数、デフォルト: サンプルレート/100) */
minDistance?: number;
}
/**
* ピーク情報
*/
interface Peak {
/** ピークの位置(サンプル数) */
position: number;
/** ピークの時間位置(秒) */
time: number;
/** ピークの振幅(0-1) */
amplitude: number;
}
/**
* ピーク検出結果
*/
interface PeaksResult {
/** 検出されたピーク */
peaks: Peak[];
/** 最大振幅 */
maxAmplitude: number;
/** 平均振幅 */
averageAmplitude: number;
}
/**
* ピーク検出を行う
*/
declare function getPeaks(audio: AudioData, options?: PeaksOptions): PeaksResult;
/**
* RMS(Root Mean Square)を計算
*/
declare function getRMS(audio: AudioData, optionsOrChannel?: AmplitudeOptions | number): number;
/**
* ピーク振幅を計算
*/
declare function getPeakAmplitude(audio: AudioData, options?: AmplitudeOptions): number;
/**
* ゼロクロッシング率を計算
*/
declare function getZeroCrossing(audio: AudioData, channel?: number): number;
/**
* 波形データ取得のオプション
*/
interface WaveformOptions {
/** 1秒あたりのサンプル数(解像度、デフォルト: 60) */
framesPerSecond?: number;
/** 解析するチャンネル(デフォルト: 0、-1で全チャンネルの平均) */
channel?: number;
/** 振幅の計算方法(デフォルト: 'rms') */
method?: 'rms' | 'peak' | 'average';
}
/**
* 波形データポイント
*/
interface WaveformPoint {
/** 時間位置(秒) */
time: number;
/** 振幅値(0-1) */
amplitude: number;
}
/**
* 波形データ取得結果
*/
interface WaveformResult {
/** 波形データポイントの配列 */
waveform: WaveformPoint[];
/** 最大振幅 */
maxAmplitude: number;
/** 平均振幅 */
averageAmplitude: number;
/** フレーム数 */
frameCount: number;
/** フレームあたりのサンプル数 */
samplesPerFrame: number;
}
/**
* 時間軸に沿った波形データを取得
*/
declare function getWaveform(audio: AudioData, options?: WaveformOptions): WaveformResult;
/**
* 新しいWaveform解析オプション(プログレス通知対応)
*/
interface WaveformAnalysisOptions extends ProgressOptions {
/** 1秒あたりのサンプル数(解像度、デフォルト: 60) */
framesPerSecond?: number;
/** 解析するチャンネル(デフォルト: 0、-1で全チャンネルの平均) */
channel?: number;
/** 振幅の計算方法(デフォルト: 'rms') */
method?: 'rms' | 'peak' | 'average';
}
/**
* 新しいPeaks解析オプション(プログレス通知対応)
*/
interface PeaksAnalysisOptions extends ProgressOptions {
/** 抽出するピークの数(デフォルト: 100) */
count?: number;
/** ピーク検出の閾値(0-1、デフォルト: 0.1) */
threshold?: number;
/** 解析するチャンネル(デフォルト: 0、-1で全チャンネルの平均) */
channel?: number;
/** 最小ピーク間距離(サンプル数、デフォルト: サンプルレート/100) */
minDistance?: number;
}
/**
* 新しいRMS解析オプション(プログレス通知対応)
*/
interface RMSAnalysisOptions extends ProgressOptions {
channel?: number;
asDB?: boolean;
reference?: number;
}
/**
* 新しいWaveform解析(Float32Array対応)
*/
declare function getWaveformAnalysis(audio: AudioData, options?: WaveformAnalysisOptions): WaveformAnalysisResult;
/**
* 新しいPeaks解析(Float32Array対応)
*/
declare function getPeaksAnalysis(audio: AudioData, options?: PeaksAnalysisOptions): PeaksAnalysisResult;
/**
* 新しいRMS解析(統一されたインターフェース)
*/
declare function getRMSAnalysis(audio: AudioData, options?: RMSAnalysisOptions): RMSAnalysisResult;
export { type Peak, type PeaksAnalysisOptions, type PeaksOptions, type PeaksResult, type RMSAnalysisOptions, type WaveformAnalysisOptions, type WaveformOptions, type WaveformPoint, type WaveformResult, getPeakAmplitude as getPeak, getPeakAmplitude, getPeaks, getPeaksAnalysis, getRMS, getRMSAnalysis, getWaveform, getWaveformAnalysis, getZeroCrossing };