#apple #audio #encoder #format #alac


Rust port of Apple’s open source ALAC library

3 unstable releases

Uses new Rust 2021

0.2.0 Oct 22, 2021
0.1.1 May 15, 2019
0.1.0 May 15, 2019

#10 in Encoding

26 downloads per month

Apache-2.0 OR MIT


ALAC Encoder for Rust

Rust port of Apple's open source ALAC library.


This crate works with Cargo and is on crates.io.


use alac_encoder::{AlacEncoder, FormatDescription, MAX_ESCAPE_HEADER_BYTES};

// Specify the input format as signed 16-bit raw PCM, 44100 Hz & 2 channels
let input_format = FormatDescription::pcm::<i16>(44100.0, 2);

// Specify the output format as 44100 Hz ALAC with a frame size of 4096 & 2 channels
let output_format = FormatDescription::alac(44100.0, 4096, 2);

// Initialize the encoder
let mut encoder = AlacEncoder::new(&output_format);

// Allocate a buffer for the encoder to write chunks to.
// The smallest size of one chunk is (frame size * channels * bit depth in bytes) + max escape header bytes.
let mut output = vec![0u8; (4096 * 2 * 2) + MAX_ESCAPE_HEADER_BYTES];

// Get a hold of the source data, e.g. from a file
let pcm = fs::read("foobar.pcm").unwrap();

// Iterate over chunks from the input
for chunk in pcm.chunks(frame_size as usize * channels as usize * 2) {
  // Feed the current chunk to the encoder
  let size = encoder.encode(&input_format, &chunk, &mut output);

  // Here you can do whatever you want with the result:


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.