Crate codec_core

Source
Expand description

§Codec-Core: Audio Codec Library for VoIP

A simple implementation of G.711 audio codec for VoIP applications. This library provides ITU-T compliant G.711 μ-law and A-law encoding/decoding with lookup table optimizations.

§Features

  • ITU-T G.711 Compliant: Passes official compliance tests
  • Real Audio Tested: Validated with actual speech samples
  • Good Quality: ~37 dB SNR with real speech
  • Lookup Table Optimized: Fast O(1) encoding/decoding

§Implementation

  • Lookup Tables: Pre-computed tables for O(1) operations
  • Simple APIs: Straightforward encoding/decoding functions

§Usage

§Quick Start

use codec_core::codecs::g711::G711Codec;
use codec_core::types::{AudioCodec, CodecConfig, CodecType, SampleRate};

// Create a G.711 μ-law codec
let config = CodecConfig::new(CodecType::G711Pcmu)
    .with_sample_rate(SampleRate::Rate8000)
    .with_channels(1);
let mut codec = G711Codec::new_pcmu(config)?;

// Encode audio samples (20ms at 8kHz = 160 samples)
let samples = vec![0i16; 160];
let encoded = codec.encode(&samples)?;

// Decode back to samples
let decoded = codec.decode(&encoded)?;

§Testing & Validation

The library includes comprehensive testing including real audio validation:

# Run all codec tests including WAV roundtrip tests
cargo test

# Run only G.711 WAV roundtrip tests (downloads real speech audio)
cargo test wav_roundtrip_test -- --nocapture

The WAV roundtrip tests automatically download real speech samples and validate:

  • Signal-to-Noise Ratio (SNR) measurement
  • Round-trip audio quality preservation
  • Proper encoding/decoding with real audio data
  • Output WAV files for manual quality assessment

§Error Handling

All codec operations return Result types with detailed error information:

use codec_core::codecs::g711::G711Codec;
use codec_core::types::{CodecConfig, CodecType, SampleRate};
use codec_core::error::CodecError;

// Handle configuration errors
let config = CodecConfig::new(CodecType::G711Pcmu)
    .with_sample_rate(SampleRate::Rate48000) // Invalid for G.711
    .with_channels(1);

match G711Codec::new_pcmu(config) {
    Ok(codec) => println!("Codec created successfully"),
    Err(CodecError::InvalidSampleRate { rate, supported }) => {
        println!("Invalid sample rate {}, supported: {:?}", rate, supported);
    }
    Err(e) => println!("Other error: {}", e),
}

§Performance Tips

  • Use appropriate frame sizes (160 samples for G.711 at 8kHz/20ms)

§Direct G.711 Functions

use codec_core::codecs::g711::{alaw_compress, alaw_expand, ulaw_compress, ulaw_expand};

// Single sample processing
let sample = 1024i16;
let alaw_encoded = alaw_compress(sample);
let alaw_decoded = alaw_expand(alaw_encoded);

let ulaw_encoded = ulaw_compress(sample);
let ulaw_decoded = ulaw_expand(ulaw_encoded);

§Frame-Based Processing

use codec_core::codecs::g711::{G711Codec, G711Variant};

let mut codec = G711Codec::new(G711Variant::MuLaw);

// Process 160 samples (20ms at 8kHz)
let input_frame = vec![1000i16; 160]; // Some test samples
let encoded = codec.compress(&input_frame).unwrap();

// Decode back to samples (same count for G.711)
let decoded = codec.expand(&encoded).unwrap();
assert_eq!(input_frame.len(), decoded.len());

§Supported Codecs

CodecSample RateChannelsBitrateFrame SizeStatus
G.711 μ-law (PCMU)8 kHz164 kbps160 samples✅ Production
G.711 A-law (PCMA)8 kHz164 kbps160 samples✅ Production

§Quality Metrics

Based on real audio testing with the included WAV roundtrip tests:

  • G.711: 37+ dB SNR (excellent quality, industry standard)

§Feature Flags

§Core Codecs (enabled by default)

  • g711: G.711 μ-law/A-law codecs

Re-exports§

pub use codecs::CodecFactory;
pub use codecs::CodecRegistry;
pub use error::CodecError;
pub use error::Result;
pub use types::AudioCodec;
pub use types::AudioFrame;
pub use types::CodecCapability;
pub use types::CodecConfig;
pub use types::CodecInfo;
pub use types::CodecType;
pub use types::SampleRate;

Modules§

codecs
Audio Codec Implementations
error
Error handling for the codec library
types
Core types and traits for the codec library
utils
Utility functions and helpers for the codec library

Structs§

LibraryInfo
Library information structure

Constants§

SUPPORTED_CODECS
Supported codec types
VERSION
Version information for the codec library

Functions§

info
Get library information
init
Initialize the codec library