import { DuplicateDisposeAction, EnhancedDisposable, type EventRegister } from '@idlebox/common'; interface IRecorder { onDataAvailable: EventRegister>; onFinished: EventRegister; dispose(): void; } /** * TODO: 新api要求使用webworker 这里模拟worker */ export declare class RawPcmStreamNode extends EnhancedDisposable implements IRecorder { private readonly audioContext; private readonly bitDepth; private readonly latency; protected duplicateDispose: DuplicateDisposeAction; private readonly _onDataAvailable; readonly onDataAvailable: EventRegister>; /** * 由于AudioNode没有类似end的事件,只能用延迟模拟一个 */ private readonly _onFinished; readonly onFinished: EventRegister; /** * 被要求结束后,只有连续没有收到音频,才真正触发 onFinished * 这和决定录音何时结束无关 */ private readonly willFinish; private _node?; constructor(audioContext: AudioContext, bitDepth?: number, latency?: number); get bufferSize(): number; private _getNode; connectFrom(source: AudioNode): void; /** * 外部不要调用 * * 优雅结束 * @private */ shutdown(): void; } export declare class RawPcmStreamRecorder extends EnhancedDisposable { readonly bitDepth: number; readonly sampleRate: number; protected duplicateDispose: DuplicateDisposeAction; private readonly channels; private readonly dfd; constructor(bitDepth?: number, sampleRate?: number); get context(): AudioContext; private started?; /** * 开始录音(可以重复调用,返回相同) * stop之后不能重新start */ startRecording(latency?: number): Promise; private _microphone?; private _analyze?; private _recorder?; _startRecording(latency: number): Promise; private caclculateVolume; getPromise(): Promise & import("@idlebox/common").IProgressHolder; private hasClosed; private close_microphone; stopRecording(): Promise; } export {}; //# sourceMappingURL=pcm-recorder.d.ts.map