reflo
Audio format converter for the flo™ audio format. Available on crates.io! https://crates.io/crates/reflo
Features
- Convert audio files to/from flo™ format
- Support for multiple input formats (MP3, WAV, FLAC, OGG, AAC, etc.)
- Both lossless and lossy compression modes
- Metadata preservation (tags, cover art, lyrics, etc.)
- Cross-platform: Native (CLI) and WebAssembly (browser)
- Pure Rust implementation using Symphonia
Installation
As a CLI tool (Native)
Or build from source:
The binary will be available at target/release/flo.
As a library
Add to your Cargo.toml:
[]
= { = "path/to/reflo" }
For WebAssembly
Install wasm-pack:
Build for web:
This generates a pkg/ directory with:
reflo.js- JavaScript bindingsreflo_bg.wasm- WebAssembly binary- TypeScript definitions
Usage
CLI
# Encode to flo (lossless)
# Encode with lossy compression
# Encode with target bitrate
# Decode to WAV
# Show file info
# Show metadata
# Validate file
Rust Library
use ;
use fs;
// Read audio file
let audio_bytes = read?;
// Encode with options
let options = lossy // High quality
.with_level;
let flo_bytes = encode_from_audio?;
write?;
// Decode
let flo_bytes = read?;
let wav_bytes = decode_to_wav?;
write?;
WebAssembly
Convert
API Reference
Library Functions
encode_from_audio(bytes, options)- Encode audio to flo formatencode_from_samples(samples, sr, ch, metadata, options)- Encode raw samplesdecode_to_wav(bytes)- Decode flo to WAV formatdecode_to_samples(bytes)- Decode to raw samplesget_metadata(bytes)- Extract metadata from flo fileget_flo_info(bytes)- Get file informationget_audio_info(bytes)- Get audio file informationvalidate_flo(bytes)- Validate flo file integrity
WebAssembly Functions
encode_audio_to_flo(audio_bytes, lossy, quality, level)- Encode to flodecode_flo_to_wav(flo_bytes)- Decode to WAVdecode_flo_to_samples(flo_bytes)- Decode to raw samples (returns object)get_flo_file_info(flo_bytes)- Get file infoget_audio_file_info(audio_bytes)- Get audio infoget_flo_metadata_json(flo_bytes)- Get metadata as JSONvalidate_flo_file(flo_bytes)- Validate file
Architecture
The crate is structured for maximum code reuse:
reflo/
├── src/
│ ├── lib.rs # Core library API (cross-platform)
│ ├── audio.rs # Audio I/O using Symphonia
│ ├── main.rs # CLI binary (feature: cli)
│ └── wasm.rs # WASM bindings (feature: wasm)
Cross-Platform Design
- Core logic in
lib.rsworks withVec<u8>for portability - Audio I/O in
audio.rsuses Symphonia (works on all targets) - CLI interface in
main.rsadds file system operations - WASM interface in
wasm.rsadds JavaScript bindings
No platform-specific code in the core - it all works on native and WASM!
Building
# Native CLI
# Library only
# WebAssembly
# All features (for testing)
License
Apache 2.0 License - see LICENSE