flac-codec 1.3.0

A comprehensive library for handling FLAC files
Documentation
flac-codec
==========

A comprehensive Rust library for handling FLAC files.

This library implements [RFC9639](https://www.ietf.org/rfc/rfc9639.html)
to process FLAC files according to the standard in a safe, performant
fashion with a straightforward API.

## Handles Metadata Blocks

- Read any single metadata block from a file
- Read all the metadata blocks from a file
- Update a file's metadata blocks with a single function call

## Decodes Files

- Decode FLAC files to bytes in some endianness
  (useful for storing in other PCM containers, like .wav files)
- Decode FLAC files to signed integer samples
  (audio playback system libraries often require these)
- Decode subset FLAC files from raw "subset" streams
- Can decode from paths on disk, or from any input stream that
  implements `std::io::Read`
- Provides an easy reading API
  - If you need bytes, the byte reader simply implements `std::io::Read`
  - If you need samples, a `Read`-like trait for signed integers is also provided
- Offers seekable readers the underlying stream is also seekable

## Encodes Files

- Encode FLAC files from bytes in some endianness
  (again, useful for encoding data from raw PCM containers)
- Encode FLAC files from signed integer samples
- Encode FLAC files into raw "subset" streams
- Can encode to paths on disk, or to any output stream
  that implements both `std::io::Write` and `std::io::Seek`
- Provides an easy writing API
  - If you can provide bytes, there's an encoder that implements `std::io::Write`
  - If you can provide samples, a `Write`-like interface is also provided
- Encoding process modeled on the reference implementation's
  and achieves similar compression when using identical parameters
- Offers multithreaded encoding via the optional `rayon` feature for better performance

## Analyzes Files

- Parses FLAC files to Rust data structures
- Can rebuild FLAC files from those same data structures
- Is able to round-trip files that are byte-for-byte identical to the originals

## Tested

- Verified against tests ported from the reference implementation
- Handles the entire [FLAC decoder testbench suite]https://github.com/ietf-wg-cellar/flac-test-files
- Tested against my personal collection of nearly 200,000 FLAC files