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¶
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.