@sapphi-red/speex-preprocess-wasm
Version:
WebAssembly build of SpeexDSP proprocess
105 lines (100 loc) • 3.71 kB
text/typescript
type I16Ptr = number
type SpeexPreprocessState = number
type SpeexPreprocessCtlRequest = number
/** @internal */
interface SpeexModule extends Pick<EmscriptenModule, 'wasmBinary' | 'locateFile' | '_free' | '_malloc' | 'HEAP16' | 'HEAP32' | 'HEAPF32'> {
/**
* Creates a new preprocessing state. You MUST create one state per channel processed.
* @param frame_size Number of samples to process at one time (should correspond to 10-20 ms). Must be
* the same value as that used for the echo canceller for residual echo cancellation to work.
* @param sampling_rate Sampling rate used for the input.
* @return Newly created preprocessor state
*/
_speex_preprocess_state_init(
frame_size: number,
sampling_rate: number
): SpeexPreprocessState
/**
* Destroys a preprocessor state
* @param st Preprocessor state to destroy
*/
_speex_preprocess_state_destroy(state: SpeexPreprocessState): void
/**
* Preprocess a frame
* @param st Preprocessor state
* @param x Audio sample vector (in and out). Must be same size as specified in speex_preprocess_state_init().
* @return Bool value for voice activity (1 for speech, 0 for noise/silence), ONLY if VAD turned on.
*/
_speex_preprocess_run(state: SpeexPreprocessState, x: I16Ptr): 1 | 0
/**
* Used like the ioctl function to control the preprocessor parameters
* @param st Preprocessor state
* @param request ioctl-type request (one of the SPEEX_PREPROCESS_* macros)
* @param ptr Data exchanged to-from function
* @return 0 if no error, -1 if request in unknown
*/
_speex_preprocess_ctl(
state: SpeexPreprocessState,
request: SpeexPreprocessCtlRequest,
void_: unknown
): -1 | 0
}
declare const loadModule: EmscriptenModuleFactory<SpeexModule>
type LoadOptions = Pick<SpeexModule, 'locateFile' | 'wasmBinary'>;
declare class SpeexPreprocessor {
private readonly speexModule;
readonly frameSize: number;
readonly samplingRate: number;
private readonly state;
private processBuffPtr;
private processI16Buff;
private ctlBuffPtr?;
constructor(speexModule: Readonly<SpeexModule>, frameSize: number, samplingRate: number);
private mallocCtlBuffPtr;
private ctl;
private ctlGetI32;
private ctlSetI32;
private ctlGetBool;
private ctlSetBool;
private ctlGetF32;
private ctlSetF32;
private ctlGetI32Array;
get denoise(): boolean;
set denoise(value: boolean);
get agc(): boolean;
set agc(value: boolean);
get vad(): boolean;
set vad(value: boolean);
get agcLevel(): number;
set agcLevel(value: number);
get probStart(): number;
set probStart(value: number);
get probContinue(): number;
set probContinue(value: number);
get noiseSuppress(): number;
set noiseSuppress(value: number);
get echoSuppress(): number;
set echoSuppress(value: number);
get echoSuppressActive(): number;
set echoSuppressActive(value: number);
get agcIncrement(): number;
set agcIncrement(value: number);
get agcDecrement(): number;
set agcDecrement(value: number);
get agcMaxGain(): number;
set agcMaxGain(value: number);
get agcLoudness(): number;
get agcGain(): number;
get psdSize(): number;
get psd(): Int32Array<ArrayBuffer>;
get noisePsdSize(): number;
get noisePsd(): Int32Array<ArrayBuffer>;
get prob(): number;
get agcTarget(): number;
set agcTarget(value: number);
private assertFrameSize;
processInt16(frame: Int16Array): boolean;
process(frame: Float32Array): boolean;
destroy(): void;
}
export { type LoadOptions, type SpeexModule, SpeexPreprocessor, loadModule as loadSpeexModule };