feat(capability): 转码能力包(vendor 纯 Go AMR-NB 解码器 + 黄金向量逐样本对照 + 8 哨兵 + 注册面)
This commit is contained in:
1 parent
89715d1813
commit
4a2d276881
100 files changed
+11319
No files matched your search
@@ -0,0 +1,56 @@
|
||||
package transcode
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// 本文件解析工具面入参(sdk.Tool.Execute 的 args)。它与 SDK 的「args 是一个
|
||||
// JSON 对象」约定对齐:非对象、缺字段、类型不对一律 ErrBadArgs,绝不猜测。
|
||||
// 参数名在 tool.go 的常量块里统一定义。
|
||||
|
||||
// toolRequest 把工具入参解成一次转码请求。
|
||||
//
|
||||
// source 可省略(留空 ⇒ 由 engine 按魔数嗅探);data_base64 与 target 必填。
|
||||
// base64 用标准字母表(与 Execute 输出同一份编码,往返无损)。
|
||||
func toolRequest(args any) (Request, error) {
|
||||
m, ok := args.(map[string]any)
|
||||
if !ok {
|
||||
return Request{}, fmt.Errorf("transcode: %w: args must be an object", ErrBadArgs)
|
||||
}
|
||||
data, err := toolDataArg(m)
|
||||
if err != nil {
|
||||
return Request{}, err
|
||||
}
|
||||
target := FormatOf(toolStringArg(m, toolArgTarget))
|
||||
if target == "" {
|
||||
return Request{}, fmt.Errorf("transcode: %w: missing %s", ErrBadArgs, toolArgTarget)
|
||||
}
|
||||
return Request{
|
||||
Data: data,
|
||||
Source: FormatOf(toolStringArg(m, toolArgSource)),
|
||||
Target: target,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// toolStringArg 读一个字符串字段;字段缺失或不是字符串都算空串。
|
||||
func toolStringArg(m map[string]any, key string) string {
|
||||
s, _ := m[key].(string)
|
||||
return s
|
||||
}
|
||||
|
||||
// toolDataArg 解出源字节:Base64 标准字母表,空串/非法 Base64/空字节都拒。
|
||||
func toolDataArg(m map[string]any) ([]byte, error) {
|
||||
raw := toolStringArg(m, toolArgData)
|
||||
if raw == "" {
|
||||
return nil, fmt.Errorf("transcode: %w: missing %s", ErrBadArgs, toolArgData)
|
||||
}
|
||||
data, err := base64.StdEncoding.DecodeString(raw)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("transcode: %w: %s is not valid base64: %v", ErrBadArgs, toolArgData, err)
|
||||
}
|
||||
if len(data) == 0 {
|
||||
return nil, fmt.Errorf("transcode: %w: %s decodes to zero bytes", ErrBadArgs, toolArgData)
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
Reference in new issue
Block a user