@audio/encode-webm (英语)
将 PCM 音频样本编码为 WebM (Opus) 格式.
WASM( libopus通过 libopus WASM 通过 @ audio/ encode- opus) 有内置的EBML/Matroska muxer——同时在节点和浏览器中工作.
import webm from '@audio/encode-webm';
const encoder = await webm({ sampleRate: 48000, channels: 1, bitrate: 96 });
const chunk = encoder.encode(channelData); // → Uint8Array (WebM header + cluster)
const tail = encoder.flush(); // → Uint8Array (final cluster)
// concatenate chunk + tail for complete WebM file
选项
| 选项 | 默认 | 说明 |
|---|---|---|
sampleRate | —— 说 | 输入抽样率(要求). 内部被复制到48kHz. |
channels | 1 | 1 (莫诺语)或 2 (语法) |
bitrate | 64 | 目标位元速率( kbps) |
application | 'audio' | 'audio', (中文(简体) ), 'voip',或 'lowdelay' |
Opus总是在48kHz编码. 其他费率被重新标注为一流 @ audio/ encode- opus复标器:任何块编码一个块的音频,样本.
输出使用未知大小的片段和集群(流出/活WebM),匹配 MediaRecorder 输出.
流线
const encoder = await webm({ sampleRate: 44100, channels: 1, bitrate: 128 });
const a = encoder.encode(chunk1); // → Uint8Array (EBML header + Segment + Tracks + first Cluster)
const b = encoder.encode(chunk2); // → Uint8Array (additional Cluster)
const c = encoder.flush(); // → Uint8Array (final Cluster with remaining samples)
// complete WebM = concat(a, b, c)
encoder.free();
许可证
最后一块块写在块组中 DiscardPadding,因此符合它的解码器(@audio/decode-webm,ffmpeg,浏览器)返回的样本与编码的一样多.
