type RecorderStatus = 'idle' | 'recording' | 'processing'; type OnPcmDataAvailable = (pcmData: Float32Array) => void; interface UseVoiceRecorderReturn { isRecording: boolean; status: RecorderStatus; duration: number; error: string | null; startRecord: (onPcmData?: OnPcmDataAvailable) => Promise; stopRecord: () => Promise; cancelRecord: () => void; } /** * Convert raw PCM Float32Array to a WAV ArrayBuffer. */ declare function convertPcmToWav(pcmData: Float32Array, sampleRate?: number, channels?: number): ArrayBuffer; /** * Convert WebM/Opus blob to 16kHz mono WAV ArrayBuffer * via AudioContext decode + OfflineAudioContext resample. */ declare function convertWebmToWav(webmBlob: Blob): Promise; declare function useVoiceRecorder(): UseVoiceRecorderReturn; export { OnPcmDataAvailable, RecorderStatus, UseVoiceRecorderReturn, convertPcmToWav, convertWebmToWav, useVoiceRecorder };