@ audio/ encode- opus
将 PCM 音频样本编码为 Ogg Opus 格式 .
libopus WASM(单文件模块,没有侧文件——来自任何CDN,节点,工人和音频工作板的负载)与内置的Ogg muxer.
import opus from '@audio/encode-opus';
const encoder = await opus({ sampleRate: 48000, channels: 1, bitrate: 96 });
const chunk = encoder.encode(channelData); // → Uint8Array (Ogg pages)
const tail = encoder.flush(); // → Uint8Array (remaining + EOS)
// concatenate chunk + tail for complete Ogg Opus file
选项
| 选项 | 默认 | 说明 |
|---|---|---|
sampleRate | —— 说 | 输入抽样率(要求). 内部被复制到48kHz. |
channels | 1 | 1 (莫诺语)或 2 (语法) |
bitrate | 64 | 目标位元速率( kbps) |
application | 'audio' | 'audio', (中文(简体) ), 'voip',或 'lowdelay' |
complexity | 10 | libopus编码器工作,0-10 |
meta | —— 说 | VorbisComment 标签(title, (中文(简体) ), artist写入 OpusTags 中 |
Opus总是在48kHz编码. 将其他费率作为一流加以再模拟(多相飞行情报区,它的相和历史 跨块: 任何块编码,像一个块一样,样本的样本,准时.
流线
const encoder = await opus({ sampleRate: 44100, channels: 1, bitrate: 128 });
const a = encoder.encode(chunk1); // → Uint8Array (Ogg pages with headers)
const b = encoder.encode(chunk2); // → Uint8Array (Ogg audio pages)
const c = encoder.flush(); // → Uint8Array (final page + EOS)
// complete Ogg Opus = concat(a, b, c)
encoder.free();
许可证
原始数据包
集装箱粘剂直接以包编码器为基础(@audio/encode-webm ưμ㼯a
import { createOpusEncoder, createResampler, toOpusRate, FRAME } from '@audio/encode-opus/core'
let enc = await createOpusEncoder({ channels: 2, bitrate: 96 })
enc.lookahead // encoder delay in 48 kHz samples: Ogg pre-skip / Matroska CodecDelay
let pcm = toOpusRate(channelData, 44100) // a whole signal → interleaved 48 kHz float
let packet = enc.encode(pcm.subarray(0, FRAME * 2))
enc.free()
let rs = createResampler(44100, 2) // a chunked one: one stream
rs.write(chunk) // planar chunk → interleaved 48 kHz, what is ready
rs.flush() // the rest: round(n · 48000 / 44100) in all
