3.1 KiB
vendored: github.com/VoiceBlender/goamr-nb v1.0.0(AMR-NB 编解码器)
本目录是第三方源码的 vendored 拷贝,不是本项目自研代码。合规要务:随源码保留
了上游的 LICENSE(Apache-2.0)与 NOTICE(Apache-2.0 第 4 条要求),不得删除。
出处(可复现)
| 项 | 值 |
|---|---|
| 仓库 | https://github.com/VoiceBlender/goamr-nb |
| 版本 | v1.0.0(tag) |
| 上游提交 | 635f7966829a0e5d01030355e36aa6792352c57e |
| 上游发布时间 | 2026-06-14T17:25:04Z(模块代理 .info) |
| 取得方式 | 模块代理 https://goproxy.cn/github.com/%21voice%21blender/goamr-nb/@v/v1.0.0.zip(sha256 663140d606646d62d6660e8ff8930725826680b4373055e6aeeab55f858f6067) |
| 许可证 | Apache-2.0(LICENSE + NOTICE 均逐字保留) |
| 上游依赖 | 仅 golang.org/x/sys(simd_amd64.go 用 x/sys/cpu 判 AVX2);本仓库 go.mod 已有 golang.org/x/sys v0.47.0,未新增任何模块依赖 |
为什么是「拷进仓库」而不是 require
上游是 2026-06 新建、1 个提交 / 1 个 tag / 2 star 的仓库。当外部依赖用等于把
构建押在一个随时可能消失的仓库上;而 AMR-NB 是冻结编解码(1999 定标),
拷进来基本不需要维护。因此:go.mod 不加 require,源码在本目录内自持。
拷了什么 / 没拷什么
- 拷了:上游全部 57 个非测试
.go文件 +LICENSE+NOTICE,逐字未改。 - 没拷:上游 48 个
*_test.go(含dsp_diff_test.go这类需要外部 C 参考 harness 的测试)与Makefile/README.md。本项目的正确性证据在../codec_amr_nb_test.go(ffmpeg/libopencore_amrnb 黄金向量),不依赖上游测试。 - 本地新增:
vendored_export.go(导出桥,见其文件头说明)与本文档。 除这两个文件外,本目录内容与上游一致。
已知能力边界(上游自述,实测确认;上游 README 的 bit-exact 说法不覆盖下列)
dsp_decoder.go:13 的注释写明:Cb_gain_average(增益平滑)与自适应相位色散
(phase dispersion)尚未移植;dsp.go:68 写明错误隐藏(bad frame)与 CNG
(SID 舒适噪声)尚未移植。
实测结论(本项目 2026-10-05,fixture 见 ../testdata/):
坏帧 / SID / no-data 帧返回 160 样本静音(不报错、不做隐藏);好帧解码与
opencore-amrnb(ffmpeg libopencore_amrnb)逐字节不一致,样本级差值的量级见
../codec_amr_nb_test.go 里记录的实测基线(SNR 约 16–21 dB,波形相关系数 ≥0.987,
长度/帧数/时长完全一致)。可听、可播、内容正确,但不是参考位精确实现。
另注:dsp.go 顶部的「DSP 目前是 STUBBED」注释已过期(上游未同步)——
dsp_decoder.go 里的解码 DSP 是完整实现,实测能解出真实语音。
交叉编译
纯 Go(CGO_ENABLED=0 可构建)。simd_amd64.s 是唯一非 Go 源文件,
simd_noasm.go 提供 !amd64 的纯 Go 兜底 ⇒ GOOS=linux/darwin 交叉编译通过。