Skip to content

youthlin/silk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

silk

Silk v3 Encoder / Decoder implement in Golang.

Go 语言版本的 Silk v3 编码/解码器。

可用于解码国内通信软件语音文件。

Install 获取

go get -u github.com/youthlin/silk

API 接口

func Decode(src io.Reader, opts ...internal.DecodeOpt) ([]byte, error)
func Encode(src io.Reader, opts ...internal.EncodeOpt) ([]byte, error)

// Decode Options 解码选项

// WithSampleRate set decode option, sample rate, default 24000
// 设置 sample rate 参数,默认值 24000
func WithSampleRate(sampleRate int) internal.DecodeOpt {
	return func(dc *internal.DecodeCfg) { dc.SampleRate = sampleRate }
}

see API doc

Comandline tool 命令行

silk-decoder 解码器

You may need to run sudo apt-get install libmp3lame-dev to get lame lib on Linux

go install github.com/youthlin/silk/cmd/silk-decoder@latest
# Execute to see usage
silk-decoder
Silk decoder, Go version, based on v1.0.9 of C version
Decode silk v3 file to pcm or mp3, by youthlin
GitHub: https://github.comyouthlin/silk

Usage: silk-decoder -i <input file> [settings]
  -i <input file>       Input file or input folder(should with -d settings)
  [settings]
    -d <pattern>        Input is a dir, and use the regexp <pattern> to test input file
    -sampleRate <hz>    Sample rate in Hz, default 24000
    -mp3[=false]        Output as mp3 file, default true, set false to output as pcm file
    -o <output file>    Output file name, or output file extension name when input is folder.
                        If not provide, output name is <input>.mp3 or <input>.pcm(when -mp3=false)
    -l <language>       Language path(pointer to po file/dir)

Example:
silk-decoder -i a.amr
        decode a.amr to a.mp3
silk-decoder -i amr.1
        decode amr.1 to amr.mp3
silk-decoder -i file
        decode file to file.mp3
silk-decoder -i a.amr -o b.mp3
        decode a.amr to b.mp3
silk-decoder -i a.amr -mp3=false
        decode a.amr to a.pcm
silk-decoder -i a.amr -mp3=false -o b.pcm
        decode a.amr to b.pcm
silk-decoder -i voice -d ".*\.amr"
        decode files in the folder to mp3
          e.g.: if the voice folder has these files:
                voice/a.amr
                voice/other.txt
                voice/sub/b.amr
          result:
                voice/a.mp3
                voice/sub/b.mp3

Silk 解码器,Go 语言版本,基于 v1.0.9 的 C 语言版本
将 silk v3 格式的文件解码为 pcm 或 mp3, 作者:youthlin
GitHub: https://github.comyouthlin/silk

用法:silk-decoder -i <输入文件> [选项]
  -i <输入文件>         输入文件或输入文件夹(需要和 -d 连用)
  [选项]
    -d <正则表达式>             指明 -i 的参数是文件夹,对输入文件夹(及子文件夹中)中,文件名符合正规表达式的文件进行解码
    -sampleRate <采样率>        单位为赫兹,默认值为 24000
    -mp3[=false]        输出为 mp3 格式,默认 true, 设置为 flase 以输出 pcm 格式
    -o <输出文件>       指定输出文件名,或指定输出文件后缀名(当使用-d 时)。
                        如果为空输出文件会根据自动推断为 mp3 或 pcm
    -l <语言>           指定语言路径(po 文件或文件夹)

示例:
silk-decoder -i a.amr
        将 a.amr 解码为 a.mp3
silk-decoder -i amr.1
        将 amr.1 解码为 amr.mp3
silk-decoder -i file
        将 file 解码为 file.mp3
silk-decoder -i a.amr -o b.mp3
        将 a.amr 解码为 b.mp3
silk-decoder -i a.amr -mp3=false
        将 a.amr 解码为 a.pcm
silk-decoder -i a.amr -mp3=false -o b.pcm
        将 a.amr 解码为 b.pcm
silk-decoder -i voice -d ".*\.amr"
          例如:voice 文件夹下有如下文件:
                voice/a.amr
                voice/other.txt
                voice/sub/b.amr
          转换结果:
                voice/a.mp3
                voice/sub/b.mp3

silk-encoder 编码器

go install github.com/youthlin/silk/cmd/silk-encoder@latest
# Execute to see usage
silk-encoder
Silk encoder, Go version, based on v1.0.9 of C version
Encode pcm file to silk v3 type, by youthlin
GitHub: https://github.comyouthlin/silk

Usage: silk-encoder [settings]
  [settings]
    -l <path to po file>        language path(pointer to po file/dir)
    -i <input file>             Speech input to encoder
    -o <output file>            Bitstream output from encoder
    -Fs_API <Hz>                API sampling rate in Hz, default: 24000
    -Fs_maxInternal <Hz>        Maximum internal sampling rate in Hz, default: 24000
    -packetlength <ms>          Packet interval in ms, default: 20
    -rate <bps>                 Target bitrate; default: 25000
    -loss <perc>                Uplink loss estimate, in percent (0-100); default: 0
    -inbandFEC[=false]          Enable inband FEC usage, default: false
    -complexity <comp>          Set complexity, 0: low, 1: medium, 2: high; default: 2
    -DTX[=false]                Enable DTX; default: false
    -stx[=false]                Add STX flag before file header and remove footer block, default true

Silk 编码器,Go 语言版本,基于 v1.0.9 的 C 语言版本
将 pcm 文件编码为 silk v3 类型,作者: youthlin
GitHub: https://github.comyouthlin/silk

用法: silk-encoder [选项]
  [选项]
    -l <语言路径>               指向 po/mo 文件或所在文件夹
    -i <输入文件>               待编码的输入语音文件
    -o <输出文件>               编码后的文件
    -Fs_API <采样率>            单位赫兹(Hz), 默认值为 24000
    -Fs_maxInternal <赫兹>      最大采样率,单位赫兹(Hz), 默认值为 24000
    -packetlength <毫秒>        数据包长度,单位毫秒(ms), 默认值为 20
    -rate <比特率>              比特率,默认值为 25000
    -loss <损耗比>              上行链路预计损耗比例,取值(0-100), 默认值为 0
    -inbandFEC[=false]          开启音频带内 FEC(前向纠错), 默认值为 false
    -complexity <模式>          设置复杂模式, 0=低,1=中,2=高,默认值为 2
    -DTX[=false]                开启 DTX, 默认值为 false
    -stx[=false]                在文件头之前添加 STX 标记,并移除 footer 块(兼容国内通信软件语音格式), 默认值为 true

See also 致谢

LICENSE

MIT.

C 源码开源协议见每个文件头部注释。