跳转至

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 做大一点”,而是把几个经常被分散处理的 失败同时看成一个系统问题:

  1. 普通激活与卷积 decoder 容易制造 pitch、periodicity 和 upsampling artifacts;
  2. RVQ 名义上有很多 bits,但 codebook collapse 会让大量 code 根本不用,实际容量远小于账面容量;
  3. quantizer dropout 虽然提供可变码率,却会伤害满码率重建;
  4. 只看幅度谱的 discriminator 不擅长约束 phase,而固定尺度的 mel loss 又会漏掉快速瞬态;
  5. 多域训练数据中的低带宽音源会把整个模型的高频上限拖低。

因此 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 还缺:

  1. 3000 个十秒 test excerpt 的文件 ID、offset 与最终 hash;
  2. paper baseline 的确切 binary/checkpoint revision 与 reconstruction files;
  3. 所有 ablation checkpoint、训练随机种子、硬件与 optimizer continuation state;
  4. audiotools/ViSQOL 的 paper-time exact version 与 ViSQOL model/binary identity;
  5. MUSHRA 的 raw votes、每位 listener 的 12 个样本与 condition assignment;
  6. 论文 confidence interval 的 exact statistics implementation;
  7. 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 的启发

  1. 优化 effective capacity,不只优化 nominal bitrate。 同样 10-bit code,entropy 只有 60% 与接近 100% 是完全不同的模型;未来候选必须报告 codebook usage、per-stage entropy、dead codes。
  2. 把 inductive bias 当可搜索对象。 Snake 证明周期先验可能用较少参数得到更好的 waveform 生成;可继续比较 Snake、SnakeBeta、Fourier feature、harmonic excitation 等受控变体。
  3. 可变码率要联合训练 curriculum。 dropout probability、每层被训练频率、stage-specific loss 与最大深度应该共同搜索,不能假定“删后几层即可”。
  4. phase 与 transient 必须有独立裁判。 ViSQOL 单项在 no-adversarial ablation 上给出误导性 高分;SI-SDR、STFT、瞬态 stress 与人耳校准缺一不可。
  5. 训练采样本身是 codec architecture 的一部分。 如果 batch 没有 full-band evidence,再强的 decoder 也学不到高频;未来中文/多语言、设备、带宽与噪声必须显式均衡。
  6. SOTA-first 不等于照搬大模型。 DAC 的 76M generator 是能力教师;真正值得蒸馏的是 code usage、periodic bias、phase-aware loss 和 balanced sampling,而不是把 296 MB checkpoint 塞进通信端点。[DAC-I-007]
  7. 公共 speech benchmark 与论文 universal-audio benchmark 必须并存。 前者回答通信内容、 speaker 与表达;后者回答 full-band music/environment quality,谁也不能代替谁。
  8. 多语言不是 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,commit c7cfc5d2647e26471dc394f95846a0830e7bec34
  • 源码归档 SHA-256:efb320de...e282094
  • checkpoint:官方 GitHub release 0.0.5weights_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,再计算:

right_pad = ceil(T / hop_length) × hop_length − T

选定端点的 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 → Conv1d(k=7,dilation=d) → Snake → Conv1d(k=1) → residual add

最后一个 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 的函数是:

x + sin²(αx) / (α + 1e-9)

每个 channel 有可学习 α。它给卷积网络显式周期归纳偏置,论文将其与波形周期结构联系起来。固定源码证实 Snake 在 encoder/decoder 多处存在;但“它使 ViSQOL 从 3.83 提升到 3.96”仍然只是 Table 2 作者结果,D2 没有重训 ReLU ablation。

factorized、normalized VectorQuantize

一个 VectorQuantize stage 有三部分:

  1. in_proj:1×1 Conv1d,把 input_dim 1024 投影到 codebook_dim 8;
  2. Embedding(1024, 8):真正用于 lookup 的表;
  3. 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.forwardresidual = 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;decompresschunk_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。流程是:

  1. hash 20 个固定 source files、checkpoint、环境 lock 与 adapter;
  2. 在 isolated DAC Python/CPU 进程生成三频加 chirp 的 float32 非语音 probe;
  3. 运行 encoder、直接 RVQ 与 compress,确认两条路径 codes 相同;
  4. q1/q4/q8/q12 分别保存官方 .dac
  5. 第二个 fresh encoder 重复生成并比较完整文件 bytes;
  6. 两个 fresh decoder 只读第一组 payload 与 checkpoint,比较完整 float32 reconstruction bytes;
  7. 单列 q13 与 6400-sample exact-hop 边界行为。

固定本机 CPU 结果:四个 payload 的 SHA-256 分别以 0b85bb26ce62882decd69a45d86fcac9 开头;重复 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,其中最影响后续设计的是:

  1. endpoint mismatch:本地 16 kHz q12 不是论文 44.1 kHz 8 kbps;
  2. exact-hop N−8:官方 16 kHz decompress 对某些合法长度崩溃;
  3. q upper bound 静默饱和:rate request 必须 evaluator 自验;
  4. pickle trust:官方 .dac 不能成为不可信 candidate payload;
  5. 无 bit-packed/network contract:representation/file/transport 三账不可合并;
  6. chunking 非 causal streaming:没有低延迟、丢包或 random-access 证据;
  7. 3000 excerpts 不可定位:数据集名字不是 manifest;
  8. metric dependency 未冻结:当前 ViSQOL 与 paper-time 调用不能默认等价;
  9. MUSHRA raw data 缺失:UI 不是完整 subjective reproduction;
  10. 训练环境不闭合:config 不等于 checkpoint reproduction;
  11. 无语言/实体 contract:domain quality 不能替代中文/英文语义正确;
  12. 无自动科研框架: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 的知识,而不是一组排行榜数字。

flowchart LR WAV["mono waveform · selected endpoint 16 kHz"] --> PAD["right pad to hop multiple · hop 320"] PAD --> ENC["fully convolutional Encoder · strides 2×4×5×8"] ENC --> LAT["1024-channel latent · 50 frames/s"] LAT --> RVQ{"residual vector quantizer · q=1/4/8/12"} RVQ --> PROJ["per-stage 1×1 projection · 1024 → 8"] PROJ --> NORM["L2 normalize query + 1024-entry codebook"] NORM --> NN["nearest-neighbour index · 10 representation bits"] NN --> RES["project back + subtract residual"] RES -->|"next stage"| PROJ NN --> CODES["integer codes · B×q×frames"] CODES --> DACFILE["trusted DACFile v1 · uint16 + metadata + pickle"] DACFILE --> BLIND["source-blind decoder process"] BLIND --> FROM["from_codes · embed / out_proj / residual sum"] FROM --> DEC["fully convolutional Decoder · rates 8×5×4×2"] DEC --> OUT["waveform · trim/resample/reshape"] SNAKE["Snake periodic activation"] -.-> ENC SNAKE -.-> DEC MPD["multi-period waveform discriminator"] -.-> TRAIN["training only"] MRD["multi-resolution complex-STFT multiband discriminator"] -.-> TRAIN MEL["multi-scale low-hop mel loss"] -.-> TRAIN TRAIN -.-> ENC TRAIN -.-> DEC TRAIN -.-> RVQ BITS["representation ledger · q×10×50 bps"] -.-> CODES BYTES["serialized-file ledger · complete DACFile bytes"] -.-> DACFILE GAP["exact-hop 16-kHz release gap · decoder returns N−8"] -.-> OUT

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.pyscripts/mushra.pyconf/final/44khz.ymldac/model/dac.pytests/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 uint16 DACFile;
  • 在 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.pytest_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.pyAudioDataset 顺序遍历并输出 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 比较。

从这个模型学到什么

  1. DAC 是能力教师,不是当前部署答案。 约 6.0 kbps representation 下,ViSQOL 4.5489、STOI 0.9726、WavLM 0.9938、Resemblyzer 0.9909,说明 normalized factorized RVQ + large generator 在低离散率下保住了很强的感知、可懂度与 speaker proxy。
  2. 表示优秀不等于系统便宜。 完整 trusted DACFile 平均 10.32 kbps,较 representation 高 71.91%;checkpoint state 为 296.7 MB;本机 encode 0.53× realtime、decode 0.77× realtime,二者均慢于实时。原创系统若只追求 codec score,会忽略 transport、模型先验和运行时三个主要成本。
  3. SI-SNR 不能单独裁决生成式 codec。 全体 SI-SNR 为 −17.86 dB,却同时有很高 ViSQOL/STOI/speaker proxies;卷积 generator 可以恢复感知相似、但相位/逐样本不对齐的波形。用 SI-SNR 作为 AI 进化唯一 reward 会错误淘汰这类候选。
  4. 语言分数不是语言因果。 中文 ViSQOL 4.6218 高于英文 4.4760,但中文 F0 RMSE 9.09 Hz 也高于英文 4.58 Hz;LibriSpeech 与 FLEURS 的说话人、录音和采样规则不同,不能据此宣布 DAC 更适合中文。
  5. 值得迁移的是机制,不是体量。 对原创 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 比较。

从这个模型学到什么

  1. DAC 是能力教师,不是当前部署答案。 约 6.0 kbps representation 下,ViSQOL 4.5489、STOI 0.9726、WavLM 0.9938、Resemblyzer 0.9909,说明 normalized factorized RVQ + large generator 在低离散率下保住了很强的感知、可懂度与 speaker proxy。
  2. 表示优秀不等于系统便宜。 完整 trusted DACFile 平均 10.32 kbps,较 representation 高 71.91%;checkpoint state 为 296.7 MB;本机 encode 0.53× realtime、decode 0.77× realtime,二者均慢于实时。原创系统若只追求 codec score,会忽略 transport、模型先验和运行时三个主要成本。
  3. SI-SNR 不能单独裁决生成式 codec。 全体 SI-SNR 为 −17.86 dB,却同时有很高 ViSQOL/STOI/speaker proxies;卷积 generator 可以恢复感知相似、但相位/逐样本不对齐的波形。用 SI-SNR 作为 AI 进化唯一 reward 会错误淘汰这类候选。
  4. 语言分数不是语言因果。 中文 ViSQOL 4.6218 高于英文 4.4760,但中文 F0 RMSE 9.09 Hz 也高于英文 4.58 Hz;LibriSpeech 与 FLEURS 的说话人、录音和采样规则不同,不能据此宣布 DAC 更适合中文。
  5. 值得迁移的是机制,不是体量。 对原创 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 个冻结父/模型证据确定性重建。