Resampler
Resampler with WebAssembly.
Usage
Constructor
; /** * init resampler * @param { string } workerUrl worker url, no cross domain usually * @param { number } sampleRate target sample rate * @param { (chunk: Uint8Array) => void } onDataHandler resampler data callback * @param { Object } options config */var resampler = workerUrl sampleRate onDataHandler options;
options
option, config settings.
originalSampleRate
number, origin resample rate, default is the resample rate of browser context.
Methods
/** * init * @return { promise } */resampler; /** * append data * @param { Float32Array[] } buffers origin data, order by channel order, like: [0] channel1, [1] channel2 */resampler; /** * stop resampler */resampler;
Example
Usually, the resampleWorker.min.js
, resampleWorker.min.wasm
in dist folder need publish on the same domain for dynamic load.
// create resamplerconst resampler = '/public/worker/resampleWorer.min.js' // worker url, same domain 16000 // 16KHz target sample rate { // !!!chuck is the data after resampler to 16kHz }; // initawait resample; // feed dataresample; // buffers can be generate from AudioBuffer// like:/** const buffers: Float32Array[] = [];for (let i = 0; i < audioBuffer.numberOfChannels; i++ ) { buffers[i] = audioBuffer.getChannelData(i);} */
Cross Domain
Worker can cross domain, if your js only publish to cdn domain, you can fetch the Worker text data to load.
Like this:
// resampleWorker.min.js cdn urlconst workerUrl = 'http://cdnxxx/resampleWorker.min.js';// resampleWorker.min.wasm cdn urlconst webassemblyUrl = 'http://cdnxxx/resampleWorker.min.wasm'; // download worker text contentconst codeString = await ; // create local url, and change resampleWorker.min.wasm load urlconst localWorkerUrl = windowURL; // create resamplerconst resampler = localWorkerUrl 16000 {}; // initawait resample;