# 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