# silk-v3-decoder **Repository Path**: zhReimu/silk-v3-decoder ## Basic Information - **Project Name**: silk-v3-decoder - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-15 - **Last Updated**: 2026-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SILK v3 Decoder / Encoder / Converter(纯 Go 实现) 解码和播放 SILK v3 音频文件(微信 amr/aud、QQ slk 等),并转换为其他格式(如 MP3/WAV)。 也提供 SILK v3 编码能力,可生成微信/QQ 兼容格式。 支持批量转换、流式处理与作为 Go 库被其他项目引用。 本项目是 [kn007/silk-v3-decoder](https://github.com/kn007/silk-v3-decoder) 的纯 Go 重写版本。 **完全无 C 依赖**,通过纯 Go 实现 SILK v3 的全部编解码算法。 --- ## 功能特性 - **纯 Go 实现**:完全无 C 依赖,不需要 gcc/clang,不需要 CGO - **跨平台**:Linux / macOS / Windows / ARM,零额外配置 - **单一二进制**:一个 `silk` 命令覆盖 encode / decode / convert 全部功能 - **库 API**:通过 `pkg/silk` 暴露稳定 API,可被其他 Go 项目直接引用 - **流式处理**:所有 API 基于 `io.Reader` / `io.Writer` - **腾讯兼容**:`-tencent` 标志生成微信/QQ 兼容格式 - **批量转换**:目录级并发转换 - **内置 WAV**:无需 ffmpeg 即可转 WAV - **音频播放**:内置解码 SILK 并通过 ffplay 实时播放,也支持 MP3/WAV/FLAC 等常见格式 ## 快速开始 ### 安装 ```bash go install gitee.com/zhReimu/silk-v3-decoder/cmd/silk@latest ``` ### 命令行用法 ```bash # 编码 PCM -> SILK silk encode -i input.pcm -o output.silk # 解码 SILK -> PCM silk decode -i input.silk -o output.pcm # 转换 SILK -> WAV(内置,无需 ffmpeg) silk convert -i input.silk -o output.wav -f wav # 转换 SILK -> MP3(需要 ffmpeg) silk convert -i input.silk -o output.mp3 -f mp3 # Windows 时长兼容 MP3(48 kHz、单声道、128 kbps,保留 Xing/gapless) silk convert -i input.silk -o output.mp3 -f mp3 -mp3-windows-compatible # 批量转换 silk convert -i input_dir -o output_dir -f wav -j 8 # 腾讯兼容格式 silk encode -i input.pcm -o output.silk -tencent # 播放 SILK(需要 FFmpeg 套件中的 ffplay) silk play -i input.silk # 播放 ffplay 支持的其他音频格式 silk play -i music.mp3 ``` SILK 转 MP3 默认保持约 32 kbps 的紧凑规格。Windows 资源管理器可能错误识别这种 低码率 MP3 的时长;启用 `-mp3-windows-compatible` 后会输出 48 kHz、单声道、 128 kbps MP3 并保留 Xing/gapless 元数据,代价是文件约增大四倍。非 SILK 输入的 直接转码不受影响。 ### 音频播放 `silk play` 需要系统安装 FFmpeg 套件中的 `ffplay`。默认从 `PATH` 查找,也可以通过 `-ffplay /path/to/ffplay` 显式指定路径。 SILK 文件由项目内置解码器实时转换为单声道 s16le PCM,并通过管道送入 ffplay; 其他格式直接由 ffplay 解码。播放时默认不显示 ffplay 窗口,播放结束后自动退出, 可在终端按 `Ctrl+C` 停止。由于 SILK 使用实时管道播放,暂不支持进度跳转。 ### 作为 Go 库 ```go import "gitee.com/zhReimu/silk-v3-decoder/pkg/silk" // 编码 PCM -> SILK err := silk.EncodeFile("input.pcm", "output.silk", silk.EncoderConfig{ SampleRate: 24000, BitRate: 25000, }) // 解码 SILK -> PCM err := silk.DecodeFile("input.silk", "output.pcm", silk.DecoderConfig{ SampleRate: 24000, }) // 流式处理 err := silk.EncodeStream(inReader, outWriter, silk.EncoderConfig{ SampleRate: 24000, }) ``` ## 项目结构 ``` silk-v3-decoder/ ├── cmd/silk/ # 命令行入口 ├── internal/ │ ├── silk/ # SILK 编解码器和算法纯 Go 实现 │ │ ├── fixedpoint.go # 定点运算 │ │ ├── range_coder.go # Range coder │ │ ├── shell_coder.go # Shell coder │ │ ├── nlsf*.go # NLSF 工具 + 码本 │ │ ├── resampler*.go # 重采样器 │ │ ├── decode*.go # 解码器 │ │ ├── encoder.go # 编码器核心 │ │ ├── nsq.go # 噪声整形量化器 │ │ ├── plc.go # 丢包补偿 │ │ └── cng.go # 舒适噪声生成 │ ├── codec/ # SILK v3 文件格式 │ ├── cli/ # CLI 命令 │ ├── converter/ # 批量转换器 │ ├── audio/ # 内置 WAV,MP3 等压缩格式走 ffmpeg │ ├── player/ # 基于 ffplay 的 SILK/通用音频播放 │ └── version/ # 构建版本号 ├── pkg/silk/ # 公共 API ├── Taskfile.yml └── go.mod ``` ## 构建 ```bash # 安装 Task curl -sL https://github.com/go-task/task/releases/latest/download/task_linux_amd64.tar.gz | tar -xz -C ~/go/bin task # 构建 task build # 测试 task test # 代码检查 task lint ``` `task build` / `task release` 会通过 `-ldflags` 注入版本号,CLI 和底层 `internal/silk.Version()` 都读取同一个 `internal/version` 值。 项目为纯 Go 实现,构建时默认 `CGO_ENABLED=0`。 ## 技术说明 本项目通过纯 Go 重写了 Skype SILK SDK 的全部算法,包括: - 定点运算辅助函数(SMulBB, SMLABB, RShiftRound 等) - LPC 工具(Schur 递推, k2a, LPC 合成/分析滤波器) - NLSF 工具(NLSF↔LPC 转换, 稳定化, MSVQ 编解码 + 完整码本数据) - 重采样器(2x/3x/4x 上下采样, AR2/ARMA4 滤波器) - Range coder(区间编码器,含完整边界保护) - Shell coder(脉冲树编解码) - 完整解码器(decode_parameters, decode_core, PLC, CNG) - 编码器(LPC/LTP 分析, NSQ 含完整噪声整形, 比特流编码) NSQ 量化器实现了与 C 版本一致的完整算法: - 三阈值量化决策(thr1/thr2/thr3) - 噪声整形 AR 反馈 - 低频整形 - 长时整形 - dither 随机扰动 - r_Q10 范围限制 ## License MIT License