# @alexanderolsen/libsamplerate-js 中文文档

规范地址：https://npmcn.com/package/%40alexanderolsen/libsamplerate-js/

版本：2\.1\.2
npm 元数据更新时间：2024-08-16T18:26:05.415Z
中文译文更新时间：2026-11-05T17:29:27.892Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40alexanderolsen/libsamplerate-js
原文对照：https://npmcn.com/package/%40alexanderolsen/libsamplerate-js/?lang=original
项目主页：https://github.com/aolsenjazz/libsamplerate-js
源码仓库：https://github.com/aolsenjazz/libsamplerate-js

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：4.1 MB，11 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2021-01-13T00:54:45.314Z
- 最新版本发布：2024-08-16T18:26:05.237Z
- 近 30 天下载量：301991（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：27（近 12 个月 0 个）

## 中文简介

在节点或浏览器中使用 libsamplerate 的网络组装端口来重取音频.

## 安装

```sh
npm install @alexanderolsen/libsamplerate-js
```

也可以使用：`pnpm add @alexanderolsen/libsamplerate-js`、`yarn add @alexanderolsen/libsamplerate-js`、`bun add @alexanderolsen/libsamplerate-js`

## README

# 节肢动物

![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/aolsenjazz/libsamplerate-js/build.yml?branch=main) [![Coverage Status](https://coveralls.io/repos/github/aolsenjazz/libsamplerate-js/badge.svg?branch=main)](https://img.shields.io/coveralls/github/aolsenjazz/libsamplerate-js) [![Maintainability](https://api.codeclimate.com/v1/badges/61ceec2449f7ab6a5ca2/maintainability)](https://codeclimate.com/github/aolsenjazz/libsamplerate-js/maintainability) [![Depfu](https://badges.depfu.com/badges/fb337ab1dda45e0d1ad17ab8f8572445/overview.svg)](https://depfu.com/github/aolsenjazz/libsamplerate-js?project_id=21222)

libsamplerate-js是一个港口 [减肥](http://www.mega-nerd.com/SRC/) 用于浏览器或节点。 这个 [简单](http://www.mega-nerd.com/SRC/api_simple.html) API是复制大块音频的理想. 这个 [满](http://www.mega-nerd.com/SRC/api_full.html) API是快速再现从Websocket或WebRTC连接接收到的音频等更大型音频小部分(128+样本)的理想.

#### 特征 :

-   在浏览器和节点都起作用了!
-   1-128频道
-   1-192000年抽样率
-   减肥 [满](http://www.mega-nerd.com/SRC/api_full.html) 财务报告和审定财务报表 [简单](http://www.mega-nerd.com/SRC/api_simple.html) APIs 密码
-   见 自由模拟文件 对于更多的(和更好的)信息

## 安装

使用国家预防机制安装:

```bash
npm i @alexanderolsen/libsamplerate-js
```

见 **使用量** 或者说 **API 密码** 更多的例子和指示.

## 使用量

libsamplerate-js预计会收到Float32Array单相或多相道互放数据,其中每个样本为-1 < sample < 1.

### 在模块中:

```javascript
import { create, ConverterType } from '@alexanderolsen/libsamplerate-js';

let converterType = ConverterType.SRC_SINC_BEST_QUALITY;
let nChannels = 2;
let inputSampleRate = 44100;
let outputSampleRate = 48000;

create(nChannels, inputSampleRate, outputSampleRate, {
  converterType: converterType, // default SRC_SINC_FASTEST. see API for more
}).then((src) => {
  let data = new Float32Array(44100);
  let resampledData = src.simple(data);
  src.destroy(); // clean up
});
```

或者说

```javascript
const LibSampleRate = require('@alexanderolsen/libsamplerate-js');

let converterType = LibSampleRate.ConverterType.SRC_SINC_BEST_QUALITY;
let nChannels = 2;
let inputSampleRate = 44100;
let outputSampleRate = 48000;

LibSampleRate.create(nChannels, inputSampleRate, outputSampleRate, {
  converterType: converterType, // default SRC_SINC_FASTEST. see API for more
}).then((src) => {
  let data = new Float32Array(44100);
  let resampledData = src.full(data);
  src.destroy(); // clean up
});
```

### 单位 `AudioWorklets`数字 :

```javascript
// project.js
const audioContext = new AudioContext({ sampleRate: 44100 });
await audioContext.audioWorklet.addModule('processor.js');
// You can also bundle libsamplerate.worklet.js with your own application; cdn link provided for convenience
await audioContext.audioWorklet.addModule(
  'https://cdn.jsdelivr.net/npm/@alexanderolsen/libsamplerate-js/dist/libsamplerate.worklet.js'
);
```

```javascript
// processor.js
const { create, ConverterType } = globalThis.LibSampleRate;

let nChannels = 1;
let inputSampleRate = 44100;
let outputSampleRate = 16000; // or another target sample rate

// somewhere in the declaration of your Processor:
create(nChannels, inputSampleRate, outputSampleRate, {
  converterType: ConverterType.SRC_SINC_BEST_QUALITY, // or some other quality
}).then((src) => {
  this.src = src;
});
```

充分执行的例子见实例/工作。 配置 libsamplate-js 工作于 `AudioWorklets` 它比它应该做的要小 `AudioWorklet` 限制. _请注意,在音频Worldlets中,打字支持对于LibSampleRate来说是不可更改的._

### 在 HTML 中:

```html
<script src="https://cdn.jsdelivr.net/npm/@alexanderolsen/libsamplerate-js"></script>
<script>
  var converterType = LibSampleRate.ConverterType.SRC_SINC_BEST_QUALITY;
  var nChannels = 2;
  var inputSampleRate = 44100;
  var outputSampleRate = 48000;

  LibSampleRate.create(nChannels, inputSampleRate, outputSampleRate, {
    converterType: converterType, // default SRC_SINC_FASTEST. see API for more
  }).then((src) => {
    var data = new Float32Array(44100);
    let resampledData = src.full(data);
    src.destroy(); // clean up
  });
</script>
```

或使用 libsamplerate.js 文件在 _数字_ 文件夹 :

```html
<script src="libsamplerate.js"></script>
```

## API 参考

一旦你创造了JS包装器 `create()` 或者说 `LibSampleRate.create()`,返回对象会暴露:

### `simple`

```javascript
/**
 * Calls the libsamplerate `simple` API. This should be used when resampling one individual chunk of audio,
 * and no more calls to are required. If more calls are required, use the `full` API. If the array submitted
 * is > 4MB, audio will be broken up into chunks and the `full` API will be used
 *
 * More (and better) info available at: http://www.mega-nerd.com/SRC/api_simple.html
 *
 * @param  {Float32Array}         dataIn  Float32Array containing mono|interleaved audio data where -1 < dataIn[i] < 1
 * @return {Float32Array}                 The resampled data
 */
simple(dataIn) { ... }
```

### `full`

```javascript
/**
 * Calls the libsamplerate `full` API. This should be used when resampling several chunks of the
 * sample audio, e.g. receiving a live stream from WebRTC/websocket API.
 *
 * More (and better) info available at: http://www.mega-nerd.com/SRC/api_full.html
 *
 * @param {Float32Array}      dataIn              Float32Array containing mono|interleaved audio data where -1 < dataIn[i] < 1
 * @param {Float32Array|null} dataOut             Optionally, pass a Float32Array to avoid allocating an extra array for every esampling operation
 * @param {Object|null}       outLength           Amount of data written to dataOut
 * @param {number}            [outLength.frames]  The number of frames in the output

 * @return {Float32Array} The resampled data. If dataOut != null, dataOut is returned
 */
full(dataIn, dataOut=null, outLength = null) { ... }
```

### `destroy`

```javascript
/**
 * Cleans up WASM SRC resources. Once this is called on an instance, that instance must be
 * reinitialized with src.init() before it can be used again.
 */
destroy() { ... }
```

### 更新 `outputSampleRate` 打开 `inputSampleRate`

```javascript
let nChannels = 2;
let inputSampleRate = 44100;
let outputSampleRate = 48000;

create(nChannels, inputSampleRate, outputSampleRate).then((src) => {
  let data = new Float32Array(44100);
  let resampled48k = src.simple(data); // returns ~48000 samples
  src.outputSampleRate = 96000;
  let resampled96k = src.simple(data); // returns ~96000 samples
});
```

### `ConverterType`

转换器类型如下. 更多信息可在 [自由模拟网站](http://www.mega-nerd.com/SRC/api_misc.html#Converters)。 。 。 .

```javascript
const ConverterType = {
  SRC_SINC_BEST_QUALITY: 0, // highest quality, slowest
  SRC_SINC_MEDIUM_QUALITY: 1, //
  SRC_SINC_FASTEST: 2, // in-between
  SRC_ZERO_ORDER_HOLD: 3, // poor quality, "blindingly" fast
  SRC_LINEAR: 4, // poor quality, "blindingly" fast
};
```

## 实例

### 节点

```bash
cd libsamplerate-js/examples/cli
node index.js 48000 result.wav
```

听听结果

### 网页

运行任何服务器( R)[http-服务器](https://www.npmjs.com/package/http-server)项目目录中的:

```bash
cd libsamplerate-js
http-server
```

访问 _当地主机:8080/实例/基本_ 或者说 _当地主机:8080/实例/工人_ 在浏览器中。 实例和基准 **必须是** 主机来自根目录,因为他们需要访问文件 _数字_。 。 。 .

## 基准

了解在您环境中重新取样需要多长时间:

```bash
cd libsamplerate-js
http-server
```

访问 _本地主机: 8080/ 基准_. 提供最低限度的UI,以测试不同的批量尺寸、API、样本率和 `ConverterType`编号.

## 从源建置

在编译WASM代码之前,您需要 [下载并安装 Empscripten](https://emscripten.org/docs/getting_started/downloads.html) 并激活当前终端的 PATH 变量。 从源头建立和汇编JS+WASM资源,运行:

```bash
git clone https://github.com/aolsenjazz/libsamplerate-js
cd libsamplerate-js
npm i
npm run compile-wasm
npm run build
```

您也可以用嵌入器构建( 要么从零开始, 要么从仅用相机) :

```bash
git clone https://github.com/aolsenjazz/libsamplerate-js
cd libsamplerate-js
git submodule update --init
cd scripts/library/
docker build -t gcc-emscripten .
cd ../../
npm run compile-library-docker
npm run compile-wasm-docker
npm run build
```

制作文件放在 _数字_ 目录.

## 捐款

欢迎拉动请求。 对于重大变动,请先开出一个问题来讨论你想要改变什么.

## 许可证

许可证有: `LICENSE.md`。 。 。 .

## 常见问题

### @alexanderolsen/libsamplerate-js 是什么？

在节点或浏览器中使用 libsamplerate 的网络组装端口来重取音频\.

### 如何安装 @alexanderolsen/libsamplerate-js？

在项目目录运行 npm install @alexanderolsen/libsamplerate-js，或使用 pnpm add / yarn add / bun add。

### @alexanderolsen/libsamplerate-js 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @alexanderolsen/libsamplerate-js 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @alexanderolsen/libsamplerate-js 可以商用吗？

@alexanderolsen/libsamplerate-js 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @alexanderolsen/libsamplerate-js 的下载量有多少？

根据 npm 官方下载统计，@alexanderolsen/libsamplerate-js 在 2026/10/06 – 2026/11/04 这 30 天内被下载 301,991 次，日均约 10,066 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @alexanderolsen/libsamplerate-js 还在维护吗？

最新版本 2\.1\.2 发布于 2024/08/17（2 年前）；至今共发布 27 个版本，其中过去 12 个月发布了 0 个；首次发布于 2021/01/13。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

