23 lines
1.4 KiB
Go
23 lines
1.4 KiB
Go
// 本文件是本项目为 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) }
|