52 lines
3.1 KiB
Markdown
52 lines
3.1 KiB
Markdown
# 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` 交叉编译通过。
|