Crates.io | alac-encoder |
lib.rs | alac-encoder |
version | 0.3.0 |
source | src |
created_at | 2019-05-15 19:04:57.100923 |
updated_at | 2022-01-10 22:50:19.479205 |
description | Rust port of Apple's open source ALAC library |
homepage | |
repository | https://github.com/LinusU/rust-alac-encoder |
max_upload_size | |
id | 134560 |
size | 81,209 |
Rust port of Apple's open source ALAC library.
This crate works with Cargo and is on crates.io.
use alac_encoder::{AlacEncoder, FormatDescription};
// 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.
let mut output = vec![0u8; output_format.max_packet_size()];
// 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:
Vec::from(&output[0..size]);
}
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.