ffplayr 0.1.0

FFmpeg-backed audio playback engine with async controls and optional loudness-aware gain planning.
Documentation

ffplayr

ffplayr is an FFmpeg-backed audio playback engine for Rust.

It provides:

  • async play, pause, resume, stop, and status
  • a higher-level Playback API for normal library use
  • optional loudness-aware gain planning via PlaybackNormalization
  • optional event hooks through AudioEventSink
  • debug helpers for spectrogram and pipeline probe generation

Status

This crate currently uses ffmpeg for decoding, filtering, and resampling, then sends PCM to the output device through rodio/cpal.

Example

use ffplayr::{Playback, PlaybackNormalization, PlaybackRequest};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let playback = Playback::new("C:/tools/ffmpeg/bin/ffmpeg.exe")?;

    playback.play("C:/music/track.webm").await?;

    playback
        .play_request(
            PlaybackRequest::new("C:/music/track.flac").with_normalization(
                PlaybackNormalization {
                    target_lufs: -16.0,
                    integrated_lufs: Some(-19.4),
                    true_peak_dbtp: Some(-1.2),
                },
            ),
        )
        .await?;

    playback.stop().await?;
    Ok(())
}

Design

  • Playback is the recommended public entry point.
  • PlaybackBuilder customizes the ffmpeg path, event sink, and default normalization policy.
  • AudioEngine remains available for lower-level integrations.