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

This commit is contained in:
AskaEth committed 2026-10-05 13:02:28 +08:00
1 parent 89715d1813
commit 4a2d276881
100 files changed
+11319

No files matched your search

@@ -0,0 +1,22 @@
// 本文件是本项目为 vendored 包**新增**的导出桥,**不是**上游 `v1.0.0` 的内容。
// 出处与许可证见同目录 VENDORED.md(上游 = github.com/VoiceBlender/goamr-nb
// v1.0.0,Apache-2.0,LICENSE / NOTICE 已逐字保留)。
//
// 为什么需要它:上游公开 API 以 **RTP 载荷**(RFC 4867 的 octet-aligned /
// bandwidth-efficient 打包)为输入;而 `.amr` **存储格式**(RFC 4867 §5)是
// 「`#!AMR\n` 魔数 + 每帧『1 字节 ToC + ceil(bits/8) 字节语音位』」,没有 CMR
// 字节、也不用 F 位。调用方要按 ToC 分帧就必须知道每种帧类型占多少字节,而这张
// 表(RFC 4867 Table 1a)在上游包内是未导出的。
//
// 两条路:① 在本项目的 codec 里再抄一份规格表(两处表格会各自漂移);
// ② 在这里开一个只做转发的薄导出。本包选 ②:全仓只有一份帧长表,且它来自被
// vendored 的那份实现本身。
package amrnb
// FrameBytesByFT 返回帧类型 ft(ToC 字节的高 4 位,0..15)在 **octet-aligned**
// 打包下占用的字节数(**不含** ToC 字节本身),以及该帧类型是否合法。
//
// 语音模式返回 ceil(bits/8)(RFC 4867 Table 1a:12/13/15/17/19/20/26/31),
// SID(FT 8)返回 5,SPEECH_LOST(FT 14)与 NO_DATA(FT 15)返回 0,
// 保留值(FT 9..13)返回 false。
func FrameBytesByFT(ft int) (int, bool) { return frameBytesByFT(ft) }