Skip to content

Release Notes: v0.13.0

Release Date: 2026-06-15

Summary

Introduces a typed Encoding system for audio format handling with normalization and raw format detection. This centralizes encoding name mappings across all providers.

What Changed

Encoding Type and Constants

New format.Encoding type with constants for standard audio encodings:

import "github.com/plexusone/omnivoice-core/audio/format"

// Raw formats (require explicit sample rate/channels)
format.Linear16  // 16-bit linear PCM
format.MuLaw     // G.711 µ-law
format.ALaw      // G.711 A-law

// Container formats (include metadata)
format.MP3
format.Opus
format.FLAC
format.AAC
format.Speex
format.WebM

Encoding Normalization

Encoding.Normalize() handles all common variations:

// Case insensitivity
format.Encoding("LINEAR16").Normalize()  // → format.Linear16

// Whitespace trimming
format.Encoding(" mulaw ").Normalize()   // → format.MuLaw

// Alias mapping
format.Encoding("pcm16").Normalize()     // → format.Linear16
format.Encoding("ulaw").Normalize()      // → format.MuLaw
format.Encoding("g711a").Normalize()     // → format.ALaw
format.Encoding("wav").Normalize()       // → format.Linear16

Raw Format Detection

Determine if an encoding requires explicit audio parameters:

format.IsRawEncoding("linear16")  // true
format.IsRawEncoding("mulaw")     // true
format.IsRawEncoding("mp3")       // false (container with metadata)
format.IsRawEncoding("wav")       // true (normalizes to linear16)

Use Cases

Provider Implementations

Providers can use Normalize() to accept various encoding names:

func ConfigToOptions(encoding string) *Options {
    enc := format.Encoding(encoding).Normalize()

    opts := &Options{Encoding: enc.String()}

    // Only set container/sample_rate for raw formats
    if enc.IsRaw() {
        opts.Container = "none"
        opts.SampleRate = config.SampleRate
    }

    return opts
}

API Parameter Handling

Accept flexible user input while maintaining internal consistency:

// All of these normalize to the same encoding
config.Encoding = "pcm16"     // → linear16
config.Encoding = "PCM_S16LE" // → linear16
config.Encoding = "wav"       // → linear16

Installation

go get github.com/plexusone/omnivoice-core@v0.13.0

Migration Guide

From v0.12.x

No breaking changes. All existing code continues to work.

New functionality is additive:

// New: Use typed constants instead of strings
encoding := format.Linear16  // instead of "linear16"

// New: Normalize variant names
normalized := format.Encoding(userInput).Normalize()

// New: Check if format needs explicit parameters
if format.IsRawEncoding(encoding) {
    // Set sample rate, channels, etc.
}

Full Changelog

See CHANGELOG.md for the complete list of changes.