Files
Cyrene_v2/internal/capability/transcode/amrnb/vendored_export.go
T
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

23 lines
1.4 KiB
Go
Raw 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 包**新增**的导出桥,**不是**上游 `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) }