Files
AskaEth 4a2d276881
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled
feat(capability): 转码能力包(vendor 纯 Go AMR-NB 解码器 + 黄金向量逐样本对照 + 8 哨兵 + 注册面)
2026-10-05 13:02:28 +08:00

52 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 交叉编译通过。