Package Exports
- node-web-audio-api
- node-web-audio-api/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (node-web-audio-api) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
node-web-audio-api
Nodejs bindings for
orottier/web-audio-api-rs
usingnapi-rs
Install
npm install [--save] node-web-audio-api
Example
const { AudioContext, OscillatorNode, GainNode } = require('node-web-audio-api');
const audioContext = new AudioContext();
setInterval(() => {
const now = audioContext.currentTime;
const env = new GainNode(audioContext);
env.connect(audioContext.destination);
env.gain.value = 0;
env.gain.setValueAtTime(0, now);
env.gain.linearRampToValueAtTime(1, now + 0.02);
env.gain.exponentialRampToValueAtTime(0.0001, now + 1);
const osc = new OscillatorNode(audioContext);
osc.frequency.value = 200 + Math.random() * 2800;
osc.connect(env);
osc.start(now);
osc.stop(now + 1);
}, 50);
or using with EcmaScript module syntax
import wabaudioapi from 'node-web-audio-api';
const { AudioContext, OscillatorNode, GainNode } = webaudioapi;
const audioContext = new AudioContext();
//...
Caveats
- Currently the library does not provide any way of chosing the output interface, system default interface will be used. As the spec and web-audio-api evolve evolve, thus should change in the future see https://github.com/orottier/web-audio-api-rs/issues/216
- On Linux systems, the audio backend is Alsa, this is subject to change in the future.
Raspberry Pi
On Raspberry Pi, the default render quantum size (128) is too small and underruns occurs frequently. To prevent that you should provide a latency hint when building an audio context:
const audioContext = new AudioContext({ latencyHint: 'playback' });
The 'playback' latency hint, 1024 samples / ~21ms at 48000Hz, has been found a good value.
Supported Platforms
binaries | tested | |
---|---|---|
Windows x64 | ✓ | |
Windows arm64 | ✓ | |
macOS x64 | ✓ | ✓ |
macOS aarch64 | ✓ | |
Linux x64 gnu | ✓ | |
Linux arm gnueabihf (RPi) | ✓ | ✓ |
Manual Build
If prebuilt binaries are not shippped for your platform, you will need to:
- Install rust toolchain
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Install and build from github
npm install --save git+https://github.com/b-ma/node-web-audio-api.git
cd node_modules/node-web-audio-api
npm run build
The package will then be built on your machine, which might take some time
Known limitation / caveats
- async function are not trully async but only monkey patched on the JS side, this will
be updated once
web-audio-api-rs
provide async version of the methods. - see
web-audio-api-rs
Development notes
The npm script rely on cargo-bump
to maintain version synced between
the package.json
and the Cargo.toml
files. Therefore, you will need to install
cargo-bump
on your machine
cargo install cargo-bump
License
This project is licensed under the BSD-3-Clause license.