@descript/web-audio-js

中文文档
0.15.3-patched.6发布于 2023/04/01MITTypeScriptESM + CJS近 30 天下载 1.5万

纯JS实施网络音频 API

中文使用文档
文档目录17 节
  1. 安装
  2. API 密码
  3. 类: StreamAudio Context
  4. 类: 提交审计文本
  5. 类: RawDataAudio Context
  6. 类: Web AudioContext
  7. 类: 离线审计文本
  8. 接口:音频数据
  9. 解码器
  10. 编码器
  11. 已执行 API
  12. 示例
  13. 在线演示
  14. 离线演示
  15. 在线基准
  16. 离线基准
  17. 许可证

@descript/web-audio-js (英语)

Node CI NPM Version License

《公约》执行情况 网络音频 API

叉子为 莫哈约瑙/网络-音频-引擎 修改如下:

  • 使用类型脚本并修正一些类型( T)5号(中文(简体) )
    • 删除 BaseAudioContext.suspend() (单位:千美元)6号(中文(简体) )
  • 添加新内容 RawDataAudioContext (单位:千美元)5号(中文(简体) )
  • 添加对支持 DynamicsCompressorNode (单位:千美元)1号(中文(简体) )
  • 错误修正
    • 用于 BiquadFilterNode 财务报告和审定财务报表 DelayNode (单位:千美元)8号(中文(简体) )
    • 修复 WAVE 文件解码( E)5号(中文(简体) )
    • 修补 AudioNode.disconnect(x) 不断开( n)7号(中文(简体) )

安装

npm install --save web-audio-engine

API 密码

web-audio-engine 提供一些 AudioContext 每个使用大小写:音频播放、渲染和模拟.

类: StreamAudio Context

StreamAudioContext 将原始 PCM 音频数据写入可写入的节点流 。 它可用于实时回放音频.

新建 StreamAudio Context( 选择? : 对象)

创建新的 StreamAudioContext 实例 .

  • opts.sampleRate: number 音频样本率(以赫兹为单位) - 默认: 44100
  • opts.numberOfChannels: number 音频频道(如2:立体声) - 默认: 2
  • opts.blockSize: number 每个渲染量子样本 - 默认: 128
  • opts.bitDepth: number 每个样本的位数 - 默认: 16
  • opts.float: boolean 使用浮点值 - 默认: 假
上下文.pipe(目的地:流. 写作:溪. 可写

: 构造工人: TODO: 书面诽谤

import { StreamAudioContext as AudioContext } from 'web-audio-engine';
const context = new AudioContext();

// Set the output for audio streaming
context.pipe(process.stdout);

// If you want to playback sound directly in this process, you can use 'node-speaker'.
// const Speaker = require("speaker");
// context.pipe(new Speaker());

// Start to render audio
context.resume();

// composeWith(context);

类: 提交审计文本

RenderingAudioContext 记录音频数据并进行分步处理。 它用于导出到 wav 文件或测试网络音频应用程序.

新建音频文本( 选择 ? : 对象)

创建新 RenderingAudioContext 举个例子.

  • opts.sampleRate: number 音频样本率(以赫兹为单位) - 默认: 44100
  • opts.numberOfChannels: number 音频频道(如2:立体声) - 默认: 2
  • opts.blockSize: number 每个渲染量子样本 - 默认: 128
上下文. processTo( 时间: 数字- 字符串)

执行渲染过程直到提供的时间.

  • time:例如:. 10 (10秒钟), "01:30.500" (转换为90.5秒)
上下文. exportAsAudioData (: AudioData) : 音频数据

将数据导出为 AudioData 格式.

上下文.encode AudioData(自动数据: AudioData, 选择?:obobject):承诺 < ArrayBuffer >

将音频数据编码为二进制格式.

  • audioData: AudioData
  • opts.bitDepth: number 每个样本的位数 - 默认: 16
  • opts.float: boolean 使用浮点值 - 默认: 假
import fs from 'fs';
import { RenderingAudioContext as AudioContext } from 'web-audio-engine';
const context = new AudioContext();

// composeWith(context);

context.processTo('00:01:30.000');
// context.currentTime -> 90.00054421768708

context.processTo('00:02:00.000');
// context.currentTime -> 120.00072562358277

const audioData = context.exportAsAudioData();

context.encodeAudioData(audioData).then((arrayBuffer) => {
  fs.writeFile('output.wav', new Buffer(arrayBuffer));
});

类: RawDataAudio Context

RawDataAudioContext 允许您同步步入音频Context。 用于流出输出 控制费率

新建 RawDataAudioContext( 选择? : 对象)

创建新 RenderingAudioContext 举个例子.

  • opts.sampleRate: number 音频样本率(以赫兹为单位) - 默认: 44100
  • opts.numberOfChannels: number 音频频道(如2:立体声) - 默认: 2
  • opts.blockSize: number 每个渲染量子样本 - 默认: 128
上下文. process(channelData: Float32Array[],相左:数字=0)

下一个 blockSize 音频样本输入 channelData。 。 。 .

import { RawDataAudioContext } from 'web-audio-engine';
const context = new RawDataAudioContext();
const { blockSize } = context;
const channelData = [
  new Float32Array(blockSize),
  new Float32Array(blockSize),
];

for (let i = 0; i < 100_000; i += blockSize)
  context.process(channelData);
  // Do something with channeLData
}

类: Web AudioContext

: 构造工人: TODO: 书面诽谤

新 WebAudioContext( 选择? : 对象)

创建新 WebAudioContext 举个例子.

  • opts.context?: AudioContext 本地网络音频 API 音频连接实例
  • opts.destination?: AudioNode - 说吧 默认: 选择. context.destination
  • opts.numberOfChannels: number 音频频道(如2:立体声) - 默认: 2
  • opts.blockSize: number 每个渲染量子样本 - 默认: 128
<script src="/path/to/web-audio-engine.js"></script>
<script>
  var context = new WebAudioEngine.WebAudioContext({
    context: new AudioContext(),
  });

  // composeWith(context);

  context.resume();
</script>

类: 离线审计文本

此上下文兼容 Natvie Web 音频 API OfflineAudioContext。 。 。 .

import { OfflineAudioContext } from 'web-audio-engine';
const context = new OfflineAudioContext(2, 44100 * 10, 44100);

// composeWith(context);

context.startRendering().then((audioBuffer) => {
  console.log(audioBuffer);
});

接口:音频数据

interface AudioData {
  numberOfChannels?: number;
  length?: number;
  sampleRate: number;
  channelData: Float32Array[];
}

解码器

默认解码器 web-audio-engine 只支持“wav”格式。 如果您需要支持其他音频格式,您需要自己准备解码器.

decoder.get(类型:字符串):函数

返回当前设置的解码功能.

decoder.set(类型:字符串,解码Fn:函数)

设置解码功能.

  • decodeFn: (audioData: ArrayBuffer, opts?: object) => Promise< AudioData > 解码来用.
decoder.decode (autioData: ArrayBuffer, 选取? 对象):承诺 < AudioData >

执行解码.

  • audioData: ArrayBuffer
mp3 解码器示例
import wae from 'web-audio-engine';
import mp3decoder from '/path/to/mp3decoder';
import fs from 'fs';
wae.decoder.set('mp3', mp3decoder);
const AudioContext = wae.RenderingAudioContext;
const context = new AudioContext();
const audioData = fs.readFileSync('amen.mp3');

context.decodeAudioData(audioData).then((audioBuffer) => {
  console.log(audioBuffer);
});

编码器

默认编码器 web-audio-engine 只支持“wav”格式。 如果您需要支持其他音频格式, 您需要自己准备编码器 .

编码器.get(类型:字符串):函数

返回当前设置的编码函数 .

编码器. set(类型:字符串,编码Fn:函数)

设置编码功能.

  • encodeFn: (audioData: AudioData, opts?: object) => Promise< ArrayBuffer > 所用编码.
encoder.encode(audioData: AudioData, options?: object): 保证 < ArrayBuffer >

执行编码.

  • audioData: AudioData
  • opts.type: string 音频格式类型 - 默认: "wav"
mp3 编码器示例
import wae from 'web-audio-engine';
import mp3encoder from '/path/to/mp3encoder';
import fs from 'fs';
wae.encoder.set('mp3', mp3encoder);
const AudioContext = wae.RenderingAudioContext;
const context = new AudioContext();
const audioData = context.exportAsAudioData();

context.encodeAudioData(audioData, { type: 'mp3' }).then((arrayBuffer) => {
  fs.writeFile('output.mp3', new Buffer(arrayBuffer));
});

已执行 API

  • AnalyserNode
  • AudioBuffer
  • AudioBufferSourceNode
  • AudioContext
  • AudioDestinationNode
  • AudioNode
  • AudioParam
  • BiquadFilterNode (不支持自动率参数)
  • ChannelMergerNode
  • ChannelSplitterNode
  • DelayNode (无声
  • DynamicsCompressorNode
  • GainNode
  • IIRFIlterNode
  • OscillatorNode (使用波状合成,不使用周期波)
  • PeriodicWave
  • ScriptProcessorNode
  • StereoPannerNode
  • WaveShaperNode
  • 其他未执行的节点将不加修改地将其输入传递给其输出.
  • 见: 比较 已执行节点图

示例

import Speaker from 'speaker';
import { StreamAudioContext as AudioContext } from 'web-audio-engine';
const context = new AudioContext();

const osc = context.createOscillator();
const amp = context.createGain();

osc.type = 'square';
osc.frequency.setValueAtTime(987.7666, 0);
osc.frequency.setValueAtTime(1318.5102, 0.075);
osc.start(0);
osc.stop(2);
osc.connect(amp);
osc.onended = () => {
  context.close().then(() => {
    process.exit(0);
  });
};

amp.gain.setValueAtTime(0.25, 0);
amp.gain.setValueAtTime(0.25, 0.075);
amp.gain.linearRampToValueAtTime(0, 2);
amp.connect(context.destination);

context.pipe(new Speaker());
context.resume();

在线演示

在线演示在这里。 在这个网站,你可以比较 web-audio-engine 和本地网络音频 API.

离线演示

$ git clone [email protected]:mohayonao/web-audio-engine.git
$ cd web-audio-engine
$ npm install && npm run build
$ cd demo
$ npm install
$ node demo --help

最简单的游戏演示 node-speaker。 。 。 .

$ node demo sines

渲染并导出到 wav 文件 .

$ node demo -o out.wav sines

在线基准

目前,这个基准在Chrome或Safari都行不通,请使用Firefox.

离线基准

$ git clone [email protected]:mohayonao/web-audio-engine.git
$ cd web-audio-engine
$ npm install && npm run build
$ cd benchmark
$ npm install
$ node .

许可证

麻省理工学院

版本与发布记录

@descript/web-audio-js 共发布 12 个版本,首次发布于 2019/12/13;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.15.3-patched.6latest2023/04/013 年前
0.15.3-patched.52021/10/265 年前
0.15.3-patched.42021/10/265 年前
0.15.3-patched.32021/10/265 年前
0.15.3-patched.22021/05/265 年前
0.15.3-patched.12021/05/265 年前

关于 @descript/web-audio-js 的常见问题

@descript/web-audio-js 是什么?

纯JS实施网络音频 API

如何安装 @descript/web-audio-js?

在项目目录运行 npm install @descript/web-audio-js,或使用 pnpm add / yarn add / bun add。

@descript/web-audio-js 支持 TypeScript 吗?

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

@descript/web-audio-js 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@descript/web-audio-js 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 12.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@descript/web-audio-js 可以商用吗?

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

@descript/web-audio-js 的下载量有多少?

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

@descript/web-audio-js 还在维护吗?

最新版本 0.15.3-patched.6 发布于 2023/04/01(3 年前);至今共发布 12 个版本,其中过去 12 个月发布了 0 个;首次发布于 2019/12/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。