Opus 1.6.1 · 可审计模型档案¶
当前结论:D0–D5 passed;下一步是 Codec 2 D0 · freeze official identity, standards/primary technical sources, 1200/2400/3200 modes, binaries, license and existing local artifacts。 每个 Gate 只建立该 Gate 明示的证据;D5 passed 表示冻结共同 benchmark 已完整归档和审计,不表示存在全局赢家或 D6/D7 已完成。 D0 只证明身份、来源和本地 artifact 一致;后续 Gate 的通过不会反向扩大 D0 的证据边界。
Gate 状态¶
| Gate | 状态 |
|---|---|
| D0 | passed |
| D1 | passed |
| D2 | passed |
| D3 | passed |
| D4 | passed |
| D5 | passed |
| D6 | not_started |
| D7 | not_started |
D0 · 身份、标准与本地 artifact¶
| 项目 | 冻结身份 |
|---|---|
| 主论文/规范/资料 | Definition of the Opus Audio Codec · RFC6716 |
| 规范更新 | RFC8251 |
| 官方实现 | https://github.com/xiph/opus · v1.6.1 / 22244de5a79b |
| 本地环境 | Darwin 26.5 · arm64 · Apple M5 |
| 学习参数/模型状态 | 4986 / 4986 bytes(int8 analysis weights embedded in fixed source;无外部 checkpoint) |
| 已冻结运行 artifact | 8 个,共 1,146,416 bytes |
| 当前公共点 | 6 kbps, 12 kbps, 24 kbps · application=audio · signal hint=voice · hard CBR · 20 ms |
冻结范围与明确排除¶
-
不纳入当前身份:
- WebRTC-specific integration and jitter buffer
- RTP transport headers, FEC recovery policy and network congestion control
- platform codecs that do not expose the same libopus/opus-tools artifact identity
Primary-source manifest¶
| ID | 作用 | bytes | SHA-256 |
|---|---|---|---|
| RFC6716 | normative codec syntax and decoder | 977,743 | 41caac5240a4a22661efd0031d5b7aee48f3c0bde3b2cdcee8165932e485f98c |
| RFC8251 | normative decoder/security/quality corrections | 23,578 | 86abdb8c0fa1b0b6e1b9c1f324163ca152a8d2d9debd10461da3d56438489ecd |
| RFC7845 | storage container used by current local and D5 artifacts | 81,168 | c2e6041543a315c4944a8cdf47be7c701fae70f380868d8d538f35b6edb08edd |
| RFC7587 | real-time packetization boundary; not the current Ogg artifact | 41,770 | 5afdf22d62f11900166b1b3781c483f429ccb4addebd841b3fa8b77708ff5662 |
Source releases and licenses¶
| Artifact | revision | bytes | SHA-256 | license |
|---|---|---|---|---|
| opus-1.6.1.tar.gz | v1.6.1 / 22244de5a79bd1d6d623c32e72bf1954b56235be |
10,472,813 | 6ffcb593207be92584df15b32466ed64bbec99109f007c82205f0194572411a1 |
BSD-3-Clause plus upstream patent-grant notice |
| opus-tools-0.2.tar.gz | v0.2 / 0c1337f57e5b87fd23421904303fed3e575ce354 |
457,680 | b4e56cb00d3e509acfba9a9b627ffd8273b876b4e2408642259f6da28fa0ff86 |
BSD-2-Clause for opusenc/opusdec; opusinfo exception is GPL-2.0 |
| libopusenc-0.3.tar.gz | v0.3 / 0dba1bea736ab8bb811409dce80c994a00a2ced9 |
408,391 | f616d3aff9b2034547894ccb8ab56c36cf1a4acb0d922c5d7119f97bbe58642c |
BSD-3-Clause |
Installed encoder/decoder identity¶
| Artifact | bytes | SHA-256 | resolved path |
|---|---|---|---|
opusenc |
107,344 | 0610028c7444f664ff57204b9cf7f82dce5e612b525f709013a39c35cdbadf06 |
/opt/homebrew/Cellar/opus-tools/0.2_2/bin/opusenc |
opusdec |
90,560 | fdefdac1f4db11fcacbcce389d38d6e779226c4aa4e58f58669f8aa9d5a6259f |
/opt/homebrew/Cellar/opus-tools/0.2_2/bin/opusdec |
libopus |
373,744 | 98dcd3cc62c6cf913b789051536ab246c56cc163c74bd8b4968ac467ec74b68b |
/opt/homebrew/Cellar/opus/1.6.1/lib/libopus.0.dylib |
libopusenc |
74,816 | f0d004c0e130bedc962beae927c4ca6f9a1bf8f13daa7eaf18227304f88bcd61 |
/opt/homebrew/Cellar/libopusenc/0.3/lib/libopusenc.0.dylib |
libflac |
277,360 | 43e9f5c4af2d64a866ffaefb756e8978e7b6c90e6bdc3fe2403737103f7890cc |
/opt/homebrew/Cellar/flac/1.5.0/lib/libFLAC.14.dylib |
libogg |
72,032 | 5c34fd5e4637d0f5d2997f333e3b19d3f9583243673499f81ee7be7d0067b62c |
/opt/homebrew/Cellar/libogg/1.3.6/lib/libogg.0.8.6.dylib |
libopusurl |
75,168 | 6f793aa4da8e33f6392260fcc228c221270e179931aa067d13a9f6015dca3125 |
/opt/homebrew/Cellar/opusfile/0.12_1/lib/libopusurl.0.dylib |
libopusfile |
75,392 | d64f568ac7c8013cb0fb056aacf152712f97f0b2d4da2561d741417bd8433641 |
/opt/homebrew/Cellar/opusfile/0.12_1/lib/libopusfile.0.dylib |
表示与计账边界¶
- codec 表示:Opus packets whose TOC and frame coding are defined by RFC 6716/RFC 8251;
- 当前存储/传输 artifact:Ogg Opus logical bitstream produced by opusenc and parsed under RFC 7845;
- 分账规则:report Opus audio packet bytes, Ogg header/container bytes, total serialized bytes and shared endpoint software separately;
- source-blind decoder:true;
- 不能由 D0 推出的结论:algorithmic understanding beyond identity fields;bit-exact conformance to the normative decoder;paper/standard evaluation reproduction;quality, intelligibility, latency or Pareto superiority;network behavior under packet loss, FEC, jitter or congestion。
D1 · 规范与论文深读:Opus 不是一个算法,而是一组可切换的表示¶
D1 结论:passed。 本章已经把 RFC 6716/8251、SILK/CELT 作者论文、Opus 官方 comparison 页面、Google 两轮听测、Nokia Interspeech 论文和 RFC 8251 conformance vectors 固定到文件哈希,并拆成 51 条有类型、有定位的主张。D1 的通过表示“知道资料说了什么、证据 边界在哪里”;不表示 libopus 1.6.1 已复现作者听测,也不表示公共多语 Benchmark 已完成。
一句话心智模型¶
Opus 的第一性原理不是“找到一个万能压缩空间”,而是承认语音低频、语音高频和音乐具有不同的 可压缩结构,然后在一个兼容码流内组合三种工作方式:
SILK 把人声看成“短时声道滤波器 + 周期性声源 + 感知整形后的激励”;CELT 把声音看成“临界带 能量包络 + 单位球面上的谱形状”;Hybrid 则不让两者争夺同一频段,而是在 8 kHz 处分工。 这不是 neural mixture-of-experts,却已经具备 conditional representation 的核心思想:根据信号和 约束选择表示,而不是让所有内容服从一个几何空间。[OPUS-P-001–OPUS-P-003, OPUS-I-006]
规范到底定义什么¶
规范化的是 decoder,不是 encoder 品质¶
RFC 6716 的法律边界非常清楚:附录中的参考 C 源码是唯一规范性的符号表示,其中只有 decoder 是 normative。文字解释服务于理解;若文字与源码冲突,以参考实现为准。decoder 中大量 fixed-point 取整、range coder 状态和重建次序必须精确,但 encoder 仍可改变模式判断、搜索策略、带宽选择、 复杂度和码率分配,只要产生合法码流。[OPUS-S-001]
因此“复现 Opus 标准”和“复现 Opus 音质”是两个任务:
- decoder conformance:固定
.bit,检查最终 range state,再用opus_compare对参考.dec; - encoder quality:必须固定 encoder 版本、application、complexity、VBR/CBR、frame duration、 bandwidth、FEC/DTX、语料、anchor、听者和统计方法。
RFC 的 opus_compare quality 不是 ViSQOL、MOS 或一般音质指标。它测的是一个 decoder 与参考
decoder 的接近程度;quality 100 表示逐样本相同,0 是通过阈值。一个实现可以因为无害相位或
resampler 差异而降低该值,也可以通过向量却拥有很差的 encoder。把它写成“Opus 音质 100”会是
类别错误。[OPUS-S-009, OPUS-I-001]
RFC 8251 又更新了部分规范行为。新版向量有 12 个输入 bitstream,并为 intensity stereo 的 180-degree phase choice 提供两套 decoded output;通过原 RFC 6716 向量或新版之一都可合规,但 新版实现应优先基于新版向量。D4 因而有一个真正严格、公开、无需听者的官方复现入口。 [OPUS-S-010, OPUS-S-011]
packet、frame、container 和 transport 是四个对象¶
Opus frame 可为 2.5、5、10、20、40 或 60 ms;多个兼容 frame 可放入最长 120 ms 的 packet。 packet 的 TOC byte 编码 config、mono/stereo 与 frame-count code。普通内部 framing 并不自定界, 长度由 RTP、UDP、Ogg、Matroska 等下层交付。[OPUS-S-004, OPUS-S-005]
这直接约束 EvoSpeech 的码率口径:
--hard-cbr 约束的是 codec packet budget,不会消灭 Ogg 页头、OpusHead/OpusTags、短文件尾页和
文件摊销。D2 必须沿 libopus -> opus-tools -> Ogg parser 逐层确认;D5 必须同时报告 audio packet、
container overhead 和 serialized total。[OPUS-S-008, OPUS-I-005]
“支持网络”不等于 clean WAV round-trip¶
Opus 可以调节跨帧依赖,用 in-band FEC 把关键 speech 的低率描述放进后续 packet,用 DTX 在静音 期降到每 400 ms 一帧,并用 PLC、transition redundancy 与状态重置处理丢包和模式切换。 [OPUS-S-006, OPUS-S-007, OPUS-P-007, OPUS-P-016]
当前项目的 Ogg 文件横评不会自然触发 jitter buffer、乱序、延迟等待、FEC recovery 或 RTP header。 所以 clean-file D5 可以比较重建与资源,但不能声称评完了 Opus 的实时通信能力。[OPUS-I-003]
SILK¶
SILK 路径主要用于低码率 speech,内部以 8/12/16 kHz 工作,支持 10/20/40/60 ms frame。其 5 ms look-ahead 用于 noise-shaping estimation,重采样最多再引入约 1.5 ms。独立 Skype SILK 与 Opus 内的 SILK 已有重大、不兼容修改,不能把两个名字相同就视为相同 artifact。 [OPUS-P-002]
1. 先判断“这段像什么”¶
VAD 从四个频带的能量/背景估计合成 speech activity;可变高通在约 60-100 Hz 之间去掉呼吸和低频 背景,cutoff 受低频 SNR 与 pitch 影响。pitch analysis 先用 LPC whitening 减少强单一谐波的支配, 再降到 8/4 kHz 做粗到细 lag 搜索,最后在原内部采样率上选 pitch lag 与 5 ms subframe contour。 复杂度旋钮会改变 whitening order、候选数和 trellis 状态,因此“同一 bitrate”并没有完全指定 encoder computation。[OPUS-P-004]
2. 分开“预测准确”与“误差放哪里”¶
短期 LPC 描述 vocal tract spectral envelope,LTP 描述 voiced speech 的周期性。Opus 没有只用 prediction error 最小化作为感知目标,而是让 noise-shaping analysis 单独决定 quantization noise 的谱形状:预测器负责省 bits,noise shaping 负责让剩余误差更不显眼。低码率时可加强 harmonic shaping,避免噪声落入谐波之间。[OPUS-P-005]
这是一条值得带入神经 codec 的设计纪律:representation efficiency 和 perceptual allocation 可以 共享系统,但不必由一个 loss/latent 隐式承担。以后原创 baseline 若只优化 waveform/mel 总误差, 可能错过这种明确的“误差预算控制面”。
3. excitation 与参数如何进入码流¶
Noise Shaping Quantizer 用 delayed-decision trellis 在预测/整形环路里找更低 rate-distortion 的激励。 整数 pulse 以 16-sample block 做层级 sum/split/sign range coding。LSF 先用 32-entry vector stage, 再做 inter-LSF predictive scalar stage;residual scaling 近似补偿不同维度的 sensitivity。 [OPUS-P-006]
stereo 先编码 mid,再把 side 分成低/高频,分别由对应 mid band 做 scalar prediction。所有 voice 参数与 excitation 共用 range coder,避免多个子码流的 padding 浪费。[OPUS-P-008]
4. 丢包后的恢复不是 decoder 事后魔法¶
长时 pitch predictor 会把一次错误传播到后续 packet。作者没有永久缩小 LTP coefficients,而在 packet 开头 downscale LTP state,让额外 residual bits 集中在第一个 pitch period,随后更快回到 正确状态。论文 Figure 6 是一个简化的零状态 LTP 响应实验,不是完整网络主观测评;它说明机制, 不能被宣传为真实丢包 MOS 已证明。[OPUS-P-007]
CELT¶
CELT 主要服务 music、高码率 speech 或超低延迟,内部恒定 48 kHz。它的基础不是“对 MDCT 系数 逐点量化”,而是先保住听觉临界带的能量包络,再在每个 band 内分配 bits 表示 normalized shape。 [OPUS-P-009, OPUS-P-010]
1. 低 overlap 是延迟选择,不是免费午餐¶
所有 frame size 都只用 2.5 ms symmetric overlap。它比 full-overlap transform 降低 delay,也让 transient 处理更直接,但会增加 tonal signal 的 spectral leakage。encoder 用 pre-emphasis,decoder 用 inverse de-emphasis;pitch prefilter/postfilter 又对 harmonic content 做时域处理。 [OPUS-P-009, OPUS-P-015]
遇到 transient,encoder 将 long transform 改为多个交错 short MDCT,降低 pre-echo。对非 transient, 还可以改变某些 basis 的 time-frequency resolution。由此可见“固定 20 ms frame”仍不等于内部 时间分辨率完全固定。[OPUS-P-013]
2. band energy 是主干,shape 是剩余自由度¶
CELT 对 band energy 做粗细两级 quantization;coarse energy 可做跨 band 和跨 frame prediction。 随后 encoder 与 decoder 运行相同的 bit-exact allocation,按剩余 budget 在 band 间分配自由度, 避免发送完整 scalefactor/floor curve。实际 entropy 消耗的偏差会传递给后续 band,从而精确落在 总 frame budget 内。[OPUS-P-011]
shape 归一化后用 Pyramid Vector Quantization。PVQ codevector 是在 N 维中放置 K 个 signed pulses 的整数向量,再归一化到 unit sphere。energy 和 direction 被结构性拆开,说明 Opus 的离散表示也 不是一串等价 token:band energy、allocation、pulse positions/signs 具有不同语义和脆弱性。 [OPUS-P-012]
3. 低码率伪影被显式命名和处理¶
当某 band 没有 shape bits,decoder 可从低 band spectral folding;当 transient 的某个 short block 完全没有 pulse,anti-collapse 用前两帧最小 band energy 量级的伪随机噪声填洞。spreading rotation 用 Givens rotation 把稀疏 pulse 扩散,减少 birdies;pitch postfilter、time-frequency change 和 collapse prevention 各自针对一种失败模式。[OPUS-P-014, OPUS-P-015]
这比一个“总体 perceptual loss”更容易审计:每个 mechanism 都对应可以构造的 breaker。未来 AI 进化不应只提交更低 aggregate score,也可以提交针对 tonal birdie、pre-echo、spectral hole、 pitch smearing 的最小反例与修复。
Hybrid¶
Hybrid 并不是把 SILK latent 和 CELT latent 在同一频段平均。SILK 以 16 kHz 工作并编码 0-8 kHz; CELT 丢弃 8 kHz 以下 bands,编码高频到 SWB/FB 上限;decoder 统一采样率后相加。两层共享 entropy coder,因此 SILK 的 VBR 消耗可以由 CELT 使用剩余 bits 补成最终 CBR。[OPUS-P-003]
两个 look-ahead 也不相同:SILK 约 5 ms 加 resampler,CELT 固有 2.5 ms。Hybrid 的 CELT encoder 路径再延迟,使低频/高频同步。若 application 强制 CELT-only,可避免为 SILK 对齐而增加的延迟, 但会改变低率 speech efficiency。所谓“Opus latency”必须绑定 mode、frame 和 application,不能 只写一个数字。[OPUS-S-003]
Nokia 2011 的曲线直观展示了条件化的价值:低 rate clean speech 中 LP 最强,约 20-40 kbit/s 的 SWB/FB speech 中 Hybrid 更稳定,更高 rate/music 则 MDCT/CELT 逐渐占优。但这些曲线来自 2011 代码、20 ms frame、特定 Finnish 条件,适合解释机制,不是 2026 的通用模型排行榜。 [OPUS-A-009, OPUS-A-010, OPUS-I-002]
官方怎样评测¶
Opus 没有一个能概括全部官方证据的 evaluation.json。官方 comparison 页面只收录 final bitstream
tests,并明确说它们代表标准化/1.0 时期;新版 encoder 可能更好。页面顶端的 quality-vs-bitrate
landscape 还主动警告:图中混有 listening tests 与 anecdotal evidence,不应提取精确 rate 分数。
[OPUS-B-001, OPUS-B-002]
A. decoder conformance:严格、公开,但不测感知排名¶
| 项目 | 官方定义 | D3/D4 定位 |
|---|---|---|
| 输入 | RFC 8251 archive 中 12 个 .bit |
exact |
| 参考 | 每个输入的普通与 m downmix reference |
exact |
| 运行 | 5 个 output rate,支持的 mono/stereo | exact |
| 判定 | range state + opus_compare threshold |
exact |
| 能证明 | decoder 与规范兼容 | 不能推出 encoder quality |
B. Google 2011 第一轮:英语 speech + stereo music¶
三组 MUSHRA-type 测试都在 Windows PC/headphones 上完成。NB 与 WB/FB speech 各有 3 male + 3 female、17 listeners、3.5/7 kHz low-pass anchors;music 有 10 clips、9 listeners。[OPUS-A-001]
| 条件 | 作者报告的 aggregate score | 只能怎样解读 |
|---|---|---|
| Opus NB 11 kbps VBR | 55.6 | 当时优于列出的 iLBC 15.2 与 Speex 11 [OPUS-A-002] |
| Opus WB 20 kbps VBR | 77.9 | 当时高于 G.722.1 24、Speex 24、AMR-WB 20 [OPUS-A-003] |
| Opus FB 32 kbps CBR | 97.2 | 接近该测试 original 99.3 [OPUS-A-003] |
| Opus stereo 64/80/128 | 90.7/91.7/95.5 | deck 将其与 MP3 96、AAC-LC 64 判为相等,并高于 G.719 [OPUS-A-004] |
deck 没有给出我们完成严格重放所需的统一 stimulus archive、每票数据、完整 screening code 与 每个 historical binary identity。数字可以录入“作者报告”,不能伪造本地 error bar。
C. Google 2011 第二轮:中文 coding + 英语 transcoding¶
这轮对项目特别重要,因为它反证了“经典 codec 官方只测英语”的想当然。Mandarin NB 和 WB/FB 各用 4 male + 4 female,其中一半来自 ITU-T P.501、一半由 Google 录制;21/19 名筛选后中文 母语听者进行 MUSHRA-type headphone test。Opus 11 kbps 报 77.9,iLBC 15 为 76.8;Opus 20/32 为 81.6/98.1。[OPUS-A-005, OPUS-A-006]
同一 deck 另做 English NB/WB transcoding,显式比较 G.711、AMR 与 Opus 的先后级联,而不是拿 single encode 替代 cascade。这个实验思路应被 D5/D7 吸收:通信系统常经历会议录制、平台转码、 剪辑再次编码,单次重建并不覆盖该损伤。[OPUS-A-007]
D. Nokia Interspeech 2011:Finnish clean/noisy MOS¶
Nokia 用 24 naive listeners、4 male + 4 female、clean 与 8 类 noise、9-step extended ACR MOS。 每个 condition 在 clean/noisy 各约 200 votes;样本随机呈现,每人约 600 次评分。测试固定 20 ms frame,并用 2011 年 2 月代码。作者结论是 Hybrid 在 20-40 kbit/s 提供 excellent voice quality, 图中 LP/Hybrid/MDCT 的 crossover 则支持“模式依条件变化”。[OPUS-A-008–OPUS-A-010]
这是 Finnish evidence,不等于 Finnish 字词/实体正确率。MOS 测总体体验,可能对一个自然但改词的 输出给高分;我们的多语内容合同仍需 CER/WER/关键实体与人工听写。
E. AES music / HydrogenAudio:64 kbps 与 cascading¶
作者论文报告 13 listeners、30 stereo music samples、BS.1116-1、64 kbps VBR,比较 Opus v0.9.2、 Apple/Nero HE-AAC 与 AoTuV Vorbis。Figure 11 中 Opus 约 4.0,Apple HE-AAC 约 3.75,另两项约 3.44;作者的 resampling-based max(T) 分析给出 Opus 优于其余对照的 confidence >99.9%。 [OPUS-A-011, OPUS-A-012]
cascading 则是 PQevalAudio/PEAQ basic-model 诊断,不是同一主观分数;作者报告重复编码时 Opus 曲线优于所测 MP3/Vorbis,并展示 5 ms frame 低于 20 ms frame。D3 必须把 subjective 64 kbps 与 objective cascading 分成两个 claim family。[OPUS-A-013]
证明了什么、没证明什么¶
当前 encoder 还有一个很小、但不能漏记的 learned prior¶
Opus 官方 1.1 演示页已经明确描述过 speech/music detector:从信号特征进入 neural network,再结合 时间信息;其 mode threshold 随 bitrate、bandwidth、frame size 与 application 变化。这是 1.1 的 历史设计说明,不应被当作 1.6.1 的精确结构图。[OPUS-B-003]
固定源码的 D2 审计进一步确认,libopus 1.6.1 当前实现是 25→32 dense → 32→24 GRU → 24→2
dense,src/mlp_data.c 共内嵌 4,986 个 int8 learned weights/biases。默认 complexity 10 的 float
encoder 会执行它;--speech 只会改变部分输出的使用方式,不会跳过 feature extraction 与网络。
所以正确表述是:Opus normative decoder 不需要外部 checkpoint,但当前 libopus encoder 不是零学习
参数。 这也说明“传统 codec / neural codec”不是非黑即白的分类。
已有较强一手支持¶
- Opus 的 decoder、packet grammar、三模式与 conformance 规则是公开标准,不依赖外部 checkpoint;
- 预测与 transform 的分工、Hybrid 频带切分、隐式 bit allocation、PVQ 与 artifact-control tools 都有 RFC 和作者论文双重解释;
- 标准化时期存在英语、Mandarin、Finnish、speech、music 与 transcoding 的多样主观证据;
- 作者证据显示 Opus 在当时选定 rate/protocol/baseline 上有很强质量,并非只有项目自测支持。
尚未建立¶
- libopus 1.6.1 在相同素材上等于历史 aggregate score;
- historical stimuli、raw votes、screening 与所有 baseline binaries 足以 strict replay;
- 德/法/西/日/韩表现,或 Mandarin/Finnish 的现代 semantic preservation;
- clean Ogg 文件能够代表 packet loss、FEC、DTX、PLC、jitter 与 RTP;
- 6/12/24 kbps 下对所有现代 neural codec、所有内容和所有 latency 都更好;
- aggregate MUSHRA/MOS 能替代 content、speaker identity、expression、overall 四维合同。
尤其不能把标准化时期的强结果写成“Opus 是当前 SOTA”。它是必须保留的传统强锚点:低计算、 成熟 packet contract、可精确 conformance、强实时机制。是否在某个 2026 Pareto slice 上领先, 必须由同语料、同真实码率、同延迟和同评估器重测。[OPUS-I-002, OPUS-I-004]
对 EvoSpeech 的启发¶
- 表示可以按信号机制分治。 未来 baseline 不应先假设一个 latent/tokenizer 统治 speech、music、 voiced/unvoiced 与 transient;可以比较显式 expert、content-conditioned routing 或频带分工。
- decoder contract 先于 encoder 搜索。 Opus 允许 encoder 创新但严守 decoder/bitstream,正适合 AI 进化:候选可改 encoder/search,评估器独立解析 payload,decoder 仍 source-blind。
- 真实 bit budget 要进入算法。 CELT 的 allocation 不是事后压缩统计,而是在 encode loop 中 根据剩余 bits 逐 band 决策。原创系统也应将 bytes 当硬状态,而非训练后估算 entropy。
- 每种伪影都可成为 Breaker。 pre-echo、birdies、collapse、pitch error、loss propagation 都有 针对性 mechanism;自动科研可以围绕 failure taxonomy 产生反例,不必只爬一个平均指标。
- robustness 是表示与 packet 的联合设计。 FEC、state downscale、transition redundancy 与 DTX 不是外部网络插件。神经 codec 若只在 clean waveform 上强,可能错过通信任务的核心。
- 官方结果也必须 version-conditioned。 “论文自称”只是 claim ledger 起点;只有 current artifact 在冻结协议下的本地结果才能进入我们的 comparison table。
- 跨语言不能靠模型无文本输入来推断。 官方中文/芬兰语数据是好先例,但我们仍需公开标准 多语集,分别测感知、ASR/CER/WER 与关键实体。
D1 形成的 D3/D4 入口¶
| claim family | D1 判定 | D3 必须冻结 | 预期 verdict |
|---|---|---|---|
| RFC 8251 decoder vectors | 官方 artifact 完整 | libopus build、opus_demo/opus_compare、rate/channel matrix |
exact |
| TOC/frame/packet accounting | RFC 完整、当前 Ogg parser 已存在 | raw packet bytes、container bytes、malformed cases | exact |
| 2011 Google English/Mandarin MUSHRA | aggregate deck 公开 | stimulus/votes/binaries/screening 资产审计 | likely blocked/aggregate-only |
| Nokia Finnish MOS | paper protocol与图公开 | exact clips、votes、2011 binary availability | likely blocked/aggregate-only |
| AES/HydrogenAudio 64 kbps | protocol、版本、aggregate 公开 | official results/stimuli/raw ratings availability | approximate or blocked |
| PEAQ cascading | 方法与曲线公开 | PQevalAudio identity、clips、cascade commands | approximate candidate |
| current libopus 1.6.1 public benchmark | 项目已有部分 D5 evidence | public corpus manifest、合法 rate knobs、objective/content/resource metrics | exact project protocol |
| packet-loss/FEC/PLC | 标准机制公开但项目未测 | loss model、jitter/FEC wait policy、RTP accounting | separate robustness protocol |
D2 下一步不是继续总结论文,而是进入 fixed commit 22244de5...:从 opus_encode_native() 的
application/config decision 追到 SILK/CELT/hybrid 分支、range coder、opus_decode_native(),再穿过
opusenc 的 Ogg serialization 与项目 parser。只有 paper-to-code map 和最小 trace 通过,D3 才会
冻结复现协议。[OPUS-I-008]
Primary-source artifact manifest¶
| Source | pages / bytes | SHA-256 | 用途 |
|---|---|---|---|
| RFC 6716 | 977,743 B | 41caac5240a4a22661efd0031d5b7aee48f3c0bde3b2cdcee8165932e485f98c |
normative codec/decoder |
| RFC 8251 | 23,578 B | 86abdb8c0fa1b0b6e1b9c1f324163ca152a8d2d9debd10461da3d56438489ecd |
normative updates |
| Voice Coding with Opus | 10 pp / 1,159,773 B | b49e02c82bc35d50262d4e0aa76cd9bac5adb82cba926bdc1481894e584beab7 |
SILK/voice design |
| High-Quality, Low-Delay Music Coding | 10 pp / 1,026,707 B | a2220426982b12c305552c47457f9a5a35239b9e42fa56d8f8786525aa23ef7a |
CELT/music design |
| Official comparison page | 5,929 B | 77326a010159fd162b8ccd1d52983b1e912ddfc5885f8d9efebe361a8e407dc7 |
official evidence index/caveat |
| Opus 1.1 demo | 35,619 B | af66e38a486cb8da0d574f292cc63e85b56d7b1d1ac29dfdc4c88ada8f092f14 |
historical learned speech/music detector |
| Google Test 1 | 7 pp / 136,006 B | 5c6670e9ef41d87eeda272e563af5485b2344017bbd6e22bf7cfe2ab8c4d4026 |
English speech/music tests |
| Google Test 2 | 10 pp / 2,764,435 B | 55dbe18c8121a49ff24c29fd5a35d3b7b241dd8edfbbdb31b4f33ae70ba3e8e6 |
Mandarin/transcoding tests |
| Nokia Interspeech 2011 | 4 pp / 291,540 B | 798a925f4fa8dd058c258968232124d43b611d08c00874db82761e525cf75f83 |
Finnish clean/noisy MOS |
| RFC 8251 vectors | 74,624,664 B | 6b26a22f9ba87b2b836906a9bb7afec5f8e54d49553b1200382520ee6fedfa55 |
exact decoder conformance |
两篇 AES 论文、Google 两份 deck 与 Nokia 四页论文均已逐页渲染并视觉核对;text extraction 只用于
定位,没有代替图、表、error bar 和脚注的人工检查。结构化逐条证据见
research/models/opus/paper_claims.json。
D2 · 核心代码深读:Opus 不是一个固定网络,而是一台逐包换挡的编码器¶
D2 结论:passed。 本轮固定并交叉阅读了三个真正参与本地路径的上游版本:
libopus v1.6.1(commit22244de…35be)、libopusenc v0.3(commit0dba1bea…ed9)和opus-tools v0.2(commit0c1337f5…354)。 22 个关键源码文件已逐文件 SHA-256 绑定;17 个 paper-to-code mechanisms 在research/models/opus/code_map.json,可重放真实 Ogg/Opus 包追踪在research/models/opus/measurements/code_trace.json。这一 Gate 证明机制、控制流和字节合同, 不评价音质。
为什么要读三个仓库,而不是只读 libopus¶
项目实际执行的不是“调用某个 Opus 模型”这么简单。完整链条是:
EvoSpeech adapter
→ opusenc 0.2 读取音频、解释 CLI 选项
→ libopusenc 0.3 重采样、look-ahead、granule、Ogg 封装
→ libopus 1.6.1 真正编码 Opus packet
→ libopusenc Ogg packer OpusHead / OpusTags / audio packets
→ serialized .opus
→ opusdec 0.2 → libopus 1.6.1 source-blind decode
若只审 libopus,会漏掉两个影响实验身份的事实。第一,16 kHz 输入不是直接按 16 kHz 喂给
Opus encoder;libopusenc 创建 48 kHz encoder,并用内置 Speex resampler 把输入送到 48 kHz。
第二,实验文件不是裸 Opus packet,而是 Ogg Opus logical stream,文件大小含 OpusHead、
OpusTags、page header、lacing、granule position 和结尾裁剪信息。
本轮也因此补齐了 D0 当时只做动态库身份、但没有固定源码 release 的 libopusenc 0.3:官方
release tarball 为 408,391 bytes,SHA-256
f616d3aff9b2034547894ccb8ab56c36cf1a4acb0d922c5d7119f97bbe58642c,tag v0.3 指向
0dba1bea736ab8bb811409dce80c994a00a2ced9。
一个重要纠错:--speech 不等于 OPUS_APPLICATION_VOIP¶
旧记录把选中路径写成 selected_d5_application = speech,这个说法看似自然,源码上却不成立。
opus-tools/src/opusenc.c 的 --speech 最终调用:
它只是告诉 encoder“输入更可能是语音”,帮助非规范 encoder 作模式与带宽决策。真正创建
encoder 的 libopusenc/src/opusenc.c 则明确传入:
所以本项目的准确身份是:
application 与 signal 是两个独立控制轴。前者会影响 encoder 的设计约束和模式偏好;后者是内容
先验。把二者混成“speech application”,不仅是文案问题,也会让他人用低延迟 VoIP application
复跑出不同包。D2 已回补 record.json、D0 measurement generator 与本地 identity measurement。
真实 encoder 调用链:先算条件,再选择算法¶
opus_encode_native 是单流编码核心。它先把用户 bitrate、channel、frame rate、VBR/CBR、FEC、
packet-loss expectation 等换算为 equiv_rate;若 signal 被固定为 voice,voice_est 直接倾向
语音,否则可由 analysis 估计。随后它结合当前与上一包状态,以 hysteresis 作 mode 和 bandwidth
决策。
这说明 Opus 与一个固定前向神经网络的心智模型完全不同:
当前 PCM + rate + frame + signal + loss policy + previous mode
→ mode/bandwidth/channel decision
→ SILK-only | Hybrid | CELT-only
→ range-coded packet
选择不是写死的“6 kbps 必定 SILK、24 kbps 必定 Hybrid”。rate 是强条件,但输入内容、上一个包、 带宽和 encoder policy 都会改变结果。为防止把一个 probe 的观测误写成普遍规律,本地 trace 只把 mode count 定位为 content-conditional execution evidence。
当 frame 超过内部可直接处理的长度时,顶层还能拆分、递归编码并经 repacketizer 合包。我们冻结的 20 ms 路径不触发长帧递归,但 D4 的 RFC vector 可能包含不同 frame packing,不能用 D2 的 20 ms 假设解析所有标准向量。
SILK 路径:编码参数与激励,不是压缩波形采样点¶
在 SILK-only 或 Hybrid 模式下,顶层把低频信号交给 silk_Encode。silk/enc_API.c 负责多声道
状态、internal sample rate、payload duration、prefill、LBRR/FEC 和 range coder 的接口协调;
更深层的分析和量化实现 D1 中读到的预测式结构:
- 内部工作率在 8/12/16 kHz 之间选择;
- 短期 LPC 描述谱包络,长期 pitch predictor 描述周期性;
- noise-shaping analysis 决定量化误差在时频上的可感知位置;
- delayed-decision trellis quantization 编码 excitation;
- LSF、gain、pitch 和 pulse 等参数进入共同 range coder;
- 若配置 packet loss/FEC,可将 LBRR 信息写进随后 packet。
SILK 输出不是项目可以拿来当“离散 tokenizer index”的统一矩阵。它是一组按语音统计结构设计、 又经 range coding 组合的参数与激励语法;不同 frame、bandwidth、voice activity 和 FEC policy 下, 内部字段的存在与预算都会变。因此 EvoSpeech 以后若从 Opus 学习,最值得借鉴的是“按信号结构选择 足够表示”,而不是硬把 Opus packet 解释成固定 rate 的 token lattice。
本地 deterministic probe 在 6 kbps 的 51 个音频包全部是 SILK-only narrowband;12 kbps 的 51 个 包全部是 SILK-only wideband。这证明选中路径确实执行 SILK 分支,但不证明自然语音、音乐或其他 说话人必然得到相同 mode distribution。
CELT 路径:MDCT、critical-band energy 与 PVQ¶
CELT 核心入口是 celt_encode_with_ec。它固定在 48 kHz 域处理,先做 pitch prefilter 与 transient
analysis;根据 transient 决策使用长 MDCT 或交织短 MDCT,再进行 band energy、allocation、
normalized spectral shape 与 range coding。
quant_all_bands 是 D1 论文机制在代码里的关键汇合点。encoder 与 decoder 共享相同的 band
allocation 和递归 partition 逻辑,减少必须显式发送的选择;alg_quant / alg_unquant 则实现
pyramid vector quantization:用有限个有符号 pulse 表示归一化 band shape。能量与 shape 分开不是
实现偶然,而是明确的感知建模选择——先保住 spectral envelope,再在剩余预算中描述细节。
CELT 还包含 folding、anti-collapse、spreading rotation、time-frequency resolution 等条件路径。 这些机制解释了为什么单报“MDCT codec”远远不够:创新主要在预算分配、预测、归一化与量化几何, 而不是是否调用了一个 transform。
D2 的 16 kHz synthetic probe 没观察到 CELT-only 包,因此我们只把 CELT 主路径标记为 source-verified。D4 不能据此宣称 CELT 没有执行价值;标准向量和音乐/高码率协议需要覆盖它。
Hybrid:不是交叉淡化,而是低高频分工¶
Hybrid 同时运行两套编码器:SILK 负责低于约 8 kHz 的语音主干,CELT 从高频 band 开始工作。 两者共享同一个顶层 packet 与 range coder budget;decoder 把 SILK 输出重采样到共同 rate,再与 CELT 高频输出相加。跨 mode 切换时还可写入 redundant CELT frame,降低不连续。
这不是“两个完整重建做平均”,也不是 learned mixture-of-experts 的 soft gating。它是频带职责明确、 按包切换的结构化专家组合。D2 probe 的 24 kbps run 很能说明这一点:51 个等长包中 45 个是 SILK-wideband,6 个是 Hybrid-fullband。同一个文件、同一个 nominal rate、同一套 controls,算法 仍能逐包换挡。
这给 Minimum Sufficient Speech 一个比“纯 low-bit”更本质的启发:表示预算应追随当前信号需要。 但 Opus 的 mode selector 是人工设计 encoder policy,并不是学习出来的 universal sufficiency criterion;它只能作为结构先验或强 baseline,不能直接当成项目问题的答案。
一秒 trace:真正的 TOC、packet 和 decode 合同¶
Trace 输入是一秒确定性三分量 PCM16 waveform,不含外部语音或质量样本。PCM SHA-256 为
e98c7887…5582,WAV SHA-256 为 c3cbab24…14f。三档都运行两次,固定 Ogg serial 为 1,并验证
整个 .opus 文件逐 byte 相同。
| nominal | audio packets | 每包 bytes | 实际 mode / bandwidth | audio bytes | Ogg bytes | 非 audio Ogg bytes |
|---|---|---|---|---|---|---|
| 6 kbps | 51 | 15 | 51 SILK / NB | 765 | 1,137 | 372 |
| 12 kbps | 51 | 30 | 51 SILK / WB | 1,530 | 1,903 | 373 |
| 24 kbps | 51 | 60 | 45 SILK/WB + 6 Hybrid/FB | 3,060 | 3,433 | 373 |
每个包经 opus_packet_get_nb_frames 验证只有一帧,每帧 960 个 48-kHz samples,即 20 ms;channel
全部为 mono。6/12/24 kbps 的 15/30/60 B 正好满足:
为什么一秒输入却有 51 个包?Ogg Opus 需要编码 look-ahead,并用 pre_skip=312 个 48-kHz samples
和 end granule 把输出裁回原长。opusdec --rate 16000 的实际输出在三档都恰好是 mono、16-bit、
16,000 samples。不能拿 51 × 20 ms 就断言用户听到 1.02 秒,也不能在算短文件码率时偷偷丢掉
look-ahead 产生的 packet 或 Ogg bytes。
TOC 也暴露了一个容易写错的细节。部分包低两位的 frame-count code 为 3,但公开 API 仍解析出
一帧。code 3 表示使用显式 framing,可同时携带 frame count 和 padding;它不等于“必定三帧”。
手写解析器若直接把低两位当帧数,会对真实 hard-CBR packet 读错。项目 trace 因此调用固定
libopus.0.dylib 的官方 opus_packet_get_* helpers,而不是只靠 Python 位运算猜测。
true CBR、公平 bitstream 与 Ogg overhead¶
--hard-cbr 最终设置 OPUS_SET_VBR(0),因此音频 packet budget 确实固定。它不保证文件总长严格
等于 nominal bitrate:文件还必须带两个 header packets、Ogg page framing、lacing、vendor string、
granule position,以及短输入的 pre-skip/end handling。
所以当前 accounting 继续坚持四层:
- Opus audio packet bytes;
- Ogg container/header bytes;
- EvoSpeech 外层 payload header 与 serialized total;
- 预共享 endpoint software footprint。
6 kbps probe 的 765 audio bytes 和 1,137 Ogg bytes 都是真实数字,各自回答不同问题。前者回答
codec packet budget;后者回答这个一秒文件实际传输/存储多少。D5 在句子较长时 overhead 会摊薄,
但不得删除。与 EnCodec .evc 一样,公平 evaluator 只相信实际 artifact byte count,不相信
candidate 自报的 nominal rate。
decoder:由 bitstream 决定分支,而不是猜输入内容¶
opus_decode_native 首先通过 packet helper 和 opus_packet_parse_impl 得到 frame duration、bandwidth、
channels 与 frame pointers,再依据 TOC 的 mode 配置进入 SILK、Hybrid 或 CELT。SILK 与 CELT 各自
更新 range decoder,顶层组合 transition redundancy,并保存 final range state。
当 data == NULL 或请求 decode_fec 时,执行路径会进入 PLC/FEC,而不是普通 clean decode。
这些分支在源码存在不等于 D2 已验证网络韧性:本轮没有删包、重排、延迟或构造 RTP。D3 必须先冻结
loss schedule、FEC enablement、receiver delay 与统计单位,D4 才能评价恢复效果。
标准把 decoder 作为 normative 目标,这与“当前 libopus encoder 的决策最好”是两件事。RFC vector 要求比较 reference output 与 final range,可以确定一个 decoder 是否按规范解释 bitstream;它完全 不能证明当前 encoder 在同码率下比另一个 codec 好。这也是 D3/D4 必须拆成 conformance track 和 quality-evidence track 的原因。
运行状态、内嵌分析网络与可选神经模块必须三分¶
运行时 API 实测 mono encoder state 为 31,668 bytes,mono decoder state 为 18,468 bytes。这些主要是
预测历史、滤波器 memory、range coder 和 mode state,属于 working memory,不能登记成 learned
weights。但进一步审计 opus_sources.mk、analysis.c、mlp.c 与 mlp_data.c 后,D0/D2 原来的
“零学习参数”结论被推翻:普通 float build 总会编入一个小型 content-analysis network。
当前 1.6.1 的精确结构和参数账是:
| layer | learned scalars | 计算 |
|---|---|---|
| dense 25→32 | 832 | 800 weights + 32 bias |
| GRU 32→24 | 4,104 | 2,304 input + 1,728 recurrent + 72 bias |
| dense 24→2 | 50 | 48 weights + 2 bias |
| 合计 | 4,986 | 全部为 source-embedded int8 |
run_analysis() 先算 dense,再算 GRU,最后输出 activity probability 与 music probability。GRU 的
24 个 float recurrent state(96 bytes)是动态工作状态,不是 learned prior;4,986 个 int8 arrays 才是
学习参数和 4,986 bytes 模型状态。opus_encoder.c 在 float build、16–48 kHz 且 complexity ≥7 时调用
分析;本地默认 complexity 为 10,所以 D5 选中路径会执行它。
--speech 也不会把网络短路。voice hint 会让后续 voice_est 不再采用 music probability 的自动
speech/music 混合值,但 analysis 已经运行,其 detected bandwidth、activity、peak/DTX 等结果仍可参与
encoder decision。因此准确身份是:无外部 checkpoint,但存在 source-embedded learned prior。
这和可选的大型神经增强模块是另一回事。源码 1.6.1 还包含 DRED、deep PLC 和 OSCE;逐项核对
configure.ac、Homebrew formula 与 ABI stub 后确认:
- autotools 的
--enable-dred、--enable-deep-plc、--enable-osce默认均为no; - Homebrew formula 没有开启三者;
- DRED API 入口虽被无条件导出,未启用时函数体只是
OPUS_UNIMPLEMENTEDstub。
以后若显式启用 DRED/OSCE,它必须成为新的 model point,重新冻结 build、权重和协议;但不能再用 “它们没启用”推出整个 libopus endpoint 零参数。
代码审计发现的五个 release gap¶
- decoder normative,encoder 不 normative。 当前 encoder source 很完整,但标准没有冻结其 decision policy;不能用 conformance 替代历史主观质量复现。
- clean Ogg 文件不等于实时系统。 RTP、jitter buffer、congestion control 和明确 loss timeline 均不在当前路径;FEC/DTX/PLC 只是未执行能力。
- 源码 release 不含完整历史听测资产。 codec code 不能补出每个 stimulus、听者 vote、screening script 与 dated baseline binary;D3 要逐资产裁决可复现级别。
- 内嵌小网络与可选大网络是两个身份层。 4,986-parameter analysis GRU 已执行;DRED、 deep-PLC、OSCE 未启用。二者都不能被另一方的状态代替。
--speech的名字会诱导错误身份。 它是 signal hint,不是 VoIP application;协议必须分别 记录application=audio与signal_hint=voice。
这些 gap 不是“Opus 不完整”的笼统批评,而是明确告诉后续 Gate 哪些问题可由当前 release 回答、 哪些必须另设实验、哪些只能标为受限复现。
项目 adapter 与官方表示的边界¶
codecs_/opus_payload.py 没有改 SILK、CELT、mode selector 或 decoder。它做四件评估基础设施工作:
- 用 ffmpeg 冻结输入为 mono 16 kHz PCM16;
- 用固定 hashes 的
opusenc/libopusenc/libopus生成真正 Ogg Opus; - 解析 Ogg packet,把 audio bytes 和 container bytes 分账;
- 把 Ogg artifact 放入带 runtime hashes、rate、duration 和 source-blind contract 的 EvoSpeech wrapper, decoder 只看 wrapper 内的 Ogg bytes。
因此项目 payload 可以用于公平竞技场,但它不是新的 codec format,也不能把 Ogg bytes 冒充裸 RTP
payload。当前 --serial 1、--discard-comments、--padding 0 是为了稳定复现与降低无关 metadata;
OpusTags 仍包含 encoder vendor identity,这是合法 container overhead。
对我们后续原创算法最重要的代码级启发¶
第一,representation 可以条件化,而不是所有音频共享一种 latent geometry。Opus 用预测专家、 transform 专家和频带混合专家覆盖不同信号区间。这支持我们研究可验证 routing,但 evaluator 必须 防止 router 只针对公开集 memorization。
第二,码率控制是逐级预算问题。顶层先划分 mode/bandwidth budget,SILK/CELT 内部再分配到 参数、band energy 与 spectral shape;true CBR 最终才由 padding 固定 packet bytes。未来 AI 进化 不应只调一个“latent dim”,而应允许探索结构化预算分配,同时对真实 byte stream 计账。
第三,normative decoder + non-normative encoder 是很强的研究接口。合法 bitstream 空间固定, encoder 可以持续改进。EvoSpeech 的自动科研也可以借鉴:先冻结不可作弊 decoder/evaluator contract, 再让 AI 搜索 encoder 或表示策略。不过新的 codec 若没有标准 decoder,就必须自己建立等价严格的 bitstream schema 与 conformance tests。
第四,系统边界决定实验结论。resampler、look-ahead、pre-skip、container、packet loss receiver 都可能改变质量、延迟与码率。只画“算法核心”而不画这些边界,会得到无法部署也无法复现的 SOTA 表格。
D2 允许与禁止的结论¶
D2 现在允许我们说:本地路径的三个上游源码版本已经固定;CLI/application/signal controls 已查清; SILK/CELT/Hybrid 的 encode/decode 调用链已经映射;真实 6/12/24 kbps hard-CBR packet 与 Ogg bytes 已经重放;24 kbps probe 的逐包 mode switching 已被官方 packet API 验证;source-blind decode 精确 返回原始 duration;选中 build 含 4,986 个 int8 learned analysis parameters,而可选 DRED/deep-PLC/ OSCE 没有启用。
D2 仍禁止我们说:Opus 达到了任何论文 MOS/MUSHRA 数字;当前 encoder 与 2011 encoder 等价; 德/法/西/日/韩质量已知;网络丢包/FEC/PLC 已验证;CELT-only 已被本 trace 动态覆盖;Opus 在任一码率 优于 EnCodec 或现代 neural codec;工作状态 bytes 是参数;Ogg total bytes 等于 RTP cost。
下一 Gate D3 将据此冻结三个互不混写的入口:RFC 8251 decoder conformance、历史官方/论文 evaluation 资产可复现性,以及当前 libopus 1.6.1 可执行的 paper-native proxy。D4 只有在协议、资产 hash、容差和 不可复现裁决先写死之后才运行。
可复核命令¶
.venv/bin/python scripts/trace_opus_code.py --check
.venv/bin/python scripts/freeze_opus_d0.py --check
python3 scripts/validate_research_registry.py
python3 scripts/generate_research_docs.py --check
.venv/bin/python -m pytest tests/test_opus_d0.py tests/test_opus_d1.py tests/test_opus_d2.py -q
.docs-venv/bin/python -m mkdocs build --strict
D3 · 论文原生复现协议:把 decoder conformance 与 encoder quality 分开¶
D3 结论:passed。 协议
opus_1_6_1_paper_native_v1已在任何正式 D4 结果产生前冻结。 它不会假装存在一个单一“Opus 论文分数”:第一轨执行 RFC 8251 的确定性 decoder conformance; 第二轨逐项裁决 2011–2013 历史听测与 PEAQ 资产是否足以严格复现;当前 libopus 1.6.1 的公共 多语质量则留给 D5,不能拿来伪装成历史 encoder 的复现。
这次最重要的发现:最权威的官方资产测的是“解码是否合规”,不是“声音是否好听”¶
官方 RFC 8251 archive 很完整:12 个 .bit bitstream,每个配 .dec 和 m.dec 两个允许的 PCM
reference,共 36 个文件、74,624,664 bytes。整个 archive 与每个 member 都已记录 bytes 和
SHA-256。固定 libopus 1.6.1 还提供 tests/run_vectors.sh、opus_demo.c 和 opus_compare.c,所以这部分
满足严格可执行复现的基本条件。
但 opus_compare 打印的 Opus quality metric 不是 MOS、MUSHRA、ViSQOL 或一般音质分。它是为允许
浮点实现差异而设计的频率加权 conformance tolerance;源码的通过线只是内部 Q >= 0。因此 D4 即使
240/240 case 全绿,也只允许说:固定 source build 与确切本地 dylib 能按 RFC 规则解释这些 bitstream。
它不能证明当前 encoder 优于 AAC、AMR-WB、Codec 2 或任何 neural codec。
反方向也成立:Google、Nokia、AES 论文里的强主观结果属于 encoder-quality evidence,但公开材料主要 是 aggregate protocol 与图。它们没有和 RFC vectors 一样提供一套完整、hash-bound、可从原始刺激 走到每位听者 vote 和最终统计的执行包。把两类证据混在一起,会造成最危险的假复现:用 conformance 通过冒充历史音质复现。
Track A · RFC 8251 decoder conformance¶
D4 固定执行两种实现身份:
fixed_source_linux_arm64:在 Docker Linux arm64 中从 release SHA-2566ffcb5…11a1编译libopus v1.6.1、opus_demo与opus_compare。这验证固定上游 source revision;installed_macos_arm64:用一个只调用 public decoder API 的薄 runner 链接当前 hash-bound/opt/homebrew/opt/opus/lib/libopus.0.dylib,再用同一固定opus_compare判断 PCM。这验证我们真正 用于项目的本地 endpoint,而不是仅验证“同版本的另一个 build”。
每个实现必须跑完整矩阵:
12 vectors × 5 output rates (8/12/16/24/48 kHz) × 2 channel modes = 120 cases
2 implementations = 240 formal rows
每个 .bit packet 前有 big-endian packet length 与 expected final range。runner 对非零 expected value
逐包调用 OPUS_GET_FINAL_RANGE 并要求 uint32 完全相等。PCM 同时对 .dec 和 m.dec 比较,只要其中
一个通过即可;RFC 8251 引入第二套 reference 是为了容纳合法的 intensity-stereo phase behavior,而非
允许任意 waveform。
所有 case 使用 OPUS_SET_IGNORE_EXTENSIONS(1),与 fixed run_vectors.sh 一致。任何缺 case、decode
非零退出、final range 不等或两个 reference 都失败,都会使相应 implementation 的 conformance claim
失败。这里没有抽样、bootstrap 或平均分掩盖失败:vector suite 是有限确定性合同,120 个 case 必须全过。
公开资产到底允许我们验证什么¶
| claim family | 公开资产 | D4 分类 | 原因 |
|---|---|---|---|
| RFC 8251 vectors | 完整 bitstream、双 reference、官方 harness | strict reproducible | 输入、reference、判据与代码都可固定 |
| vector/harness identity | archive + 36 member + 4 source hashes | strict artifact check | 可以逐 byte 审计,但它不是 headline quality metric |
| Google Test 1 | deck 与 aggregate plots | blocked | 缺完整 stimuli、raw votes、session/screening、dated binaries |
| Google Test 2 | 中文/转码 deck 与 aggregate plots | blocked | 同样缺 listener-level 与完整执行身份 |
| Nokia Finnish MOS | paper protocol 与 figures | blocked | 缺确切 clips/noise mix、votes、screening 与 2011 binaries |
| Voice AES aggregates | 设计论文与引用结果 | blocked | 多个历史试验没有统一 strict replay bundle |
| Music AES MUSHRA | protocol 与 aggregate Figure 11 | blocked | 缺 30 clips 的完整 manifest、13 accepted votes/session 与 binaries |
| PEAQ cascading | 方法与 Figure 12 | blocked | 缺 exact clips、codec schedule 和 identity-matched PQevalAudio |
| libopus 1.6.1 公共质量 | 项目有现成 60 句缓存 | different identity | 属于 D5 当前模型 benchmark,不是历史作者数字的 delta |
blocked 不是“论文不可信”,也不是“我们什么都不知道”。它准确表达:现有一手文献足以记录作者
做了什么和报告了什么,但不足以让本项目声称独立复现。作者 aggregate 会保留在 D4 report 中,旁边
明确写出缺失资产,不用新模型、现代 ASR 或肉耳朵随便做一轮替代实验。
为什么不为历史听测做一个“差不多的代理复现”¶
历史 encoder quality 强烈依赖 revision、application、signal hint、VBR/CBR、frame size、baseline implementation 和输入素材。当前 libopus 1.6.1 还包含历史版本没有完全相同的 encoder decision,且 D2 已确认有 source-embedded analysis GRU。即便找来相似英语或中文、重新编码并跑 ViSQOL,也只能形成 当前实现的新 benchmark,不能计算“与 Google 2011 Figure 的误差”。
同理,PEAQ 不是一个无条件可替换的名字。不同 Basic/Advanced implementation、输入对齐、采样率、 level 与 bug fix 会改变输出。没有论文使用的 PQevalAudio identity 和原始 cascade inputs 时,运行某个 现代 clone 只能是新实验。D3 选择把它挡在 strict track 外,而不是为了让表格更满而制造不可解释数字。
metric 与统计规则已经预先确定¶
Track A 只有两个决定性 metric:
packet_final_range:每个非零 expected packet 的 uint32 exact equality;opus_compare:对两个 authorized references 分别运行,至少一项 exit 0。内部 Q 原样留作诊断, 不跨 vector 求平均,也不进入质量排行榜。
统计单位是 (implementation, rate, channels, vector_id) case。每实现预期 120 行,总计 240 行。
summary 报 pass/fail count、缺失 count、final-range mismatch count、reference-pass family;不做置信区间,
因为这里不是从总体随机抽样。历史 subjective/PEAQ track 不生成本地数值,只生成 claim verdict 与 blocker。
运行前还冻结五类输出:machine-readable result summary、240-row JSONL、Markdown report、完整 run log、 build/runtime identity。D4 runner 必须先核对 vector archive、36 members 和四个 harness source hashes, 任何 identity 不一致都停止,不允许“先跑再解释”。
D3 允许与禁止的结论¶
D3 允许我们说:官方 vector 与 harness 资产足以做严格 decoder conformance;完整运行矩阵、两个实现 身份、final-range 判据、双 reference 规则和失败政策都已在结果产生前冻结;五组历史主观/PEAQ 家族 因一手执行资产不完整被预先分类为 strict replay blocked;当前 1.6.1 质量必须进入 D5。
D3 仍禁止我们说:本地 decoder 已经通过 vectors;任何论文 MOS/MUSHRA/PEAQ 已经复现;
opus_compare Q 是感知质量;当前 1.6.1 encoder 等于 2011 encoder;历史主观结果错误;或者 Opus 在
现代统一 benchmark 上胜过其他模型。这些只能由 D4 的正式 execution、D5 的同场 benchmark 或恢复
完整历史资产后回答。
下一步是 D4:只执行已经冻结的 240 个 deterministic case 与九类 claim adjudication。D4 完成后再 进入 D5,审计已经存在的 6/12/24 kbps、30 英 + 30 中公共样本,而不重复跑 Whisper/SenseVoice 或要求 个人录音。
Opus D4 · paper-native reproduction report¶
Status: passed under frozen protocol opus_1_6_1_paper_native_v1.
Deterministic RFC 8251 conformance¶
| implementation | cases | passed | final-range failures | verdict |
|---|---|---|---|---|
| fixed-source libopus 1.6.1 · Linux arm64 | 120 | 120 | 0 | passed |
| installed libopus 1.6.1 · macOS arm64 | 120 | 120 | 0 | passed |
The suite covers 12 vectors × five output rates × mono/stereo for each implementation. A case passes only when decode/final-range validation succeeds and fixed opus_compare accepts either the RFC 8251 .dec or m.dec reference. The comparator's printed Q values are retained only as conformance diagnostics; they are not perceptual scores and are not averaged into the model leaderboard.
Historical quality claims¶
Google Test 1, Google Test 2, Nokia Finnish MOS, the Voice AES aggregates, the Music AES MUSHRA result and PEAQ cascading remain blocked for strict replay. D4 did not synthesize replacement MOS/MUSHRA/PEAQ values because complete immutable stimuli, listener-level records, all dated binaries and/or the exact PQevalAudio identity are unavailable. This is an asset verdict, not a refutation of the author reports.
The current libopus 1.6.1 encoder is a different time-conditioned identity. Its 6/12/24-kbps public multilingual results are adjudicated in D5 and are not reported as error bars against 2011–2013 aggregates.
What D4 establishes¶
- exact official archive and harness identity was checked before execution;
- both frozen decoder implementations passed all 120 cases;
- no conformance threshold was changed after results were observed;
- no subjective, semantic, packet-loss or cross-codec superiority conclusion follows from this Gate.
D5 · Opus 公共统一横评协议¶
这一 Gate 不重新跑 codec、Whisper 或 SenseVoice,也不要求个人录音。它把已经完成且冻结的 13-point 共同实验中属于 Opus 的 180 行,转成一个可独立发现、可逐字段审计的模型档案。
为什么可以复用,而不是再花五小时重跑¶
原正式实验已经让 Opus 6/12/24 kbps hard-CBR 在同一 30 条 LibriSpeech test-clean 英文和 30 条 FLEURS Mandarin 中文上完成 encode → 真实 payload → source-blind decode。参考音频、decoded 音频和 payload 都有 SHA-256;两套 ASR、两套 speaker evaluator、官方 ViSQOL、STOI、SI-SNR、 F0/voicing/energy、冷启动速度和码率也已逐条保存。再次运行不会增加独立样本,只会重新消耗计算并 引入新的 runtime 随机性。
因此 D5 的正确动作是确定性归档与复核:冻结父结果、逐样本文件、codec audit、环境和 runner
的哈希;只抽取 family=opus 且点位属于 6/12/24 kbps 的对象;要求抽取对象与父对象逐字段相等。
任何缺行、重复、改数、重算 CI、挑选 ASR 或替换点位都会使 Gate 失败。
三本账仍然分开¶
representation_bps是 Opus audio packet 的实际表示率;serialized_payload_bps是 decoder 真正收到的完整.evop,包含可独立解码所需 wrapper/container;- endpoint learned-state 对传统 Opus 记为 0,但固定的程序与 dylib 身份仍由 SHA-256 约束。
所以“nominal 6 kbps”不会被当作文件真实码率,也不会把 Ogg/wrapper 的短文件摊销藏掉。
评委与解释边界¶
内容同时保留 Whisper 与 SenseVoice 的 reference/decoded error 及差值;identity 同时保留 WavLM-SV 和 Resemblyzer;质量保留 ViSQOL、STOI、SI-SNR;表达只报告 F0、voicing 与能量轨迹的代理指标。 两个评委冲突时不得挑一个对 Opus 更有利的数字。所有 point 都按英文、中文和全体保留 utterance mean 与固定 seed 的 10,000 次 bootstrap 95% CI。
这仍只是 clean-read 公共 benchmark。D5 passed 不表示历史 Opus 主观听测被复现,不表示噪声、 丢包、对话、日/韩/德/法/西语或关键实体已经验证,也不把自动分数冒充人的总体听感。个人录音已 明确属于可选 D6 扩展,不是这一步的 blocker。
冻结后执行¶
协议 evaluations/common_benchmark_protocol.json 已在 D5 归档前固定父证据、三个点、180 行、字段、
抽取顺序和失败规则。下一步只运行归档器与独立 audit,生成模型自己的 items/results/report;不启动
任何新的 ASR inference。
Opus D5 · 公共统一横评结果¶
状态:passed。这是已完成共同实验的确定性模型级归档,不是一次新的 ASR 或 codec 运行。 180 个逐样本对象与父证据逐字段相等;三档 aggregate 与固定 bootstrap CI 原样保留。
三档全体结果(30 英 + 30 中)¶
| 点位 | representation bps | serialized payload bps | payload overhead | ViSQOL | STOI | Whisper ΔER en/zh | SenseVoice ΔER en/zh | WavLM | Resemblyzer | enc ×RT | dec ×RT |
|---|---|---|---|---|---|---|---|---|---|---|---|
opus_6kbps |
6018.8 | 7822.3 | +29.96% | 3.7851 | 0.8488 | +0.76%/-3.47% | +1.49%/+1.32% | 0.9500 | 0.8611 | 13.92 | 28.43 |
opus_12kbps |
12037.6 | 13844.9 | +15.01% | 4.3020 | 0.9608 | +0.33%/-2.08% | -0.89%/-0.56% | 0.9901 | 0.9840 | 11.60 | 29.86 |
opus_24kbps |
24075.3 | 25883.7 | +7.51% | 4.2660 | 0.9914 | +0.33%/+0.26% | -0.12%/+0.60% | 0.9972 | 0.9942 | 11.21 | 28.30 |
ΔER = decoded error rate − reference-audio error rate;负值不等于 codec 改善了语义,可能只是 ASR 对失真音频的偶然偏好。
endpoint learned-state 在三档均为 0;这不表示 codec 程序免费,opusenc、opusdec 与 libopus 仍由固定 SHA-256 约束。
语言条件与 95% CI¶
| 点位 | 语言 | ViSQOL mean [95% CI] | STOI mean [95% CI] | Whisper ΔER [95% CI] | SenseVoice ΔER [95% CI] |
|---|---|---|---|---|---|
opus_6kbps |
en | 3.3296 [3.2083, 3.4473] | 0.8395 [0.8220, 0.8533] | +0.0076 [-0.0054, +0.0213] | +0.0149 [-0.0012, +0.0322] |
opus_6kbps |
zh | 4.2406 [4.1089, 4.3703] | 0.8581 [0.8460, 0.8695] | -0.0347 [-0.0947, +0.0221] | +0.0132 [-0.0046, +0.0319] |
opus_12kbps |
en | 4.0979 [4.0463, 4.1482] | 0.9638 [0.9570, 0.9693] | +0.0033 [-0.0079, +0.0155] | -0.0089 [-0.0240, +0.0018] |
opus_12kbps |
zh | 4.5061 [4.4490, 4.5654] | 0.9579 [0.9497, 0.9655] | -0.0208 [-0.0741, +0.0271] | -0.0056 [-0.0185, +0.0066] |
opus_24kbps |
en | 4.0365 [3.9829, 4.0892] | 0.9922 [0.9901, 0.9940] | +0.0033 [-0.0037, +0.0122] | -0.0012 [-0.0095, +0.0059] |
opus_24kbps |
zh | 4.4956 [4.4308, 4.5633] | 0.9906 [0.9878, 0.9932] | +0.0026 [+0.0000, +0.0065] | +0.0060 [-0.0028, +0.0185] |
读数与研究启发¶
- 真实 representation 平均值约为 6.019/12.038/24.075 kbps;完整 payload 则约为 7.822/13.845/25.884 kbps。短文件 wrapper/container 摊销使 6 kbps 档的相对 overhead 最大,不能只报 nominal rate。
- 6→12 kbps 带来最大的可见跃升:全体 STOI 从 0.8488 到 0.9608、ViSQOL 从 3.7851 到 4.3020、两套 speaker cosine 也明显上升。它提示原创 baseline 不能只优化 nominal bit/s,还要关注低档位的谱包络、瞬态和身份损失。
- 24 kbps 的 STOI、SI-SNR 和 speaker proxy 继续上升,但 ViSQOL mean 为 4.2660,略低于 12 kbps 的 4.3020,且置信区间重叠。这不是‘12 kbps 必然胜 24 kbps’,而是警告我们不要用单一代理指标强迫所有维度单调。
- 分语言的双 ASR ΔER 大多很小且 95% CI 跨过零,但中文参考音频上 Whisper 的基线 CER 为 0.2617,SenseVoice 为 0.0494;因此中文内容结论必须保留双评委和 reference baseline,不能只挑一个更好看的绝对 CER。
- 三档在本机 CPU 上均显著快于实时,但这是 macOS arm64、短句、冷进程条件的测量,不是云端、移动端或实时 jitter 下的硬件中立排名。
明确没有证明什么¶
D5 没有复现 2011–2013 的 Opus 主观听测,也没有验证噪声、丢包、FEC/PLC、对话、长音频、关键实体或六语泛化。 ViSQOL/STOI/ASR/speaker/F0 指标不能替代人的内容、身份、表达和总体偏好判断。个人录音是可选 D6 扩展,不阻塞本 Gate。 D5 passed 的准确含义只是:Opus 的公共 180-row benchmark 档案完整、来源明确、可由父证据确定性重建。