Descript Audio Codec 1.0.0 · paper-scale 44.1 kHz + public 16 kHz · 可审计模型档案¶
当前结论:D0–D5 passed;下一步是 D0-D5 benchmark complete; D6 is selective and the active sequential research line moves to WavTokenizer D0。 每个 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¶
| 项目 | 冻结身份 |
|---|---|
| 主论文/规范/资料 | High-Fidelity Audio Compression with Improved RVQGAN · NeurIPS2023-58d0e78c / arXiv:2306.06546 |
| 规范更新 | — |
| 官方实现 | https://github.com/descriptinc/descript-audio-codec · 1.0.0 / c7cfc5d2647e |
| 本地环境 | Darwin 26.5 · arm64 · Apple M5 |
| 学习参数/模型状态 | 74175906 / 296703624 bytes(official external checkpoint) |
| 已冻结运行 artifact | 6 个,共 296,850,181 bytes |
| 当前公共点 | 6 kbps · application=public English and Mandarin speech benchmark · signal hint=16 kHz official checkpoint; no separate speech-only claim inferred · fixed full depth q12; derived 12 × 10 × 50 = 6000 representation bps before padding · 20 ms |
冻结范围与明确排除¶
- 论文/规范家族:44.1 kHz universal audio model reported at 8 kbps, plus paper ablations and lower-rate variants;
- 本地选择端点:official GitHub release 0.0.5 weights_16khz.pth, loaded by upstream DAC.load;
-
不纳入当前身份:
- the official 44.1 kHz and 24 kHz checkpoints, which are distinct endpoints and are not silently represented by the selected 16 kHz checkpoint
- the descript/dac_16khz Transformers safetensors conversion, whose recorded hop length differs and which the fixed upstream DAC.load path cannot load
- training-time discriminators and optimizer state, which are absent from the selected inference checkpoint
- claims that the 16 kHz q12 point reproduces the paper's 44.1 kHz 8 kbps headline evaluation
Primary-source manifest¶
| ID | 作用 | bytes | SHA-256 |
|---|---|---|---|
| DAC_PAPER_PDF | peer-reviewed paper and primary method/evaluation source | 345,048 | 321554f09b181cae895b6192557b3b0b0f98cc980761555b24db02a6ca07a808 |
| DAC_RELEASE_README | author-stated release scope, checkpoint variants, usage, Docker and training entry points | 6,368 | 8eb1ea0a02a2916d7e64be25101f992a70e8b3e11af714c090db2a722844e1d3 |
| DAC_RELEASE_MODEL | release-exact encoder, decoder, preprocessing, compress/decompress and DACFile path | 11,064 | 412c6bb1fddfd01a96e4f73df6934a5cdcbc9c6ee50e2b462433917dbceb7300 |
| DAC_RELEASE_QUANTIZER | release-exact factorized and L2-normalized RVQ implementation | 9,060 | e2dc61f32f6123aa48a0aeb934a0d9a41ea29a5eae8db28119c791885c9f1b07 |
| DAC_RELEASE_LICENSE | fixed-source license evidence | 1,074 | 5d7a5f644313f30aad5ef032669ada67efdacefecb2c7d7b875683698bd70e87 |
Source releases and licenses¶
| Artifact | revision | bytes | SHA-256 | license |
|---|---|---|---|---|
| descript-audio-codec-1.0.0.tar.gz | 1.0.0 / c7cfc5d2647e26471dc394f95846a0830e7bec34 |
670,975 | efb320de8c48b5bcd50fea97c0da290306a05a4de0a4746fe000dd1d8e282094 |
MIT |
| weights_16khz.pth | official GitHub release asset 0.0.5 |
296,820,733 | 95ab7176b67137d4d4c6c54b8d6ef3cea797faec228cb03ad084badcad570b4d |
official fixed README says released weights are MIT; no separate license file is embedded in the checkpoint |
Installed encoder/decoder identity¶
| Artifact | bytes | SHA-256 | resolved path |
|---|---|---|---|
official_16khz_checkpoint |
296,820,733 | 95ab7176b67137d4d4c6c54b8d6ef3cea797faec228cb03ad084badcad570b4d |
.model-envs/dac/checkpoint/weights_16khz.pth |
fixed_release_readme |
6,368 | 8eb1ea0a02a2916d7e64be25101f992a70e8b3e11af714c090db2a722844e1d3 |
.model-envs/dac/source/README.md |
fixed_release_license |
1,074 | 5d7a5f644313f30aad5ef032669ada67efdacefecb2c7d7b875683698bd70e87 |
.model-envs/dac/source/LICENSE |
fixed_release_model |
11,064 | 412c6bb1fddfd01a96e4f73df6934a5cdcbc9c6ee50e2b462433917dbceb7300 |
.model-envs/dac/source/dac/model/dac.py |
fixed_release_quantizer |
9,060 | e2dc61f32f6123aa48a0aeb934a0d9a41ea29a5eae8db28119c791885c9f1b07 |
.model-envs/dac/source/dac/nn/quantize.py |
isolated_environment_lock |
1,882 | 28850be6d2a374aca67bf7648bfb1f0287c99497782272e3ac22aee0fd770193 |
environments/dac-native-v1.txt |
表示与计账边界¶
- codec 表示:at q12, twelve 10-bit RVQ indices per 20 ms frame; nominal full-depth representation is 6000 bps before end padding;
- 当前存储/传输 artifact:official DACFile v1 NumPy object containing uint16 code arrays plus metadata; it is a real independently decodable artifact but is neither bit-packed nor safe for untrusted candidate payloads because loading uses pickle;
- 分账规则:actual RVQ-symbol bits, complete serialized DACFile bytes, endpoint checkpoint/state bytes and environment/software footprint remain separate;
- source-blind decoder:true;
- 不能由 D0 推出的结论:deep algorithmic understanding beyond identity and runtime fields;reproduction of any objective, subjective, ablation or comparative paper result;equivalence between the selected 16 kHz q12 point and the paper's 44.1 kHz 8 kbps model;quality, intelligibility, speaker identity, expression, latency, streaming or Pareto superiority;safety of the pickle-based official DACFile format for untrusted candidate submissions。
D1 · 论文深读与证据边界¶
D1 结论:passed。 本章逐页阅读并视觉检查了 NeurIPS 2023 正文的 14 页、4 张 核心表、5 张图与 Appendix A,同时审计了 submission supplement、固定 release README、 44 kHz 配置、官方 evaluation 脚本和 MUSHRA 界面。D1 的含义是:我们现在知道论文提出了 什么、为什么可能有效、作者怎样评测、数字的适用条件,以及公开资产缺什么。它不表示 本地 16 kHz checkpoint 已复现论文 44.1 kHz 结果,更不表示作者的主观听测已经由我们重做。
一句话心智模型¶
DAC(Descript Audio Codec)的核心不是“把 EnCodec 做大一点”,而是把几个经常被分散处理的 失败同时看成一个系统问题:
- 普通激活与卷积 decoder 容易制造 pitch、periodicity 和 upsampling artifacts;
- RVQ 名义上有很多 bits,但 codebook collapse 会让大量 code 根本不用,实际容量远小于账面容量;
- quantizer dropout 虽然提供可变码率,却会伤害满码率重建;
- 只看幅度谱的 discriminator 不擅长约束 phase,而固定尺度的 mel loss 又会漏掉快速瞬态;
- 多域训练数据中的低带宽音源会把整个模型的高频上限拖低。
因此 Improved RVQGAN 同时改四个层次:在 generator 中加入 Snake 周期归纳偏置;在 RVQ 中做 低维投影查找与 L2 normalization;用 multi-period 与 complex multi-band multi-scale STFT discriminator 约束波形、周期、相位和频带;再用跨七个时间尺度的 low-hop mel loss 与 full-band balanced sampling 保住瞬态和 22.05 kHz 带宽。[DAC-P-004–DAC-P-020]
这套系统的第一性原理是:低码率不只取决于 token 数;每个 token 是否真正使用了码本容量, decoder 是否会把有限信息放大成自然波形,训练分布是否允许模型学习全带宽,都同样决定最终质量。
论文到底解决什么¶
论文把 neural codec 放在“生成模型的离散中间表示”位置上。原始 44.1 kHz 音频每秒有 44,100 个连续采样;如果语言模型直接处理波形,序列过长。一个好的 tokenizer/codec 需要同时做到:
- 重建音频自然,尽量不出现 tonal、pitch、phase 与高频 aliasing artifacts;
- 以更低 frame rate 和更少 bits 形成适合 Transformer 的短离散序列;
- 一个模型覆盖 speech、music、environmental sound,而不是只对单一语音域有效;
- 支持多档码率,前层 RVQ 可以形成 coarse token、后层补 fine detail;
- 名义 bits 真正转化成 code entropy,而不是浪费在塌缩码本上。[DAC-P-001–DAC-P-003]
论文 headline 点是 44.1 kHz、stride 512、约 86 frames/s、9 个 1024-entry codebook。每个
code 理论上 10 bits,因此 86.13 × 9 × 10 ≈ 7.75 kbps,论文把它写成 8 kbps 上界;相对
44.1 kHz × 16-bit PCM,压缩因子约为 91。这个“8 kbps”首先是离散表示容量,不是 .dac
文件大小,也不含 checkpoint。[DAC-P-002, DAC-I-002]
Table 1 的横向比较很容易被误读:Proposed 44.1 kHz / 8 kbps、EnCodec 24 或 48 kHz / 24 kbps、SoundStream 24 kHz / 6 kbps 的 sample rate、frame rate、codebook 数与带宽都不同。 它很好地说明不同设计的 token geometry,却不是同硬件、同带宽、同 artifact 的严格运输比较。
Improved RVQGAN 的核心¶
1. Snake:给 decoder 一个周期先验¶
音频,尤其 voiced speech 与 music,天然含周期结构。ReLU/LeakyReLU 适合分段线性拟合,却没有
周期外推偏置。Snake 使用 x + sin²(αx)/α,其中 α 可学习;线性通路保留整体趋势,周期项让
网络更容易表达谐波。论文 Table 2 中,把 Snake 换成 ReLU 后,ViSQOL 从 3.96 降至 3.83,
SI-SDR 从 9.12 降至 6.92 dB。作者把它视为 architecture ablation 中影响最大的一项。
[DAC-P-004, DAC-A-002]
这里的启发不是“以后所有层都必须用 Snake”,而是:当 decoder 负责从极少 bits 合成高维波形时, 有物理意义的归纳偏置可能比再加一些通用参数更值钱。但 Table 2 是多域 44.1 kHz 训练结果, 不能直接外推到我们的 16 kHz speech-only 目标;D4 必须把“代码能对上”与“效果能复现”分开。
2. 低维、归一化 code lookup:容量利用率比名义码率更重要¶
传统 RVQ 在高维 latent 中直接找最近 code。高维空间下 codebook 很难均匀使用,部分 embedding
长期收不到选择,造成 collapse。DAC 的 factorized code 做两次投影:Win 把 1024-d encoder
latent 压到 8-d(或消融中的其他维数)查 code,Wout 再映回高维;查找前对输入与 codebook
都做 L2 normalization。Appendix A 给出了完整公式。[DAC-P-005, DAC-P-006]
这带来三个意义:
- lookup 只比较最重要的低维方向,减少高维噪声对选择的影响;
- normalization 让 code 竞争由向量方向决定,避免范数支配;
- codebook 用普通 VQ-VAE codebook/commitment losses 学习,不再依赖 EMA、k-means 初始化与 random restart。[DAC-P-007]
论文把 bitrate efficiency 定义为各码本经验 entropy 之和除以全部可用 bits。它测的是“码本 实际使用率”,不是文件压缩率。Table 2 的低维消融显示 2-d 与 256-d 都差:2-d 容量不足, 256-d 又重新进入高维 lookup 的困难;8-d 最优。没有 adversarial training 时效率甚至从 99% 掉到 62%,说明 code usage 并不只是 quantizer 自己的局部性质,而受整个 generator-discriminator 博弈影响。[DAC-P-023, DAC-A-003, DAC-A-005]
3. Quantizer dropout:可变码率不是免费午餐¶
SoundStream 风格做法是每个训练样本随机保留前 n ∈ {1..Nq} 个 quantizer。这样一个模型能在
多档 bits 下工作,但每个样本都可能缺后层,满深度路径的训练频率下降。DAC 改成:仅以概率
p 对样本应用随机深度,否则保留全部 quantizer。Figure 2 与 Table 2 表明 p=0 的满码率
最好、低码率较差;p=1 低码率更稳、满码率损失更大;最终选 p=0.5。[DAC-P-008,
DAC-A-007]
RVQ 自然形成 coarse-to-fine 层级:第一层解释最大残差,后层逐步补细节。因此 low-bit 系统的 关键问题不只是“减少几层”,还包括训练时是否让前几层独立承担足够信息,同时不牺牲全深度。 这正适合以后由 AI 自动搜索 dropout curriculum、stage capacity、codebook size 与 layer-specific loss,而不是只搜索 decoder 宽度。[DAC-P-009]
4. Phase-aware adversary 与 multi-scale low-hop reconstruction¶
论文没有把 waveform quality 等同于一个 loss。它同时使用:
- multi-period discriminator:period
[2,3,5,7,11],针对不同周期; - complex multi-scale STFT discriminator:window
[2048,1024,512],保留 real/imag phase 信息; - 每个 STFT 再按归一化频率
[0,.1,.25,.5,.75,1]分带,使微弱高频 aliasing 获得更强梯度; - 七尺度 log-mel L1:window
[32,64,128,256,512,1024,2048],hop 为 window/4; - mel bins
[5,10,20,40,80,160,320],短窗不强塞过密 mel bins; - feature matching、hinge adversarial、codebook 与 commitment loss。[DAC-P-010–DAC-P-014, DAC-P-020]
两个消融尤其重要。去掉 adversarial loss 时,SI-SDR 9.12→1.07,bitrate efficiency 99%→62%, 但部分 spectral metric 变化没那么大;作者听到 buzzing,认为 phase 没学好。把 low-hop 多尺度 mel 换成单一 512-window/80-mel 后,SI-SDR 9.12→7.68,并更难重建 cymbal、beep、alarm 和 singing transient。[DAC-A-003, DAC-A-004]
这说明单指标 reward 很危险。若自动进化只优化 mel distance,它可能接受 phase/buzzing 失败; 只优化 SI-SDR,又可能错过感知上重要但能量很小的 aliasing。EvoSpeech 的 evaluator 必须继续 保持多维,并把 proxy 的适用对象写死。
数据、训练与参数¶
训练数据覆盖三域:speech 用 DAPS、DNS Challenge clean、Common Voice、VCTK;music 用 MUSDB、 Jamendo;environment 用 AudioSet balanced/unbalanced。全部 resample 到 44.1 kHz。训练 excerpt 归一到 -24 dB LUFS,只做随机 phase shift。[DAC-P-015, DAC-P-017]
balanced sampling 解决一个很本质的问题:文件虽然被 resample 到 44.1 kHz,原始内容可能只有 8–16 kHz。若随机采样,模型会把数据集的平均真实带宽当成目标,作者观察到无 balanced sampling 的输出上限约 18 kHz。论文强制每 batch 三域均衡且包含确认 full-band 的样本,从而让模型有持续 证据学习到 22.05 kHz。[DAC-P-018, DAC-A-008]
最终 44.1 kHz generator 的 downsample rates 是 [2,4,8,8],总 hop 512;decoder 反向
[8,8,4,2],decoder width 1536。论文约数是 76M parameters,其中约 22M encoder、54M decoder。
ablation 用 batch 12、250k steps,作者称单 GPU 约 30 小时;final model 用 batch 72、400k steps、
0.38 s excerpts、AdamW 1e-4 与指数衰减。[DAC-P-019–DAC-P-021]
这里也暴露了训练复现的真实成本:即使代码齐全,论文没有冻结 GPU 型号、精确 data manifest、 所有随机种子、完整 optimizer checkpoint 与每个 ablation 的 model artifact。D4 不能把“配置文件 存在”写成“训练结果可 exact replay”。
官方怎样评测¶
Objective protocol¶
论文使用五类 objective evidence:[DAC-P-022, DAC-P-023]
| Metric | 论文目的 | 关键配置/边界 |
|---|---|---|
| ViSQOL | intrusive 感知质量/MOS-LQO proxy | paper 没冻结 binary/model build;release script 同时调用 audio 与 speech mode |
| Mel distance | 多尺度 log-mel 重建距离 | 与训练七尺度配置一致 |
| STFT distance | 高频 fidelity | log magnitude,windows 2048 与 512 |
| SI-SDR | scale-invariant waveform/phase fidelity | 必须与 spectral/perceptual metric 联合解释 |
| Bitrate efficiency | empirical entropy / available code bits | 不是 payload bytes,不含 container/checkpoint |
固定 scripts/evaluate.py 对每个 input 找同名 output,先分别 resample 到 22.05 与 44.1 kHz,
再计算 mel、STFT、waveform、SI-SDR、ViSQOL-audio 与 ViSQOL-speech。它与 NeurIPS supplement 中
的 evaluate.py 字节完全一致,这是一个很强的 code-lineage 证据。[DAC-B-004]
但 exact numerical replay 仍缺 dependency identity:paper/supplement 没冻结 audiotools version、 ViSQOL binary 和 model file;且 supplement 当时直说 audiotools 是 private dependency,代码“不 readily executable”。所以 D3 会冻结 metric implementation audit 与可运行当前-release track 两条线,不能 事后用新版包跑出相近数字就称 exact paper reproduction。[DAC-B-002, DAC-I-005]
Subjective protocol¶
论文称其为 MUSHRA-inspired,而不是完整 ITU MUSHRA:有 hidden reference,无 low-pass anchor; 10 位 expert listeners,每人随机 12 个十秒样本,其中 speech/music/environment 各 4。44.1 kHz 条件 是 Proposed 2.67/5.33/8 kbps、EnCodec 3/6/12 kbps 与 reference;图报告 95% CI。 [DAC-P-024, DAC-P-025]
固定 scripts/mushra.py 能建立带 reference player、匿名条件 slider 与 CSV 结果写入的 UI,但它
没有包含论文 raw votes、每人抽到的样本、condition order、播放设备或完整统计脚本。更关键的是,
代码默认 n_samples=10,而 paper 说每人 12;这不是一定矛盾,因为 CLI 可覆盖默认值,但说明
不能靠脚本默认值复原论文。[DAC-B-005, DAC-I-004]
论文结果与消融¶
Table 2:哪些机制真的影响系统¶
视觉核对 Table 2 后,几个结果比“DAC 胜过 EnCodec”更有研究价值:
| 变化 | Mel ↓ | STFT ↓ | ViSQOL ↑ | SI-SDR ↑ | efficiency ↑ |
|---|---|---|---|---|---|
| baseline | 1.09 | 1.82 | 3.96 | 9.12 | 99% |
| ReLU 替代 Snake | 1.17 | 1.81 | 3.83 | 6.92 | 99% |
| 无 adversarial discriminators | 1.13 | 1.92 | 4.12 | 1.07 | 62% |
| 单尺度 high-hop mel | 1.10 | 1.87 | 4.01 | 7.68 | 99% |
| lookup latent 2-d | 1.44 | 2.08 | 3.65 | 2.22 | 84% |
| lookup latent 256-d | 1.31 | 1.97 | 3.79 | 5.09 | 59% |
| EMA codebook | 1.11 | 1.84 | 3.94 | 8.33 | 97% |
| 无 balanced sampling | 1.09 | 1.94 | 3.89 | 8.89 | 99% |
最醒目的反例是“无 adversarial”行:ViSQOL 反而 4.12,高于 baseline 3.96,但 SI-SDR、entropy 和作者听感明显恶化。如果自动科研把 ViSQOL 当唯一 reward,它可能会选中作者认为有 buzzing、phase 失败的模型。这正是我们必须先构建多维、不可作弊 evaluator 的实例。[DAC-A-001–DAC-A-008]
Table 2 还显示更大并非单调更好:decoder dim 1024 的 mel 1.07 甚至优于 1536 baseline 1.09, ViSQOL 同为 3.96;而 lookup latent 太大反而 collapse。SOTA-first 不是盲目追参数量,而是研究 能力从何而来,然后把真正有效的 mechanism 压缩进学生模型。
Table 3:44.1 kHz final model 的作者结果¶
视觉核对后的 Proposed 曲线如下:[DAC-A-009]
| kbps | bandwidth kHz | Mel ↓ | STFT ↓ | ViSQOL ↑ | SI-SDR ↑ |
|---|---|---|---|---|---|
| 1.78 | 22.05 | 1.39 | 1.95 | 3.76 | 2.16 |
| 2.67 | 22.05 | 1.28 | 1.85 | 3.90 | 4.41 |
| 5.33 | 22.05 | 1.07 | 1.69 | 4.09 | 8.13 |
| 8 | 22.05 | 0.93 | 1.60 | 4.18 | 10.75 |
Table 3 的 EnCodec 1.5–24 kbps 只建模 12 kHz bandwidth,ViSQOL 2.82–3.16;Opus 8 kbps 点 仅 4 kHz bandwidth,而 14/24 kbps 是 16 kHz;Lyra 9.2 kbps 是 8 kHz。论文作者据此声明 Proposed 在更低 rates 下保持 22.05 kHz 且 objective/subjective 都胜出。[DAC-A-010, DAC-A-011]
这个结论有价值,但“all bitrates”不是宇宙常数:各 baseline implementation、sample rate、bandwidth 与版本受论文时点条件化。D4 的任务是复原它能复原的比较,而不是用 2026 新模型替作者改写 Table 3。
Table 4:真正更接近控制变量的 24 kHz matched experiment¶
论文另训一个 Proposed@24kHz,使其与 EnCodec 都是 24 kHz、stride 320、最多 32 个 10-bit codebooks。Table 4 在 1.5/3/6/12/24 kbps 上,Proposed 的 ViSQOL 与 SI-SDR 均高于 EnCodec; 例如 6 kbps 是 4.38 / 8.44 dB,对应 EnCodec 4.30 / 6.06 dB;24 kbps 是 4.61 / 16.40 dB, 对应 4.42 / 9.69 dB。[DAC-A-013]
这是 paper 中最强的 mechanism evidence,因为 sample rate、stride、codebook capacity 被对齐了。 但这些 matched-configuration weights 并未在当前 D0 端点中冻结,所以现阶段仍是 author-reported, 不是本地已验证结果。
MUSHRA 与 limitation¶
Figure 3 的 Proposed 曲线明显高于 EnCodec,但 8 kbps 仍低于 reference;Figure 5 三域都胜过 EnCodec,speech 最好,environment 最弱。作者明确列出 glockenspiel 与 synthesizer 是困难案例, 并承认 full-band generative modeling 带来 deepfake 风险。[DAC-A-012, DAC-A-014]
这些 limitation 应直接变成未来 stress corpus:金属瞬态、铃声、合成器、高频 aliasing、复杂环境声, 而不是只在干净朗读语音上刷 WER。
本地 16 kHz checkpoint 和论文 44.1 kHz 主张为何不能混为一谈¶
本项目当前冻结的是官方 weights_16khz.pth:16 kHz、hop 320、50 frames/s、12×1024
codebooks,q12 表示率 6000 bps,74,175,906 个 float32 inference parameters。论文 headline
则是 44.1 kHz、hop 512、约 86 fps、9 codebooks、约 8 kbps。[DAC-I-001]
| 维度 | paper headline | 当前本地点 |
|---|---|---|
| sample rate | 44.1 kHz | 16 kHz |
| hop / frame rate | 512 / ~86 Hz | 320 / 50 Hz |
| maximum codebooks | 9 | 12 |
| full-depth representation | ~8 kbps | 6 kbps |
| paper test domains | speech + music + environment | 当前 D5 是 English/Mandarin speech |
| checkpoint identity | 44.1 kHz family artifact | release 0.0.5 weights_16khz.pth |
二者都是 DAC,但不是一个 model point。D5 可以告诉我们 16 kHz q12 对公共 speech benchmark 的 表现;它不能与 Table 3 直接做 numerical error percentage,更不能声称“复现 8 kbps/44.1 kHz”。 若 D4 要验证 headline,必须另行下载并冻结官方 44.1 kHz checkpoint;若只做 source/evaluation audit,则必须把质量主张标 blocked,而非偷偷换端点。[DAC-B-001, DAC-I-001]
同样,Hugging Face descript/dac_16khz 是 Transformers conversion,不是当前 official
DAC.load() checkpoint。D0 已证明 conversion config 的 hop=512 与 native PTH runtime hop=320
不一致。D1 不会为了方便把这两者重新合并。
可复现性与 blocker¶
当前 primary artifacts 已提供:paper、supplement code snapshot、final 44 kHz YAML、metric code、 MUSHRA UI、公开 source release 与多个 checkpoint。[DAC-B-001–DAC-B-006]
但 exact paper replay 还缺:
- 3000 个十秒 test excerpt 的文件 ID、offset 与最终 hash;
- paper baseline 的确切 binary/checkpoint revision 与 reconstruction files;
- 所有 ablation checkpoint、训练随机种子、硬件与 optimizer continuation state;
- audiotools/ViSQOL 的 paper-time exact version 与 ViSQOL model/binary identity;
- MUSHRA 的 raw votes、每位 listener 的 12 个样本与 condition assignment;
- 论文 confidence interval 的 exact statistics implementation;
- paper 44.1 kHz 和 matched 24 kHz 所有中间 artifact 的 immutable manifest。
数据集名称公开并不等于 exact sample manifest。DAPS F10/M10 可以定位,MUSDB test 与 AudioSet eval 也可获取,但“随机抽 1000 个十秒 segment”仍有大量自由度;segment offset 不同足以改变 metric。 [DAC-I-003]
MUSHRA 也只能重建 protocol family,不能重算原 Figure 3–5。没有 raw votes 时,95% CI 只能从图 读取近似值,不能验证统计实现。[DAC-I-004]
许可还必须分层:NeurIPS supplement 内的 LICENSE 明确禁止 reproduction/distribution;后续 GitHub
tag 1.0.0 是 MIT,README 也说 released weights 为 MIT。我们可以引用并审计 supplement,但不把
其 code 复制进仓库;D2 阅读的是本地 MIT release checkout,再以 hash 比较 supplement lineage。
[DAC-B-003]
对 EvoSpeech 的启发¶
- 优化 effective capacity,不只优化 nominal bitrate。 同样 10-bit code,entropy 只有 60% 与接近 100% 是完全不同的模型;未来候选必须报告 codebook usage、per-stage entropy、dead codes。
- 把 inductive bias 当可搜索对象。 Snake 证明周期先验可能用较少参数得到更好的 waveform 生成;可继续比较 Snake、SnakeBeta、Fourier feature、harmonic excitation 等受控变体。
- 可变码率要联合训练 curriculum。 dropout probability、每层被训练频率、stage-specific loss 与最大深度应该共同搜索,不能假定“删后几层即可”。
- phase 与 transient 必须有独立裁判。 ViSQOL 单项在 no-adversarial ablation 上给出误导性 高分;SI-SDR、STFT、瞬态 stress 与人耳校准缺一不可。
- 训练采样本身是 codec architecture 的一部分。 如果 batch 没有 full-band evidence,再强的 decoder 也学不到高频;未来中文/多语言、设备、带宽与噪声必须显式均衡。
- SOTA-first 不等于照搬大模型。 DAC 的 76M generator 是能力教师;真正值得蒸馏的是 code usage、periodic bias、phase-aware loss 和 balanced sampling,而不是把 296 MB checkpoint 塞进通信端点。[DAC-I-007]
- 公共 speech benchmark 与论文 universal-audio benchmark 必须并存。 前者回答通信内容、 speaker 与表达;后者回答 full-band music/environment quality,谁也不能代替谁。
- 多语言不是 paper 已验证能力。 DAPS/MUSDB/AudioSet 的多域结论不等于中日韩法德西语内容 保真;语言扩展只能由 D5/D6 独立建立。[DAC-I-006]
D1 形成的 D3/D4 入口¶
| claim family | 已知 primary evidence | D3 必须冻结 | D4 预期 |
|---|---|---|---|
| 44.1 kHz architecture/rate | paper Table 1 + final YAML | checkpoint identity、hop/code shape、q1..q9 | 若 checkpoint 可得则 exact structure |
| metric implementation | paper §4.4 + byte-identical evaluate.py | audiotools/ViSQOL versions、resample、aggregation | current-release replay;paper exact 可能 blocked |
| 3000-segment test set | dataset/speakers/counts | dataset revisions、IDs、offsets、hashes | exact set likely blocked |
| Table 2 ablations | 完整数值与 config family | checkpoint availability、seed、hardware | most rows blocked without weights/training |
| Table 3 44.1 kHz curve | 完整 objective table | official checkpoint q2/q3/q6/q9 mapping、baseline revisions | selected rows may be approximate reproduction |
| Table 4 matched 24 kHz | 完整数值 | matched checkpoint availability | likely blocked if weights absent |
| Figures 3–5 MUSHRA | partial protocol + UI | samples、votes、assignment、CI formula | exact statistical replay blocked |
| release checkpoint smoke | D0 16 kHz q12 + 8/8 smoke | separate release-native track | exact executable, not paper-headline proof |
D2 将进入 fixed MIT source c7cfc5d...,追踪 waveform → encoder → factorized normalized RVQ →
DACFile → RVQ decode → generator waveform 的真实调用链,并把 Snake、weight norm、padding/delay、
quantizer dropout、discriminators、losses、training loop 与 metrics 对到上面的 claim ledger。它还要解释
已发现的 exact-hop N-8 decode shortfall,不把 adapter workaround 藏在“官方模型可运行”一句话里。
Primary-source artifact manifest¶
| Source | bytes | SHA-256 | 用途 |
|---|---|---|---|
| NeurIPS proceedings paper | 345,048 | 321554f09b181cae895b6192557b3b0b0f98cc980761555b24db02a6ca07a808 |
peer-reviewed method, tables, plots, limitations |
| NeurIPS supplement | 69,448 | 5ded9bc2f22f69082970b249e543ae201ea6bcc7a6838f66eca83a293f864a30 |
submission-time code; no redistribution |
| Release README | 6,368 | 8eb1ea0a02a2916d7e64be25101f992a70e8b3e11af714c090db2a722844e1d3 |
released checkpoint/license/usage boundary |
| Final 44 kHz config | 2,732 | 8cefd94aa67ad0d78b1330fbd8ae0be13d3387602db0d5dfaf234fdf4732f576 |
architecture/training/data configuration |
| Evaluation script | 3,051 | f0f79dee8cfb92651edd266331b36af909ecc5c75e8c95999e6ff104e31a8bfa |
objective metric invocation and pairing |
| MUSHRA interface | 3,140 | bdafd63402f261bd60cb6e7158b61a039cf8b16782e09629eabcacd948473432 |
listening UI/result-writing boundary |
结构化的 53 条 claim-to-source ledger 位于 research/models/dac/paper_claims.json。其中作者数值
始终标为 author_result;我们的可复现性判断标为 reader_inference,不会混写成论文原话。
DAC 1.0.0:核心代码深读与确定性机制证据¶
D2 · 核心代码深读¶
这一页回答的不是“DAC 听起来好不好”,而是更基础、也更容易被宣传语掩盖的问题:固定的 Descript Audio Codec 1.0.0 源码和官方 16 kHz checkpoint 到底执行了什么;论文中的 improved RVQGAN 方法怎样落到函数、张量和文件;哪些能力被本地执行验证;哪些仍只是作者报告;哪些地方甚至存在 release 级缺陷。
先给结论:DAC 不是“一个大模型把音频压成 token”这么模糊。选定端点是一条清楚的链:卷积编码器每 320 个 16 kHz 样本产生一个 1024 维 latent;每一级 RVQ 先用 1×1 卷积投影到 8 维,在单位球面上找 1024 个 code 之一,再投影回 1024 维并从残差中减掉;传输的是每帧每级一个 0–1023 的整数;解码器把已收到的各级向量相加后用镜像卷积网络还原波形。q 的本质是“允许残差被修正几次”,不是把同一个连续 latent 用更多小数位表示。
本地 D2 trace 使用 6413 样本、0.4008125 秒的确定性非语音波形,分别运行 q1/q4/q8/q12。编码与解码各在新进程中运行两次,解码进程只拿 .dac 文件和固定 checkpoint。四点都精确恢复 6413 个有限 float32 样本,重复文件和重复解码逐字节相同。这证明固定机器和环境中的调用链、shape、可变深度与 source-blind round trip;它不证明任何语音、音乐或听感质量。
固定代码面与可信边界¶
D2 只解释以下身份:
- 源码:官方仓库 tag
1.0.0,commitc7cfc5d2647e26471dc394f95846a0830e7bec34; - 源码归档 SHA-256:
efb320de...e282094; - checkpoint:官方 GitHub release
0.0.5的weights_16khz.pth; - checkpoint SHA-256:
95ab7176...570b4d,296,820,733 bytes; - 本地端点:16 kHz、hop 320、12 个 codebooks、每本 1024 entries;
- 运行时参数:74,175,906 elements、296,703,624 state bytes。
这两个版本号必须并列保存。源码 tag 1.0.0 并不意味着选中的权重也叫 1.0.0。固定下载表明确把 16 kHz / “8kbps” 变体指向 release 0.0.5;44.1 kHz 8 kbps 又指向 0.0.1;44.1 kHz 16 kbps 才指向 1.0.0。release 的字符串命名还不能替代运行时测量:选中的 16 kHz 权重最大表示率是 12 × 10 × 50 = 6000 bps,不是标签字面上的 8 kbps。
code_map.json 固定 20 份上游文件的 SHA-256,并给出 20 条 paper-to-code 映射。所有 GitHub 行号链接都锚定同一个 commit;code_trace.json 又把这些源文件 hash、checkpoint、环境 lock 和项目 adapter hash 放进同一份测量。因此页面里的“源码如此”不是对移动 main 的记忆,也不是对某个 pip 包的猜测。
可信边界有三层:上游 MIT 源码可以审阅;官方 checkpoint 按固定 README 的权重许可使用;官方 .dac 是可信 baseline 文件,因为 DACFile.load 使用 np.load(..., allow_pickle=True)。第三层绝不能直接进入未来 arena 的不可信 candidate 接口。pickle 并不是低级格式瑕疵,而是安全边界:候选可以提交任意字节时,evaluator 不应执行对象反序列化。
从 waveform 到 1024-channel latent¶
DAC.preprocess 很短,却决定码率与尾部行为。它先断言输入 sample rate 等于 checkpoint sample rate,再计算:
选定端点的 encoder rates 是 [2, 4, 5, 8],乘积为 320。6413 样本因此右补到 6720,得到 21 帧;每帧覆盖名义 20 ms,帧率 50 Hz。短文件的表示 bits 必须按实际 21 帧计,不能简单用原始 0.4008125 秒乘 nominal rate 后向下取整。D2 trace 的 q12 因 padding 使用 2520 representation bits,除以原始时长得到 6.287 kbps;长期稳定态才趋近 nominal 6.0 kbps。
Encoder 首层是 kernel 7 的 weight-normalized Conv1d。每个尺度先运行三个 residual units,dilation 依次为 1、3、9,再用 kernel 2×stride 的卷积降采样。每个 residual unit 都是:
最后一个 Snake 和 kernel 3 卷积产生 latent。16 kHz checkpoint 的 latent_dim 没有显式给出时,是 encoder_dim × 2^4 = 64 × 16 = 1024。D2 实测 [1,1,6720] → [1,1024,21]。这 1024 维不是直接送进一个 1024-entry codebook;DAC 最重要的改变恰恰是把“表达网络所需的宽 latent”和“稳定查表所需的低维空间”解耦。
Snake 的函数是:
每个 channel 有可学习 α。它给卷积网络显式周期归纳偏置,论文将其与波形周期结构联系起来。固定源码证实 Snake 在 encoder/decoder 多处存在;但“它使 ViSQOL 从 3.83 提升到 3.96”仍然只是 Table 2 作者结果,D2 没有重训 ReLU ablation。
factorized、normalized VectorQuantize¶
一个 VectorQuantize stage 有三部分:
in_proj:1×1 Conv1d,把 input_dim 1024 投影到 codebook_dim 8;Embedding(1024, 8):真正用于 lookup 的表;out_proj:1×1 Conv1d,把选中的 8 维向量映射回 1024 维。
decode_latents 将 [B,8,T] 排成 [B×T,8],然后同时 L2-normalize query 和 codebook。距离计算仍写成平方欧氏形式,但单位向量下它与最大 cosine similarity 等价。代码取 (-dist).max(1) 的 index,再查回 code vector。这里有两个容易混淆的“低维”:8 是每级 lookup embedding 的维数;10 是索引一个 1024-entry table 所需的 bits。8 维不意味着传 8 个连续数,传输仍是一个十位整数 index。
训练时,projected encoder vector z_e 与选中 code vector z_q 产生两项 MSE:commitment loss 用 z_q.detach() 约束 encoder;codebook loss 用 z_e.detach() 更新 table。前向的 straight-through expression 是 z_e + (z_q - z_e).detach():数值等于 z_q,梯度对 encoder 路径却像 identity。随后 out_proj 才把它送回 1024 维残差空间。
这解释了论文为什么强调 factorized codes。若直接在很高维的 encoder latent 中查一个小表,几何空间极稀、code 使用容易塌缩;投到 8 维并归一化,把码本学习与 decoder 所需容量拆开。论文 Table 2 对 2/8/256 维和 EMA 的数字是这套设计的经验依据,但固定源码只能证实“设计存在”,不能把作者的 ablation 数字变成本地事实。
ResidualVectorQuantize:q 为什么真的是层级码率旋钮¶
ResidualVectorQuantize.forward 从 residual = z 开始。第 i 级量化 residual,得到 z_q_i;总重构加上 z_q_i,新 residual 减去 z_q_i。因此第一级承担粗结构,后续级只修正前面没表达好的部分。它与“把 12 个独立 token 拼起来”不同:第 7 级看到的目标依赖第 1–6 级已经解释了什么。
evaluation mode 下,循环遇到 i >= n_quantizers 就 break。D2 不是只读这个 break 就宣布可变码率成立,而是实际运行:
| depth | projected shape | code shape | nominal representation rate |
|---|---|---|---|
| q1 | [1,8,21] |
[1,1,21] |
0.5 kbps |
| q4 | [1,32,21] |
[1,4,21] |
2.0 kbps |
| q8 | [1,64,21] |
[1,8,21] |
4.0 kbps |
| q12 | [1,96,21] |
[1,12,21] |
6.0 kbps |
四点的 quantized latent 都是 [1,1024,21],因为 stage outputs 已经在高维空间相加。model.compress(..., n_quantizers=q) 保存的 codes 与直接 encoder → quantizer(..., q) 逐元素相同。这也推翻了源码初看时的一个可疑猜想:compress 在构造 DACFile 后还有一次 codes[:, :n_quantizers],看起来像切片太晚;实际 encode 已提前只返回 q 个 stages,所以 q1/q4/q12 文件确实分别含 1/4/12 个 codebooks。冗余切片不是功能 bug。
真正的边界 bug 是另一件事:q=13 没有报错,而是循环完 12 级后静默返回 12 个 codebooks。q=0 会落入空 stack 一类非语义错误。故合法接口必须由 EvoSpeech 明确验证 1 <= q <= 12,不可相信一个未校验的命令行请求值;报告码率也必须从真实 payload 的 code shape 计算。
训练 mode 下逻辑不同。代码先为 batch 中每个 example 设 n_codebooks+1,再随机采样 1..n_codebooks 的 depth,只把前 batch_size × quantizer_dropout 个 examples 换成随机值。最终 16/44 kHz config 都设 dropout 0.5。这实现了论文的“不是所有样本都随机截断”,目的是让 full-depth 路径仍收到足够训练。但 D2 没有重训或验证论文所称的低率质量收益。
decoder 与 from_codes¶
from_codes 是 source-blind contract 的核心。它只看 [B,q,T] 整数:第 i 个 slice 在第 i 本 embedding 中查 8 维向量,经过该级 out_proj 回到 1024 维,然后全部相加。它不需要 encoder latent、residual、原 waveform 或 ASR 文本。D2 的 decoder worker 参数只有 payload directory、output directory 和固定 checkpoint;没有 source path。
Decoder 首先用 kernel 7 卷积扩到 decoder_dim=1536,再按 [8,5,4,2] 逐级 ConvTranspose1d 上采样。每个上采样后有 dilation 1/3/9 三个 residual units;结尾 Snake、kernel 7 Conv1d 和 Tanh 输出 waveform。理论 rate product 同样是 320,但固定 16 kHz 模型在一个非常具体的边界上没有返回预期长度。
D2 用 6400 个样本(正好 20 hops)复现:official compress 正常产生 codes,official decompress 的 decoder 实际只有 6392 个 samples,随后 reshape(-1, 1, 6400) 报 RuntimeError。6413 样本路径则先生成 6720 长重构并安全 slice 到 6413。项目现有 adapter 对 exact-hop baseline 明确把 metadata length 暂减 8,让上游完成 loudness normalization,再在右侧补 8 个零样本,最终恢复 N。那 8 samples 是 0.5 ms;它是 workaround,不是“官方 bit-perfect 行为”,未来报告必须保留 decoder_tail_padding_samples。
这件事也提醒我们:神经 codec 的 stride 乘积相同,不代表 transpose-convolution 边界与 get_delay 一定在每个长度上闭合。D2 的 mechanism tests 必须包含长度模 hop 的边界类,而不只是随机一条“能出声音”的 WAV。
DACFile:representation 不是 file,也不是 network bitstream¶
DACFile.save 构造 Python dict:codes 被转为 np.uint16;metadata 保存 loudness、原长度、sample rate、chunk length、channels、padding 和 dac_version;然后 np.save 整个 object。DACFile.load 使用 allow_pickle=True 读回。它能被独立进程完整解码,因此是“真实 artifact”;但它不是紧凑 bitstream,更不是适合不可信输入的协议。
本地非语音 probe 的结果最能说明为什么要分账:
| point | RVQ representation bits | complete .dac bytes |
serialized size换算,仅该短样本 |
|---|---|---|---|
| q1 | 210 bits | 592 bytes | 11.82 kbps |
| q4 | 840 bits | 718 bytes | 14.33 kbps |
| q8 | 1680 bits | 889 bytes | 17.74 kbps |
| q12 | 2520 bits | 1057 bytes | 21.09 kbps |
最后一列不是模型 nominal rate,只是 file_bytes × 8 / 0.4008125 s。为什么 q1 文件反而远高于 0.5 kbps?因为极短文件的 pickle/NumPy metadata 固定开销占主导,indices 还按 uint16 储存。长音频时固定开销摊薄,但每个 10-bit symbol 仍至少用 16 storage bits,除非另加 bit-packing。以后 D5 应同时报告:
- representation bits:算法理论上必须表达的 q×10×frames;
- serialized artifact bytes:真正落盘
.dac的完整大小; - checkpoint/state bytes:端点自身的约 296.7 MB 状态;
- 若进入通信:packet header、FEC、加密和 transport overhead。
把这些混成一个“码率”会制造两个方向的假象:只报 representation 会隐藏实际文件开销;只报短文件 bytes 又会错误贬低算法的稳定态表示率。正确做法不是选一个有利口径,而是保留多本账。
chunked compress 不是 causal streaming¶
CodecMixin.compress 对长于 window 的信号会关闭卷积 padding,在两端补模型 delay,按 window 处理并拼 codes;decompress 按 chunk_length 逐块重建。它解决的是“长文件不要一次吃光 GPU memory”,并不自动给出通信系统所需的 causality。
源码没有规定每帧何时可发、decoder lookahead、首包 latency、丢包状态恢复、random access、bit error 行为、packet header 或跨 chunk overlap 的协议。win_duration=1.0 也不是“1 秒算法延迟”的规范值,只是默认内存窗口。故 DAC 可以进入离线/准流式能力比较,但在没有单独时延测量与 transport contract 前不能标为 streaming codec。
training-only adversary:为何 objective proxy 不能单独当裁判¶
推理 checkpoint 只有 encoder、quantizer 和 decoder;discriminator 不进入 bitstream 或解码端。训练时却有两类重要 adversary:
- MPD:把 waveform 按 periods 2/3/5/7/11 reshape 成二维结构,捕捉周期纹理;
- MRD:对 complex STFT 保留 real/imaginary 两通道,在 window 2048/1024/512 上按五个频带分别卷积,最后合并。
MRD 的价值不是“再加一个频谱 loss”。普通 magnitude loss 可忽略 phase;complex input 让 discriminator 有机会惩罚相位导致的瞬态/波形失败;分频带又让高频弱成分不被低频大能量淹没。最终 Discriminator 先去 DC、peak normalize,再把每个 view 的 feature maps 交给 GAN loss。
训练循环先用 detached reconstruction 更新 discriminator,再计算 generator 的 multi-scale mel、adversarial score、feature matching、commitment 和 codebook loss。release 里的 GANLoss 实际是 least-squares form:fake score 平方、real 与 1 的距离平方;论文文字/摘要口径必须以固定实现为准,不能因为常见 GAN 教材写“hinge”就替换代码事实。最终配置的权重是 mel 15、feature 2、generator adversarial 1、commitment 0.25、codebook 1。
论文最重要的警告来自 no-adversarial ablation:作者报告它的 ViSQOL 4.12 甚至高于 baseline 3.96,但 SI-SDR 只有 1.07 vs 9.12、bitrate efficiency 62% vs 99%,并有 buzzing/phase failure。这不是“ViSQOL 没用”,而是任何单一 proxy 都可能奖励一条感知上坏掉的捷径。未来 AI evolution 如果只优化 ViSQOL,很可能主动发现这种 reward hack。因此至少要并列 intelligibility、mel/STFT、ViSQOL、speaker/semantic contracts,并用定期盲听校准前沿区域。
multi-scale low-hop mel 与 release training loop¶
MelSpectrogramLoss 为每个 window 建 hop = window/4,用对应的 mel count 计算谱,再对 clamp 后的 log power 做 L1。最终 config 使用 windows 32/64/128/256/512/1024/2048,mels 5/10/20/40/80/160/320。短 window 配少 mel bins,长 window 配多 bins,避免在低频率分辨率上硬塞大量空洞 mel cells。
scripts/train.py 用两个 AdamW 和两个 ExponentialLR。每 step:生成 reconstruction;更新 discriminator;计算各 generator losses;按 config lambda 加权;clip 两侧 gradient;更新 generator。validation 只输出 mel、STFT、waveform losses;checkpoint 的“best”依据 validation mel loss。final config 记录 seed 0、400k iterations、batch 72、CUDA、domain folders 和 transforms。
但“配置齐全”不等于“可复训同一个模型”。源码没有打包实际数据 snapshot、每个文件 hash、exact loader sequence、最终 optimizer state、完整 CUDA/cuDNN/hardware log。文件夹名还含内部路径如 /data/read_speech。因此今后如果我们在云 GPU 用这个 config 训练,它是一个新的 DAC-family experiment,不应称为恢复官方 checkpoint。
official evaluation 代码到底固定了多少¶
scripts/evaluate.py 做了三件明确的事:发现 input audio;按相同 basename 找 output;把每对音频分别 resample 到 22.05 与 44.1 kHz,然后调用 mel、STFT、waveform、SI-SDR、ViSQOL audio 和 ViSQOL speech。它输出 CSV。scripts/get_samples.py 则加载 generator,允许 DAC 传 n_quantizers,把 reconstruction normalize 到 source loudness 后写同名文件。
它没有固定论文的 3000 个十秒 excerpt identities 和 offsets,也没有提供 EnCodec/Lyra/Opus paper baseline 的确切重构。更关键的是,release 没有 freeze 论文时的 audiotools commit 与 ViSQOL binary/model identity。当前我们用官方 ViSQOL v3.3.3 和自己的 manifest 运行,会得到有价值的“当前固定协议结果”,但除非先在作者 artifact 上校准,否则不能因为函数名同为 visqol 就说 Table 3 已复现。
主观部分也一样。scripts/mushra.py 确实有 reference player、condition players、0–100 sliders、user tracker 和 CSV save;但 condition ordering/sample selection委托给 audiotools.preference。仓库没有 exact assignments、participant raw votes、排除规则或 CI replay。因此 D1 可以忠实记录 Figure 3,D3/D4 只能把其标为 author result,不能伪造“重跑官方 MUSHRA”。
参数、state、codes、artifact 的四本账¶
选定 checkpoint 的 74,175,906 parameter elements 分解为:
- encoder:21,521,536;
- quantizer:319,680;
- decoder:52,334,690。
quantizer 很小并不表示它不重要:每级的 in/out projections 把 8 维 lookup 与 1024 维生成空间接起来;真正大多数容量在 neural analysis/synthesis transforms。所有 selected inference state 都是 float32,总 296,703,624 bytes;checkpoint 文件因封装为 296,820,733 bytes。
这与 runtime activations 和 transmitted codes 是不同对象。对 21 frames 的 q12 probe,encoder latent 有 1×1024×21 floats,projected latents 有 1×96×21 floats,但 payload 只需 252 个 indices。我们不传 projected latent,也不传 1024-D quantized tensor;decoder 用 checkpoint 里的 embeddings/projections从 indices 重建。若把 activation memory算成“bitstream”,或者把 checkpoint size从通信码率中隐藏,都不对。能力比较至少同时给:模型参数/状态、peak runtime memory、representation rate、serialized transport rate、RTF/energy。
确定性 mechanism trace¶
scripts/trace_dac_code.py --check 会重新执行整条证据链,而不是只校验 JSON schema。流程是:
- hash 20 个固定 source files、checkpoint、环境 lock 与 adapter;
- 在 isolated DAC Python/CPU 进程生成三频加 chirp 的 float32 非语音 probe;
- 运行 encoder、直接 RVQ 与
compress,确认两条路径 codes 相同; - q1/q4/q8/q12 分别保存官方
.dac; - 第二个 fresh encoder 重复生成并比较完整文件 bytes;
- 两个 fresh decoder 只读第一组 payload 与 checkpoint,比较完整 float32 reconstruction bytes;
- 单列 q13 与 6400-sample exact-hop 边界行为。
固定本机 CPU 结果:四个 payload 的 SHA-256 分别以 0b85bb26、ce62882d、ecd69a45、d86fcac9 开头;重复 serialization 全部相同;四个 decoded hashes 也分别完全一致。codes 的 min/max 都处于 0..1023。q12 本次实际 max 1020,而不是 1023,这只描述 probe,不表示 1021–1023 未被训练或不可用。
选择 CPU 是为了机制 trace 稳定、方便 CI/replay;D5 benchmark 可以用 MPS 加速。D2 只宣称固定环境内 deterministic,不把它外推成 CUDA、MPS、另一版 PyTorch 或另一架构的 bit equality。浮点卷积与设备 kernel 可能改变临界 nearest-neighbour 选择,所以跨设备复现应比较 metric tolerance,而非先验要求同一 SHA。
release surface gaps:源码没有替我们证明什么¶
D2 固定了十二个 gap,其中最影响后续设计的是:
- endpoint mismatch:本地 16 kHz q12 不是论文 44.1 kHz 8 kbps;
- exact-hop N−8:官方 16 kHz decompress 对某些合法长度崩溃;
- q upper bound 静默饱和:rate request 必须 evaluator 自验;
- pickle trust:官方
.dac不能成为不可信 candidate payload; - 无 bit-packed/network contract:representation/file/transport 三账不可合并;
- chunking 非 causal streaming:没有低延迟、丢包或 random-access 证据;
- 3000 excerpts 不可定位:数据集名字不是 manifest;
- metric dependency 未冻结:当前 ViSQOL 与 paper-time 调用不能默认等价;
- MUSHRA raw data 缺失:UI 不是完整 subjective reproduction;
- 训练环境不闭合:config 不等于 checkpoint reproduction;
- 无语言/实体 contract:domain quality 不能替代中文/英文语义正确;
- 无自动科研框架:DAC 只是 candidate mechanism/teacher,不是自进化系统。
这些 gap 不是否定 DAC;它们恰好把值得借鉴的算法与不应继承的科研债务分开。DAC 的代码非常适合做 architecture search seed,因为层次清楚、rate knob 真正可执行、loss/discriminator ablation 有信息;但 evaluator、protocol、security 和 reproduction identity 必须由 EvoSpeech 补齐。
对 EvoSpeech 原创 baseline 与 AI evolution 的直接启发¶
第一,搜索对象不应只是一组 layer widths。DAC 展示了四类互相作用的第一性变量:analysis/synthesis transform 的归纳偏置;lookup geometry;hierarchical residual allocation;训练裁判。未来薄 runner 可以让 Agent 提议有限、可审计的改变,例如 codebook_dim 4/8/16、每级不等维、Snake 参数化、q-dropout curriculum、MRD band boundaries、mel scales 或 decoder width,但一次实验必须说明改变哪一本账和预期机制。
第二,搜索必须报告分布而非 best-of-N。量化训练、GAN 与 data order 都有方差;一次偶然高 ViSQOL 不应晋级。至少多 seeds、固定 validation manifest、holdout hidden set,并把 no-evolution、random search、Bayesian optimization 和人工消融作为对照。DAC paper 的 ablation 是 hypothesis source,不是 Agent 可直接抄数字的 oracle。
第三,裁判要能发现“ViSQOL 更高但声音坏了”的候选。自动内环可用 multi-metric Pareto:ViSQOL、mel/STFT、SI-SDR、ASR/critical-entity、speaker similarity、rate、RTF 和 memory。边缘候选再做人类分维盲听。tie 要作为 JND 信息保存,不是丢掉。Breaker 可以专门寻找 transient、phase、high-band、同音实体、否定、数字顺序和语言切换失败。
第四,真正的 low-bit 创新可能来自 SOTA 降维,而不是只在传统 1.2 kbps vocoder 上微调。DAC q1 只有 0.5 kbps representation capacity;它是否仍保持可懂语音需要 D5 实测,不能从 q12 外推。但其 factorized normalized RVQ、强 decoder 与 adversarial training 可能为低位设计提供比“显式 low-bit 模型”更强的 starting point。我们应该同时保留 q sweep 和专用 low-bit anchors,让数据裁决。
第五,未来 CandidateContract 不能照搬 .dac。安全 contract 应由 encoder 输出明确长度、版本、rate ID 和 bit-packed codes;evaluator 独立计 bytes;decoder 只见 payload;schema parser 不执行 pickle;q/depth 在 contract 层验证;exact-hop/empty/truncated/oversized/invalid-code payload 都有 negative tests。这不是先于模型研究的抽象工程,而是防止 AI evolution 通过接口作弊的实验装置。
D2 对 D3/D4/D5 的直接约束¶
D3 protocol 必须至少分两条 endpoint:论文 44.1 kHz author-evaluation reproduction,以及本地 16 kHz checkpoint 的新 evaluation。若拿不到论文 44.1 kHz checkpoint、exact 3000 manifest 或 paper-time metric build,相关 claims 要标 blocked/author-only,不能用 16 kHz D5 数据“代替完成”。
本地 16 kHz 可合法加入 q1/q4/q8/q12 rate sweep,但当前共同 benchmark 已冻结 q12=6 kbps;增加 q 点需形成 protocol revision,避免看完结果再挑有利 rate。每点从 payload 真实 code shape计算 representation bits,同时报告完整 file bytes。短句 .dac overhead 应当保留,因为这是实际官方 artifact;若另做 bit-packed research transport,要作为新实现、单独命名,不能覆盖 upstream 数字。
D4 official evaluation archive 要把 author result、reproduced result、new local result 三类分开。Table 2/3/4 和 Figure 3 只有满足同 endpoint、manifest、baseline artifact、metric identity和统计协议才可称 reproduced。否则我们可以完成“reproduction feasibility audit”,明确哪些资产缺失,并在公开权威 dataset 上产生新的可复验 DAC evaluation。
D5 继续使用公共英文/中文 speech benchmark、固定 Whisper+SenseVoice 多评委和现有 ViSQOL/资源测量。ASR 只跑固定重构一次,缓存 transcript;不为每次页面生成重跑。个人录音保持 optional,不阻塞模型 DoD。听感由公共样本盲听承担,不把作者的 domain-general 宣传自动变成中文关键实体能力。
D2 允许与禁止的结论¶
D2 允许说:固定 16 kHz endpoint 的真实 architecture、参数、hop、RVQ depth 与 code shapes 已经由 release source 和本地 execution 双重验证;q1/q4/q8/q12 都能通过官方 trusted DACFile 在 source-blind fresh process 中独立解码;固定 CPU 环境重复 serialization/decoding bit-exact;发现 q 上界静默饱和和 exact-hop N−8 两个 release behaviors;论文方法到 release 代码已有 20 条可点击映射。
D2 禁止说:DAC 在任何 rate 上达到论文 Table 3;16 kHz q12 等价于 44.1 kHz 8 kbps;当前 .dac bytes 就是网络码率;chunked API 是低延迟 streaming;ViSQOL 或 ASR 单指标代表完整听感;paper MUSHRA 已复现;q1/q4 在语音上可用;本机 CPU SHA 可跨 GPU 保持;官方 pickle 文件可安全接收 candidate 输入。
D2 的价值不是“文档更长”,而是把一个看似简单的 SOTA codec 拆成了可实验的因果部件:宽 convolutional latent 提供生成容量,低维 normalized lookup 提供有效 code usage,residual stages 提供渐进码率,adversarial/multi-scale losses约束代理指标看不到的失败,而 evaluator 和 transport 必须独立于模型补齐。 这才是可以交给后续原创 baseline 与 AI evolution 的知识,而不是一组排行榜数字。
DAC:论文原生复现协议¶
D3 · 论文原生复现协议¶
D3 冻结日期为 2026-07-21。正式 D4 endpoint probe、metric 或 claim verdict 必须在本协议提交之后运行。冻结前只允许做来源审计:下载并 hash 官方资产、读取源码、加载 checkpoint 查看 architecture/parameter identity。这样既能在协议里精确指定对象,又不会先看到“最后分数”再改点位或容差。
一句话裁决¶
DAC 的公开资产比最初判断更好:官方 release 0.0.1 的 weights.pth 确实能加载为论文尺度的 44.1 kHz、hop 512、9-codebook 模型,所以“论文主模型完全没有权重”不成立。D4 可以严格验证这一个 endpoint 的身份与 q2/q3/q6/q9 真实 source-blind smoke。
但“checkpoint 可运行”仍远低于“Table 2–4 已可复现”。论文没有发布 exact 3000-item waveform manifest、每项 offsets/hashes、proposed/baseline reconstruction files、paper-time metric environment、ablation checkpoints 或 listener-level votes。D3 因此预先把 13 个 claim family 分成 4 个 strict/asset-smoke、1 个 approximate rate audit、7 个 blocked paper experiments和 1 个 different-identity D5 track。D4 必须执行这个矩阵,不能拿公共中英 ASR、当前 ViSQOL 或肉耳朵听一批新样本来填 paper table 的空格。
两个 endpoint 必须并列,不能互相替代¶
论文主线是 44.1 kHz、stride 512、9 个 1024-entry codebooks,论文把 full-depth point 显示为约 8 kbps。D3 已在不运行正式 D4 probe 的前提下固定官方 0.0.1 asset:306,717,287 bytes,SHA-256 a88eed82...fb61aa;它加载出 76,651,890 parameters、306,607,560 state bytes、44,100 Hz、hop 512、9 books、8-D lookup。这是 D4 的 paper-scale endpoint。
现有共同 benchmark 使用的是另一个官方 endpoint:release 0.0.5 的 16 kHz checkpoint,hop 320、12 books、74,175,906 parameters,q12 exact representation 6000 bps。它已经有 60 条公共 English/Mandarin 结果,但模型结构、采样率、码本数量、权重 hash 都不同。D3 将它固定为 different_model_identity:它对 EvoSpeech 很重要,却不能补写 44.1-kHz Table 3 或 Figure 3。
这个区分也影响“完成 DAC”这个词。D4 完成的含义是:对公开可重现的 44.1-kHz endpoint identity/smoke 给出严格 verdict,并对不可得的 paper result 逐 claim 给出 blocker;不意味着强行造出一张与论文同数字的表。D5 则可以另行冻结 44.1-kHz q sweep,与 16-kHz q12 同场比较;那会是新的 public evaluation,而不是 paper-native reproduction。
Track A · supplement、release source 与 checkpoint asset identity¶
NeurIPS supplement zip 是最接近 submission-time implementation 的 artifact。它固定为 69,448 bytes、SHA-256 5ded9bc2...64a30。archive 有 126 个 entries:目录、__MACOSX resource forks、一个空 initializer,以及 51 个非空 meaningful files。manifest 对这 51 项逐一记录 path、kind、bytes 和 SHA-256:19 个 Python source、28 个 configuration、4 个 metadata/license。任何 hash 不同都停止 D4。
这里必须保留一个不舒服但重要的许可事实:supplement 内 LICENSE 只有“No License. Reproduction and Distribution is not permitted.”一类边界,后来 GitHub release 才是 MIT。EvoSpeech 不把 supplement code 复制进仓库,只保存 archive/member identity、源 URL 和我们的解读。D4 可在临时目录下载、hash、执行合规审计;不能把 archive 内容重新发布到 Pages。
固定 release harness 另有五项:scripts/evaluate.py、scripts/mushra.py、conf/final/44khz.yml、dac/model/dac.py 和 tests/test_cli.py。其中 submission 与 release 的 evaluate.py 都是 3,051 bytes、同一 SHA-256 f0f79dee...a8bfa。这能严格证明 metric call surface 没在两份 source snapshot 间变化,却不能证明 paper-time audiotools.metrics.quality.visqol 最终调用的 binary/model 与今天相同。
两个 checkpoint asset 都进入 manifest:paper-scale 44.1 kHz 0.0.1 与 local D5 16 kHz 0.0.5。D4 asset preflight 必须重新 hash 本地文件;不从文件名、HTTP 200 或 PyTorch 能加载就推断身份。
Track B · paper-scale 44.1 kHz endpoint 与 q-depth smoke¶
D4 固定使用 22,117 samples、44.1 kHz、确定性多频+chirp 的 float32 非语音 waveform。它刻意不落在 512 的整倍数上,避免把另一个长度边界混入 main smoke。preprocess 应补到 ceil(22117/512)=44 frames。
quantizer depth 在结果前冻结为 q2/q3/q6/q9,原因是它们对应论文 Table 3 的四个 proposed rate档的自然 RVQ stage counts,而不是运行后挑听起来最好的 q。每档必须:
- 真实执行 official encoder 与 RVQ;
- 产生 exact
[1,q,44]integer code shape; - code 范围在 0..1023,落盘为 upstream
uint16DACFile; - 在 fresh decoder process 中只读 payload 与固定 checkpoint;
- 返回 exact 22,117 finite samples;
- 固定 CPU 环境中两次 serialization 与两次 decode 逐字节一致。
任何一档缺失或失败都会使 PN-DAC-44KHZ-QDEPTH-SMOKE 失败,不能用另外三档平均通过。这里没有 ViSQOL、ASR、SI-SDR 或 listening threshold,因为 input 明确不是 quality sample。smoke pass 只说明 paper-scale checkpoint 的表示/文件/decoder contract 能执行。
release tests/test_cli.py 的 test_compression 也检查 q3 codes shape 和 uint16 dtype,但其 module setup 使用随机 waveform、会依赖下载 cache,而且完整 reconstruction test 在 CPU 主机上还有 device default 风险。D4 不把这个脆弱测试的“运行方式”偷换为质量 oracle;它会 hash 该 harness source,并用冻结 deterministic worker执行同一核心行为。若另行执行 upstream test,结果作为附加 release test 行保存,不改变 frozen smoke threshold。
paper rate label 与 runtime capacity 的近似审计¶
实际 checkpoint 的 frame rate 是 44100 / 512 = 86.1328125 Hz。每个 1024-entry index 需要 10 bits,所以 q2/q3/q6/q9 的 exact capacity 是:
| depth | exact kbps | paper displayed kbps |
|---|---|---|
| q2 | 1.72265625 | 1.78 |
| q3 | 2.583984375 | 2.67 |
| q6 | 5.16796875 | 5.33 |
| q9 | 7.751953125 | 8.00 |
四个 paper labels 比 exact arithmetic 高约 3.2%。这可能来自作者使用近似“约 89 token/s”口径或显示取整,但 D3 不在没有明文依据时替作者发明解释。PN-DAC-PAPER-RATE-LABELS 预分类为 approximate_only:D4 报两列与百分差,不设一个事后宽容阈值把它叫 strict equality。完整 .dac bytes、padding 与 pickle metadata 仍另账,不参与这个 representation capacity 对比。
exact 3000-item evaluation manifest 为什么 blocked¶
论文写明 1000 AudioSet eval、1000 DAPS F10/M10、1000 MUSDB test,每项 10 秒。数据集族和 split 有公开来源:AudioSet 官方 CSV有 video ID/时间,MUSDB18 test 有 50 tracks,DAPS public corpus可取,supplement 的 organize_daps.py 也明确 F10/M10。
缺口在“exact selection”。save_test_set.py 从 AudioDataset 顺序遍历并输出 sample_i.wav 与原路径,但 archive 没有输出的 metadata.csv、没有每个 excerpt offset/hash,也没有当时 audiotools dataset sampler 的固定 revision。AudioSet 原视频还会随时间失效;仅根据今天可下载的 clips 重采样 1000 项,无法知道是否与作者 2023 年的 waveforms相同。MUSDB/DAPS 也没有 exact crop offsets。
因此 PN-DAC-EXACT-3000-ITEM-MANIFEST 在执行前就是 blocked。D4 只记录这些事实,不生成一个“看起来也是 1000+1000+1000”的新 manifest 来冒充作者 manifest。未来若作者发布 metadata/hashes,可以创建 protocol v2;当前公共 FLEURS/AISHELL 等属于 D5。
Table 2 ablation 为什么配置齐全仍 blocked¶
supplement 非常有价值:包含 baseline、no-adv、no-low-hop、no-data-balance、discriminator variants、latent dimension、dropout、model size、downsampling、24kbps 等 configs,还包含 train_no_adv.py。它让我们知道实验变量如何落到代码,D2 已据此理解机制。
但 Table 2 数字需要每一行 exact trained checkpoint、数据 snapshot、data-order/seed、依赖环境与 exact 3000 reconstructions。archive 没有任何 weights 或 result CSV;final release 只给少数最终 endpoint,不给全部 ablations。拿 config 重新训练也不是“复现同一个 checkpoint”:GAN 和 quantizer training 有随机方差,内部数据路径与部分语料版本未闭合,paper final run 的 optimizer state/hardware log 不在 archive。
所以 baseline、ReLU、no-adversarial、no-low-hop、code dimension、EMA、dropout、balanced sampling和 high-rate ablation统一 blocked_before_execution。D4 必须保留作者 reported values,不把“配置文件 hash 通过”写成“ablation result passed”。
Table 3/4 objective baseline comparison 为什么 blocked¶
scripts/evaluate.py 会对 22.05/44.1 kHz 两个 resample target计算 mel、STFT、waveform、SI-SDR、ViSQOL audio 与 speech。执行函数公开不意味着 metric identity闭合:submission 时 audiotools 是 private;paper没有冻结其 commit、resampler、ViSQOL binary/model、TensorFlow/build 或平台。
更大的缺口是 reconstruction matrix。Table 3 需要 proposed、EnCodec、Lyra、Opus 的 exact binaries/checkpoints/commands和逐 item输出;Table 4 需要 matched 24-kHz proposed/EnCodec endpoints。release没有 baseline reconstructions或完整 command manifest。今天选择新版 Opus、当前 EnCodec checkpoint和一批新 crops跑相同函数,只能得到新的 cross-model benchmark,不能计算严格 paper delta。
因此 Table 3 objective/baseline与 Table 4 matched 24-kHz均 blocked。官方 44.1-kHz checkpoint的存在让我们可验证 proposed endpoint,而不是凭空恢复所有 baseline experiment identity。
bitrate efficiency 不能被理论 bits 替代¶
论文的 bitrate efficiency 是 empirical codebook entropy之和除以 available code bits。supplement 的 compute_entropy.py 取 folder排序前 1024 files,为每个文件找一秒 salient excerpt,拼 codes后逐 book bincount。它依赖 exact folder contents/order、salient excerpt实现、checkpoint和audiotools。
D2/D4 可以严格计算 q×10×frame-rate capacity,也能统计新公共集的 empirical entropy;后者可成为新实验。但没有 paper exact evaluation codes 时,不能复现 Table 2 的 99%、62% 等效率数字。PN-DAC-BITRATE-EFFICIENCY预先 blocked,防止我们用“所有 code indices合法”或“理论最大bits”冒充有效码本利用率。
MUSHRA-inspired expert study 为什么 UI 不等于复现包¶
release mushra.py 公开了 0–100 sliders、optional reference player、condition players、per-user CSV写入和sample completion tracking。它证实作者界面大致如何工作,但 randomization/sample assignment委托给 audiotools.preference;archive没有 exact 12 samples/listener、condition order、hidden reference mapping、ten listeners的raw votes、设备、screening、exclusion或CI analysis script。
因此 Figure 3 与“proposed显著优于EnCodec”的 subjective result在D4保持 blocked。用户未来听公共样本仍很有价值,但属于 EvoSpeech盲听校准;不能标作原论文听测复现。个人录音继续是 optional,不进入这个 gate。
training regeneration 与 paper result confirmation 是两件事¶
final config记录 architecture、loss scales、400k iterations、seed 0、CUDA、batch、domain folders和transforms。training source公开;这使新研究能以 DAC 为起点。它仍缺 exact corpora revisions/hashes、内部数据、完整 preprocessing output、balanced loader schedule在 fixed audiotools版本中的行为、final run环境、optimizer checkpoints和all seeds。
D4 对training只做 asset/config identity;PN-DAC-TRAINING-REGENERATION blocked。以后原创 baseline可移植这些机制并在云GPU重训,但要明确是新 experiment capsule。不能因为我们的loss曲线合理就“验证作者30小时/400k step结果”。
D4 的固定输出与统计规则¶
D4 必须生成五个文件:summary JSON、逐项 JSONL、Markdown report、完整 run log、paper-scale endpoint identity JSON。runner在第一项metric前验证supplement 51 members、五个 harness和两个 checkpoint identities。
统计单位是有限 deterministic asset或endpoint/depth case:51 supplement members、5 harness sources、2 checkpoints、4 q-depths和13 claim families。identity/smoke没有抽样,因此不计算置信区间;报告 passed/failed/missing counts。预分类的 blocked不是missing:它应作为带 author value和blocker的正式 item出现。strict case缺行必须失败,不能从 denominator删除。
正式 D4 预计的结论形状在结果前就确定:四个 asset/endpoint/smoke claim可 passed或failed;rate label只能 approximate/failed;七个 paper experiment blocker只能 blocked;16-kHz common benchmark只能 out_of_scope。D4 gate passed的含义是所有这些要求被完整执行/分类,不是13条全为passed。
D3 允许与禁止的结论¶
D3 允许说:paper-scale官方44.1-kHz checkpoint已找到并hash-bound;严格endpoint/q-depth smoke具备可执行条件;submission supplement的51个meaningful files、release harness、两个endpoint和13个claim family已在D4前冻结;exact 3000 items、baseline/ablation reconstructions、metric builds和raw votes缺失,因此严格headline quality reproduction目前不可能。
D3 禁止说:44.1-kHz checkpoint已经通过D4;任何paper metric已经复现;16-kHz q12能代替44-kHz q9;当前ViSQOL与paper-time数值等价;新公共集可以生成Table 3 delta;config等于trained ablation;UI等于MUSHRA votes;blocked表示作者结果错误;以及asset hash通过就代表感知质量通过。
下一步只有在本D3 commit推送后才启动D4 runner。D4先执行所有严格asset/endpoint cases,再原样生成approximate、blocked和out-of-scope items。用户本轮不需要录音、安装软件或提供API。
DAC D4 · paper-native execution report¶
Status: passed. 这里的 passed 表示 D3 冻结的协议被完整执行和裁决;它不表示论文 Tables 2–4 或 Figure 3 的 headline quality values 已被复现。
资产审计¶
正式证据共 63/63 行通过:1 个临时下载的 supplement archive、51 个 meaningful supplement members、5 个 fixed release harness sources、2 个 checkpoints,以及 4 个 q-depth smoke。Supplement 的禁分发边界继续生效:仓库只保存 identity,不保存 archive 或源码副本。
Submission 与 release 的 scripts/evaluate.py 均为 3,051 bytes 且 SHA-256 相同。它调用 mel、multi-scale STFT、waveform L1、SI-SDR 与 ViSQOL audio/speech,并分别重采样到 22.05/44.1 kHz。这证明 evaluation call surface identity,不证明 paper-time audiotools/ViSQOL binary identity。
44.1 kHz paper-scale endpoint¶
官方 0.0.1 checkpoint 严格加载为 44,100 Hz、hop 512、9 个 1024-entry / 8-D codebooks、76,651,890 learned parameters 和 306,607,560 state bytes。执行固定为 CPU;probe 是非语音 synthetic waveform,因此下表是 mechanism smoke,not a perceptual-quality score。
| depth | code shape | exact kbps | paper label | .dac bytes |
serialize repeat | source-blind decode |
|---|---|---|---|---|---|---|
| q2 | [1, 2, 44] |
1.72265625 | 1.78 | 726 | exact | 22,117 finite samples, exact repeat |
| q3 | [1, 3, 44] |
2.58398438 | 2.67 | 817 | exact | 22,117 finite samples, exact repeat |
| q6 | [1, 6, 44] |
5.16796875 | 5.33 | 1081 | exact | 22,117 finite samples, exact repeat |
| q9 | [1, 9, 44] |
7.75195312 | 8.00 | 1345 | exact | 22,117 finite samples, exact repeat |
完整 .dac bytes 含 metadata/padding/NumPy container overhead,不等于 q×10-bit representation;两者继续分账。Decoder 的启动参数只有 trusted payload directory、固定 checkpoint 与 output path,没有 source waveform path。
rate-label audit¶
| depth | exact kbps | paper displayed kbps | paper above exact |
|---|---|---|---|
| q2 | 1.72265625 | 1.78 | 3.3288% |
| q3 | 2.58398438 | 2.67 | 3.3288% |
| q6 | 5.16796875 | 5.33 | 3.1353% |
| q9 | 7.75195312 | 8.00 | 3.1998% |
四个 label 统一保留为 approximate;没有设置事后 tolerance 将其声明为 strict equality。
13 个 claim family 的正式裁决¶
| claim | class | verdict | evidence / blocker |
|---|---|---|---|
PN-DAC-SUPPLEMENT-ASSETS |
strict_primary_artifact_check_not_headline_metric |
passed | Official archive plus all 51 meaningful members matched the frozen byte/hash manifest; no supplement content is vendored. |
PN-DAC-EVALUATION-SOURCE-IDENTITY |
strict_primary_artifact_check_not_headline_metric |
passed | Submission and release evaluate.py are byte-identical; the source calls mel, STFT, waveform, SI-SDR and ViSQOL audio/speech at 22.05 and 44.1 kHz. |
PN-DAC-44KHZ-ENDPOINT-IDENTITY |
strict_reproducible |
passed | Official 0.0.1 checkpoint matched its frozen hash and loaded with the complete frozen paper-scale architecture/state identity. |
PN-DAC-44KHZ-QDEPTH-SMOKE |
strict_reproducible |
passed | q2/q3/q6/q9 all produced exact [1,q,44] codes and byte-repeatable source-blind 22117-sample finite CPU decodes. |
PN-DAC-PAPER-RATE-LABELS |
approximate_only |
approximate | Paper display rates and exact checkpoint-derived capacities are reported side by side; they are approximate labels, not strict equalities. |
PN-DAC-EXACT-3000-ITEM-MANIFEST |
blocked_before_execution |
blocked | No exact waveform/source/offset/hash/preprocessing manifest was published. |
PN-DAC-TABLE2-ABLATIONS |
blocked_before_execution |
blocked | Configs exist, but exact trained ablation checkpoints, run identities and evaluation outputs do not. |
PN-DAC-TABLE3-OBJECTIVE-BASELINES |
blocked_before_execution |
blocked | Exact 3000 references, reconstruction matrix, baseline commands and paper-time metric build are unavailable. |
PN-DAC-TABLE4-MATCHED-24KHZ |
blocked_before_execution |
blocked | Matched proposed/EnCodec endpoint identities, reconstruction pairs and metric environment are unavailable. |
PN-DAC-BITRATE-EFFICIENCY |
blocked_before_execution |
blocked | Exact ordered codes and entropy environment are unavailable; theoretical capacity is not substituted. |
PN-DAC-MUSHRA-EXPERT-STUDY |
blocked_before_execution |
blocked | Exact stimuli assignments, listener-level votes, devices, screening and CI replay are unavailable. |
PN-DAC-TRAINING-REGENERATION |
blocked_before_execution |
blocked | Exact data snapshot, preprocessing, run environment, complete checkpoints and optimizer state are unavailable. |
PN-DAC-CURRENT-16KHZ-COMMON-BENCHMARK |
different_model_identity |
out_of_scope | Existing public benchmark belongs to the distinct 16-kHz 0.0.5 q12 endpoint and is reserved for D5. |
Verdict 分布:4 passed、1 approximate、7 blocked、1 out_of_scope。七个 blocker 是 D3 执行前已冻结的缺失证据,不因 smoke 成功而消失;blocked 也不表示作者结论被反驳。
边界与下一步¶
D4 没有运行 Whisper、SenseVoice、owner recording、fresh ViSQOL、主观听测或训练。原因不是省略验证,而是这些都不能补成论文原生 Tables 2–4。现有 16-kHz q12 英中公共结果属于不同 endpoint;D5 将在预先冻结的新 common-benchmark contract 下归档它,并决定是否增加 44.1-kHz q sweep。
可机器审计的 endpoint identity 在 ../measurements/d4_endpoint_identity.json;逐项证据、summary 与完整执行日志在同目录结构化文件中。
DAC D5 · 公共统一横评结果¶
状态:passed。这是已完成共同实验的确定性模型级归档,不是一次新的 DAC、Whisper、SenseVoice、ViSQOL 或其他 evaluator 运行。 60 个逐样本 JSON 对象与父证据逐字段、逐顺序相等;唯一 aggregate、codec-audit rate object 与固定 10,000-replicate bootstrap CI 原样保留。
唯一冻结点(30 英 + 30 中)¶
| 点位 | representation bps | trusted .dac bps |
container overhead | endpoint state | ViSQOL | STOI | SI-SNR | WavLM | Resemblyzer | enc ×RT | dec ×RT |
|---|---|---|---|---|---|---|---|---|---|---|---|
dac_6kbps |
6003.3 | 10320.1 | +71.91% | 296,703,624 B | 4.5489 | 0.9726 | -17.86 dB | 0.9938 | 0.9909 | 0.53 | 0.77 |
这里的 representation_bps 是 q12 的 10-bit RVQ symbols,包含尾帧 padding 后除以原时长;trusted .dac bps 是完整 NumPy/pickle DACFile。后者平均高 +71.91%,主要是短句上的未 bit-pack code array 与容器/metadata 摊销,不能当成一个经过设计的网络 packet format。
296,703,624 state bytes 是同一 checkpoint 分别驻留在 encoder 和 decoder endpoint 的共享成本,不是每句 payload,也不应把两端简单相加后称为模型参数。模型有 74,175,906 learned elements;源码、Python 环境和 adapter footprint 另账。
语言条件、内容评委与 95% CI¶
| 语言 | ViSQOL [95% CI] | STOI [95% CI] | Whisper ΔER [95% CI] | SenseVoice ΔER [95% CI] | F0 RMSE Hz [95% CI] |
|---|---|---|---|---|---|
| en | 4.4760 [4.4589, 4.4929] | 0.9751 [0.9706, 0.9788] | +0.0074 [+0.0011, +0.0160] | -0.0092 [-0.0188, -0.0019] | 4.5814 [3.6489, 5.5498] |
| zh | 4.6218 [4.5967, 4.6480] | 0.9701 [0.9640, 0.9755] | +0.0046 [-0.0206, +0.0263] | +0.0041 [-0.0120, +0.0233] | 9.0887 [5.3479, 14.3176] |
ΔER = decoded error rate − original-audio error rate。英文上 Whisper 为 +0.00745 且 CI 在零以上,SenseVoice 却为 −0.00921 且 CI 在零以下;两个评委方向相反。负值不表示 codec 改善了语义,只表示该 ASR 在这批 reconstruction 上偶然更接近文本。中文两者的 CI 都跨零。这个结果直接支持“双 ASR + reference baseline”,而不是挑一个看起来更好的 API。
原始中文音频上的 reference error 本来就相差很大:Whisper CER mean 0.2617,SenseVoice CER mean 0.0494。D5 因此保留两套原音 hypothesis 与基线;绝对 CER 不能脱离 evaluator qualification 比较。
从这个模型学到什么¶
- DAC 是能力教师,不是当前部署答案。 约 6.0 kbps representation 下,ViSQOL 4.5489、STOI 0.9726、WavLM 0.9938、Resemblyzer 0.9909,说明 normalized factorized RVQ + large generator 在低离散率下保住了很强的感知、可懂度与 speaker proxy。
- 表示优秀不等于系统便宜。 完整 trusted DACFile 平均 10.32 kbps,较 representation 高 71.91%;checkpoint state 为 296.7 MB;本机 encode 0.53× realtime、decode 0.77× realtime,二者均慢于实时。原创系统若只追求 codec score,会忽略 transport、模型先验和运行时三个主要成本。
- SI-SNR 不能单独裁决生成式 codec。 全体 SI-SNR 为 −17.86 dB,却同时有很高 ViSQOL/STOI/speaker proxies;卷积 generator 可以恢复感知相似、但相位/逐样本不对齐的波形。用 SI-SNR 作为 AI 进化唯一 reward 会错误淘汰这类候选。
- 语言分数不是语言因果。 中文 ViSQOL 4.6218 高于英文 4.4760,但中文 F0 RMSE 9.09 Hz 也高于英文 4.58 Hz;LibriSpeech 与 FLEURS 的说话人、录音和采样规则不同,不能据此宣布 DAC 更适合中文。
- 值得迁移的是机制,不是体量。 对原创 baseline 最值得借鉴的是低维 normalized lookup、宽 latent 与 code space 解耦、residual stage dropout、multi-period/multiband discriminators 和多域训练;不应直接复制 74M-parameter、非流式的完整 generator。
传输与安全边界¶
父实验的 decoder 是 source-blind:60/60 rows 均保存 decoder_received_source_path=false,并具有独立 payload/decoded SHA-256。但 upstream DACFile.load 使用 allow_pickle=True;本结果只审计可信 baseline artifact。未来 CandidateContract 必须使用安全、显式、可独立计字节的候选格式,不能把 .dac pickle 暴露给不可信提交。
16-kHz release-0.0.5 q12 与 D4 的 44.1-kHz release-0.0.1 q9 始终是两个模型点。D5 的 speech quality 数字不能补写论文 Tables 2–4;D4 的 synthetic q-depth smoke 也不能反向补成 D5 quality score。
明确没有证明什么¶
D5 没有复现论文的 3000-item evaluation、Tables 2–4、MUSHRA 或训练;没有验证 44.1-kHz speech quality、噪声、丢包、误码、对话、长音频、关键实体、六语泛化、流式延迟、移动端或 GPU 性能。 自动质量、内容、speaker 与 expression proxies 不等于人的自然度、身份、表达和总体偏好。个人录音仍是可选 D6 扩展,不阻塞本 Gate。 D5 passed 的准确含义只是:DAC 16-kHz q12 的公共 60-row benchmark 档案完整、来源明确,并能由 15 个冻结父/模型证据确定性重建。
DAC D5 · 公共统一横评结果¶
状态:passed。这是已完成共同实验的确定性模型级归档,不是一次新的 DAC、Whisper、SenseVoice、ViSQOL 或其他 evaluator 运行。 60 个逐样本 JSON 对象与父证据逐字段、逐顺序相等;唯一 aggregate、codec-audit rate object 与固定 10,000-replicate bootstrap CI 原样保留。
唯一冻结点(30 英 + 30 中)¶
| 点位 | representation bps | trusted .dac bps |
container overhead | endpoint state | ViSQOL | STOI | SI-SNR | WavLM | Resemblyzer | enc ×RT | dec ×RT |
|---|---|---|---|---|---|---|---|---|---|---|---|
dac_6kbps |
6003.3 | 10320.1 | +71.91% | 296,703,624 B | 4.5489 | 0.9726 | -17.86 dB | 0.9938 | 0.9909 | 0.53 | 0.77 |
这里的 representation_bps 是 q12 的 10-bit RVQ symbols,包含尾帧 padding 后除以原时长;trusted .dac bps 是完整 NumPy/pickle DACFile。后者平均高 +71.91%,主要是短句上的未 bit-pack code array 与容器/metadata 摊销,不能当成一个经过设计的网络 packet format。
296,703,624 state bytes 是同一 checkpoint 分别驻留在 encoder 和 decoder endpoint 的共享成本,不是每句 payload,也不应把两端简单相加后称为模型参数。模型有 74,175,906 learned elements;源码、Python 环境和 adapter footprint 另账。
语言条件、内容评委与 95% CI¶
| 语言 | ViSQOL [95% CI] | STOI [95% CI] | Whisper ΔER [95% CI] | SenseVoice ΔER [95% CI] | F0 RMSE Hz [95% CI] |
|---|---|---|---|---|---|
| en | 4.4760 [4.4589, 4.4929] | 0.9751 [0.9706, 0.9788] | +0.0074 [+0.0011, +0.0160] | -0.0092 [-0.0188, -0.0019] | 4.5814 [3.6489, 5.5498] |
| zh | 4.6218 [4.5967, 4.6480] | 0.9701 [0.9640, 0.9755] | +0.0046 [-0.0206, +0.0263] | +0.0041 [-0.0120, +0.0233] | 9.0887 [5.3479, 14.3176] |
ΔER = decoded error rate − original-audio error rate。英文上 Whisper 为 +0.00745 且 CI 在零以上,SenseVoice 却为 −0.00921 且 CI 在零以下;两个评委方向相反。负值不表示 codec 改善了语义,只表示该 ASR 在这批 reconstruction 上偶然更接近文本。中文两者的 CI 都跨零。这个结果直接支持“双 ASR + reference baseline”,而不是挑一个看起来更好的 API。
原始中文音频上的 reference error 本来就相差很大:Whisper CER mean 0.2617,SenseVoice CER mean 0.0494。D5 因此保留两套原音 hypothesis 与基线;绝对 CER 不能脱离 evaluator qualification 比较。
从这个模型学到什么¶
- DAC 是能力教师,不是当前部署答案。 约 6.0 kbps representation 下,ViSQOL 4.5489、STOI 0.9726、WavLM 0.9938、Resemblyzer 0.9909,说明 normalized factorized RVQ + large generator 在低离散率下保住了很强的感知、可懂度与 speaker proxy。
- 表示优秀不等于系统便宜。 完整 trusted DACFile 平均 10.32 kbps,较 representation 高 71.91%;checkpoint state 为 296.7 MB;本机 encode 0.53× realtime、decode 0.77× realtime,二者均慢于实时。原创系统若只追求 codec score,会忽略 transport、模型先验和运行时三个主要成本。
- SI-SNR 不能单独裁决生成式 codec。 全体 SI-SNR 为 −17.86 dB,却同时有很高 ViSQOL/STOI/speaker proxies;卷积 generator 可以恢复感知相似、但相位/逐样本不对齐的波形。用 SI-SNR 作为 AI 进化唯一 reward 会错误淘汰这类候选。
- 语言分数不是语言因果。 中文 ViSQOL 4.6218 高于英文 4.4760,但中文 F0 RMSE 9.09 Hz 也高于英文 4.58 Hz;LibriSpeech 与 FLEURS 的说话人、录音和采样规则不同,不能据此宣布 DAC 更适合中文。
- 值得迁移的是机制,不是体量。 对原创 baseline 最值得借鉴的是低维 normalized lookup、宽 latent 与 code space 解耦、residual stage dropout、multi-period/multiband discriminators 和多域训练;不应直接复制 74M-parameter、非流式的完整 generator。
传输与安全边界¶
父实验的 decoder 是 source-blind:60/60 rows 均保存 decoder_received_source_path=false,并具有独立 payload/decoded SHA-256。但 upstream DACFile.load 使用 allow_pickle=True;本结果只审计可信 baseline artifact。未来 CandidateContract 必须使用安全、显式、可独立计字节的候选格式,不能把 .dac pickle 暴露给不可信提交。
16-kHz release-0.0.5 q12 与 D4 的 44.1-kHz release-0.0.1 q9 始终是两个模型点。D5 的 speech quality 数字不能补写论文 Tables 2–4;D4 的 synthetic q-depth smoke 也不能反向补成 D5 quality score。
明确没有证明什么¶
D5 没有复现论文的 3000-item evaluation、Tables 2–4、MUSHRA 或训练;没有验证 44.1-kHz speech quality、噪声、丢包、误码、对话、长音频、关键实体、六语泛化、流式延迟、移动端或 GPU 性能。 自动质量、内容、speaker 与 expression proxies 不等于人的自然度、身份、表达和总体偏好。个人录音仍是可选 D6 扩展,不阻塞本 Gate。 D5 passed 的准确含义只是:DAC 16-kHz q12 的公共 60-row benchmark 档案完整、来源明确,并能由 15 个冻结父/模型证据确定性重建。