// 本文件是本项目为 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) }