Go wrapper for WebRTC iSAC audio codec. Supports encoding/decoding at 16kHz and 32kHz sample rates.
go get github.com/cc-integration-team/codec-isacAfter getting the module, navigate to the module directory and build the static library:
cd $(go env GOMODCACHE)/github.com/cc-integration-team/codec-isac@<version>
sudo ./build_isac.shOr clone and build manually:
git clone https://github.com/cc-integration-team/codec-isac.git
cd codec-isac
./build_isac.shpackage main
import (
"fmt"
isac "github.com/cc-integration-team/codec-isac"
)
func main() {
// Create decoder (16kHz or 32kHz)
decoder, err := isac.NewDecoder(isac.SampleRate16kHz)
if err != nil {
panic(err)
}
defer decoder.Close()
// Decode iSAC to PCM
encodedData := []byte{...} // your iSAC encoded data
pcm, err := decoder.Decode(encodedData)
if err != nil {
panic(err)
}
fmt.Printf("Decoded %d samples\n", len(pcm))
// Create encoder
encoder, err := isac.NewEncoder(isac.SampleRate16kHz)
if err != nil {
panic(err)
}
defer encoder.Close()
// Encode PCM to iSAC (10ms frames: 160 samples at 16kHz, 320 at 32kHz)
pcmFrame := make([]int16, 160)
encoded, err := encoder.Encode(pcmFrame)
if err != nil {
panic(err)
}
fmt.Printf("Encoded %d bytes\n", len(encoded))
}SampleRate16kHz= 16000 - 16kHz sample rateSampleRate32kHz= 32000 - 32kHz sample rate
NewDecoder(sampleRate int) (*Decoder, error)- Create a new decoder(*Decoder) Decode(encoded []byte) ([]int16, error)- Decode iSAC to PCM(*Decoder) Close()- Release resources
NewEncoder(sampleRate int) (*Encoder, error)- Create a new encoder(*Encoder) Encode(pcm []int16) ([]byte, error)- Encode PCM to iSAC(*Encoder) Close()- Release resources
| Sample Rate | Input Frame (10ms) | Output (max) |
|---|---|---|
| 16kHz | 160 samples | 480-960 samples |
| 32kHz | 320 samples | 960-1920 samples |
- Go 1.21+
- GCC (for building C library)
- Linux (tested on Ubuntu/Debian)
This project uses WebRTC's iSAC codec which is licensed under BSD-3-Clause license.