@descript/web-audio-js (英语)
《公约》执行情况 网络音频 API
叉子为 莫哈约瑙/网络-音频-引擎 修改如下:
- 使用类型脚本并修正一些类型( T)5号(中文(简体) )
- 删除
BaseAudioContext.suspend()(单位:千美元)6号(中文(简体) )
- 删除
- 添加新内容
RawDataAudioContext(单位:千美元)5号(中文(简体) ) - 添加对支持
DynamicsCompressorNode(单位:千美元)1号(中文(简体) ) - 错误修正
安装
npm install --save web-audio-engine
API 密码
web-audio-engine 提供一些 AudioContext 每个使用大小写:音频播放、渲染和模拟.
类: StreamAudio Context
StreamAudioContext 将原始 PCM 音频数据写入可写入的节点流 。 它可用于实时回放音频.
新建 StreamAudio Context( 选择? : 对象)
创建新的 StreamAudioContext 实例 .
opts.sampleRate: number音频样本率(以赫兹为单位) - 默认: 44100opts.numberOfChannels: number音频频道(如2:立体声) - 默认: 2opts.blockSize: number每个渲染量子样本 - 默认: 128opts.bitDepth: number每个样本的位数 - 默认: 16opts.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音频样本率(以赫兹为单位) - 默认: 44100opts.numberOfChannels: number音频频道(如2:立体声) - 默认: 2opts.blockSize: number每个渲染量子样本 - 默认: 128
上下文. processTo( 时间: 数字- 字符串)
执行渲染过程直到提供的时间.
time:例如:.10(10秒钟),"01:30.500"(转换为90.5秒)
上下文. exportAsAudioData (: AudioData) : 音频数据
将数据导出为 AudioData 格式.
上下文.encode AudioData(自动数据: AudioData, 选择?:obobject):承诺 < ArrayBuffer >
将音频数据编码为二进制格式.
audioData: AudioDataopts.bitDepth: number每个样本的位数 - 默认: 16opts.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音频样本率(以赫兹为单位) - 默认: 44100opts.numberOfChannels: number音频频道(如2:立体声) - 默认: 2opts.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.destinationopts.numberOfChannels: number音频频道(如2:立体声) - 默认: 2opts.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: AudioDataopts.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
AnalyserNodeAudioBufferAudioBufferSourceNodeAudioContextAudioDestinationNodeAudioNodeAudioParamBiquadFilterNode(不支持自动率参数)ChannelMergerNodeChannelSplitterNodeDelayNode(无声DynamicsCompressorNodeGainNodeIIRFIlterNodeOscillatorNode(使用波状合成,不使用周期波)PeriodicWaveScriptProcessorNodeStereoPannerNodeWaveShaperNode- 其他未执行的节点将不加修改地将其输入传递给其输出.
- 见: 比较 已执行节点图
示例
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 .
许可证
麻省理工学院