npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@binsee/wx-voice

v0.3.2

Published

Convert audio files between Tencent apps (Weixin / Wechat, QQ) and Silk codec with other general format such as MP3 and M4A

Downloads

359

Readme

wx-voice npm

Convert audio files between Tencent apps (Weixin / WeChat, QQ) and Silk codec with other general formats such as MP3 and M4A.

中文版

This project is a maintained fork of Ang-YC/wx-voice by AngYC. Many thanks to the original author for the foundational work.


Install

npm install wx-voice --save

No additional compilation step required. Pre-compiled Silk SDK binaries are automatically installed for your platform.

Supported Platforms

| Platform | Architecture | |----------|-------------| | Linux | x64, arm64 | | macOS | x64, arm64 | | Windows | x64, arm64 |

Unsupported platform? Clone the repository and run make -C silk. The library will automatically detect and use the locally compiled binaries.


Prerequisites

FFmpeg is bundled automatically via @ffmpeg-installer/ffmpeg and @ffprobe-installer/ffprobe. No manual FFmpeg installation is required.


CLI Usage

wx-voice <command> <options>
Example:
$ wx-voice decode -i input.silk -o output.mp3 -f mp3
$ wx-voice encode -i input.mp3 -o output.silk -f silk

Commands

Command:
  decode    decode to general audio format
  encode    encode from general audio format
  duration  get duration of audio file

Options:
  -i <input>    input file path
  -o <output>   output file path
  -f <format>   format of the output file
  --bitrate     bitrate of the output file
  --frequency   frequency of the output file
  --channels    channels of the output file

API Usage

const WxVoice = require('wx-voice');
const voice = new WxVoice();

// Error handler
voice.on('error', (err) => console.log(err));

// Decode silk to MP3
voice.decode('input.silk', 'output.mp3', { format: 'mp3' })
    .then((file) => console.log(file));
// Output: "/path/to/output.mp3"

// Encode MP3 to silk
voice.encode('input.mp3', 'output.silk', { format: 'silk' })
    .then((file) => console.log(file));
// Output: "/path/to/output.silk"

// Get duration of a silk file
voice.duration('input.silk')
    .then((seconds) => console.log(seconds));
// Output: 10.24

API

new WxVoice([tempFolder])

| Parameter | Description | | ---------- | ----------- | | tempFolder | Folder for temporary files, defaults to system temp |

Throws if Silk SDK binaries are not found (unsupported platform without local build).

decode(input, output, [options])

Decode a Silk/WebM audio file to a general format (mp3, m4a, wav, pcm, etc.).

Returns Promise<string> — resolves with the output file path on success.

voice.decode('input.silk', 'output.mp3')
voice.decode('input.silk', 'output.pcm', { format: 'pcm', frequency: 16000 })

encode(input, output, [options])

Encode a general audio file to Silk or WebM format.

Returns Promise<string> — resolves with the output file path on success.

voice.encode('input.mp3', 'output.silk', { format: 'silk' })
voice.encode('input.mp3', 'output.silk', { format: 'silk_amr' })  // AMR-compatible header
voice.encode('input.mp3', 'output.webm', { format: 'webm' })      // base64 data URI

duration(filePath)

Get the duration of an audio file in seconds.

  • For Silk files: parsed directly from the binary frame structure (no FFmpeg needed)
  • For other formats: uses FFprobe

Returns Promise<number> — resolves with 0 if the file cannot be read.

voice.duration('input.silk').then((s) => console.log(s + 's'))

Options

| Parameter | Description | | --------- | ----------- | | format | Output format (silk, silk_amr, webm, mp3, m4a, wav, pcm...), default parsed from output file extension | | bitrate | Bitrate in kbps | | frequency | Sample rate in Hz (e.g. 16000, 24000, 44100) | | channels | Number of channels, default 1 |


File types

Decode: Tested on mp3, m4a, wav, pcm Encode: Tested on silk, silk_amr, webm


Unsupported platform

If your platform is not in the supported list, you can build the Silk SDK locally:

git clone https://github.com/binsee/wx-voice.git
cd wx-voice
npm install
npm run build:silk

The library will automatically detect and use the locally compiled binaries at silk/encoder and silk/decoder.


License

MIT © binsee

Original work MIT © Ang YC