pcm-resampler
TypeScript icon, indicating that this package has built-in type declarations

1.2.4 • Public • Published

Resampler

Resampler with WebAssembly.


Usage

Constructor

import Resampler from 'pcm-resampler';
 
/**
 * 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 = new 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.init();
 
/**
 * append data
 * @param { Float32Array[] } buffers origin data, order by channel order, like: [0] channel1, [1] channel2
 */
resampler.feed(buffers);
 
/**
 * stop resampler
 */
resampler.destroy();

Example

Usually, the resampleWorker.min.js, resampleWorker.min.wasm in dist folder need publish on the same domain for dynamic load.

// create resampler
const resampler = new Resampler(
  '/public/worker/resampleWorer.min.js', // worker url, same domain
  16000, // 16KHz target sample rate
  (chunk: Uint8Array) => {
    // !!!chuck is the data after resampler to 16kHz
  },
);
 
// init
await resample.init();
 
// feed data
resample.feed(buffers);
 
// 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 url
const workerUrl = 'http://cdnxxx/resampleWorker.min.js';
// resampleWorker.min.wasm cdn url
const webassemblyUrl = 'http://cdnxxx/resampleWorker.min.wasm';
 
// download worker text content
const codeString = await fetch(workerUrl).then(res => res.text());
 
// create local url, and change resampleWorker.min.wasm load url
const localWorkerUrl = window.URL.createObjectURL(new Blob([`
  var Module = {
    locateFile: function(s) {
      return '${webassemblyUrl}';
    }
  };
  ${codeString}
`], {
  type: 'application/javascript',
}));
 
// create resampler
const resampler = new Resampler(localWorkerUrl, 16000, () => {});
 
// init
await resample.init();

Readme

Keywords

Package Sidebar

Install

npm i pcm-resampler

Weekly Downloads

1

Version

1.2.4

License

MIT

Unpacked Size

79 kB

Total Files

7

Last publish

Collaborators

  • pancnlz