Skip to content

cc-integration-team/codec-isac

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

codec-isac

Go wrapper for WebRTC iSAC audio codec. Supports encoding/decoding at 16kHz and 32kHz sample rates.

Installation

1. Get the module

go get github.com/cc-integration-team/codec-isac

2. Build the iSAC library (required once)

After 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.sh

Or clone and build manually:

git clone https://github.com/cc-integration-team/codec-isac.git
cd codec-isac
./build_isac.sh

Usage

package 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))
}

API Reference

Constants

  • SampleRate16kHz = 16000 - 16kHz sample rate
  • SampleRate32kHz = 32000 - 32kHz sample rate

Decoder

  • NewDecoder(sampleRate int) (*Decoder, error) - Create a new decoder
  • (*Decoder) Decode(encoded []byte) ([]int16, error) - Decode iSAC to PCM
  • (*Decoder) Close() - Release resources

Encoder

  • NewEncoder(sampleRate int) (*Encoder, error) - Create a new encoder
  • (*Encoder) Encode(pcm []int16) ([]byte, error) - Encode PCM to iSAC
  • (*Encoder) Close() - Release resources

Frame Sizes

Sample Rate Input Frame (10ms) Output (max)
16kHz 160 samples 480-960 samples
32kHz 320 samples 960-1920 samples

Requirements

  • Go 1.21+
  • GCC (for building C library)
  • Linux (tested on Ubuntu/Debian)

License

This project uses WebRTC's iSAC codec which is licensed under BSD-3-Clause license.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published