节肢动物
libsamplerate-js是一个港口 减肥 用于浏览器或节点。 这个 简单 API是复制大块音频的理想. 这个 满 API是快速再现从Websocket或WebRTC连接接收到的音频等更大型音频小部分(128+样本)的理想.
特征 :
安装
使用国家预防机制安装:
npm i @alexanderolsen/libsamplerate-js
见 使用量 或者说 API 密码 更多的例子和指示.
使用量
libsamplerate-js预计会收到Float32Array单相或多相道互放数据,其中每个样本为-1 < sample < 1.
在模块中:
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
});
或者说
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数字 :
// 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'
);
// 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 中:
<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 文件在 数字 文件夹 :
<script src="libsamplerate.js"></script>
API 参考
一旦你创造了JS包装器 create() 或者说 LibSampleRate.create(),返回对象会暴露:
simple
/**
* 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
/**
* 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
/**
* 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
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
转换器类型如下. 更多信息可在 自由模拟网站。 。 。 .
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
};
实例
节点
cd libsamplerate-js/examples/cli
node index.js 48000 result.wav
听听结果
网页
运行任何服务器( R)http-服务器项目目录中的:
cd libsamplerate-js
http-server
访问 当地主机:8080/实例/基本 或者说 当地主机:8080/实例/工人 在浏览器中。 实例和基准 必须是 主机来自根目录,因为他们需要访问文件 数字。 。 。 .
基准
了解在您环境中重新取样需要多长时间:
cd libsamplerate-js
http-server
访问 本地主机: 8080/ 基准. 提供最低限度的UI,以测试不同的批量尺寸、API、样本率和 ConverterType编号.
从源建置
在编译WASM代码之前,您需要 下载并安装 Empscripten 并激活当前终端的 PATH 变量。 从源头建立和汇编JS+WASM资源,运行:
git clone https://github.com/aolsenjazz/libsamplerate-js
cd libsamplerate-js
npm i
npm run compile-wasm
npm run build
您也可以用嵌入器构建( 要么从零开始, 要么从仅用相机) :
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。 。 。 .