3 releases
Uses new Rust 2024
| 0.1.4 | Jul 21, 2025 |
|---|---|
| 0.1.1 | May 7, 2025 |
| 0.1.0 | Oct 4, 2024 |
#248 in Compression
35 downloads per month
Used in 9 crates
(2 directly)
31KB
560 lines
MoosicBox Audio Encoder
Basic audio encoding utilities with feature-gated support for multiple formats.
Overview
The MoosicBox Audio Encoder package provides:
- Feature-Gated Modules: Optional encoding support for different audio formats
- Format-Specific Encoders: Separate modules for different encoding formats
- Minimal Core: Lightweight base with optional format extensions
- Encode Info Structure: Basic encoding result information
Current Implementation
Core Components
- EncodeInfo: Structure containing encoding results (output size, input consumed)
- Feature-Gated Modules: Format-specific encoding implementations
Available Features
aac: Advanced Audio Coding encoder moduleflac: Free Lossless Audio Codec encoder modulemp3: MPEG Layer III encoder moduleopus: Opus codec encoder module
Installation
Cargo Dependencies
[dependencies]
moosicbox_audio_encoder = { path = "../audio_encoder" }
# Enable specific formats
moosicbox_audio_encoder = {
path = "../audio_encoder",
features = ["mp3", "flac", "aac", "opus"]
}
Usage
Basic Encode Info
use moosicbox_audio_encoder::EncodeInfo;
fn handle_encode_result(info: EncodeInfo) {
println!("Output size: {} bytes", info.output_size);
println!("Input consumed: {} bytes", info.input_consumed);
}
Format-Specific Encoding
// AAC encoding (requires "aac" feature)
#[cfg(feature = "aac")]
use moosicbox_audio_encoder::aac;
// FLAC encoding (requires "flac" feature)
#[cfg(feature = "flac")]
use moosicbox_audio_encoder::flac;
// MP3 encoding (requires "mp3" feature)
#[cfg(feature = "mp3")]
use moosicbox_audio_encoder::mp3;
// Opus encoding (requires "opus" feature)
#[cfg(feature = "opus")]
use moosicbox_audio_encoder::opus;
async fn encode_audio() -> Result<(), Box<dyn std::error::Error>> {
// Encoding functionality depends on enabled features
// and implementations in the respective modules
#[cfg(feature = "mp3")]
{
// Use MP3 encoder from mp3 module
// (implementation details depend on the mp3 module)
}
#[cfg(feature = "flac")]
{
// Use FLAC encoder from flac module
// (implementation details depend on the flac module)
}
Ok(())
}
Implementation Notes
- The package provides a minimal core with feature-gated format modules
- Each audio format is implemented in its own module behind a feature flag
- The
EncodeInfostruct provides standardized encoding result information - Actual encoding functionality is contained within the format-specific modules
- Features must be explicitly enabled to access format encoders
Features
- Default: Includes only the core
EncodeInfostructure aac: Enables AAC encoding moduleflac: Enables FLAC encoding modulemp3: Enables MP3 encoding moduleopus: Enables Opus encoding module
Development Status
This package currently provides:
- Core Structure:
EncodeInfofor encoding results - Module Framework: Feature-gated organization for different encoders
- Extensible Design: Easy addition of new encoding formats
The actual encoding implementations are contained within the feature-gated modules. Check the individual module documentation for specific encoding capabilities and APIs.
Usage Patterns
// Always available - core types
use moosicbox_audio_encoder::EncodeInfo;
// Feature-gated - format-specific encoders
#[cfg(feature = "mp3")]
use moosicbox_audio_encoder::mp3::*;
#[cfg(feature = "flac")]
use moosicbox_audio_encoder::flac::*;
This design allows consumers to include only the encoding formats they need, reducing binary size and dependencies.
Dependencies
~2.8–5.5MB
~103K SLoC