[package] name = "craft-audio" description = "Audio file I/O and codecs: WAV/AIFF read and write, FLAC encoder, AAC and ALAC decoders and encoders, AC-3/E-AC-3 decoder and encoder, MP3 encoder, Opus and MP1/MP2 decoders." version.workspace = true edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true [package.metadata.docs.rs] all-features = true [lints] workspace = true [features] # Probe and decode files: WAV and AIFF natively; AAC, ALAC, Opus, AC-3/E-AC-3, MP1/MP2 and PCM # through craft-media's demuxers and this crate's decoders; MP3, FLAC, Vorbis, CAF, ADPCM, A-law # and ยต-law through symphonia. decode = ["decode-native", "symphonia"] # `decode` without symphonia: only the formats with a native decoder (others are Unsupported). decode-native = ["aac-decode", "alac-decode", "opus-decode", "ac3-decode", "mpa-decode", "craft-media/isobmff", "craft-media/matroska", "craft-media/ogg", "dep:log"] # The symphonia fallback for the formats with no native decoder yet. symphonia = ["decode-native", "dep:symphonia"] # Every encoder: the lossless file writers and the AAC, ALAC, AC-3/E-AC-3 and MP3 encoders. encode = ["lossless-encode", "aac-encode", "alac-encode", "ac3-encode", "eac3-encode", "mp3-encode"] # Encode WAV/BWF/RF64, AIFF/AIFF-C and FLAC files. lossless-encode = ["pcm-encode", "flac-encode"] # Encode WAV/BWF/RF64 and AIFF/AIFF-C files. pcm-encode = [] # Encode FLAC files. flac-encode = ["craft-media/bitstream"] # Codec modules on their own, for packet-level use. aac-decode = ["craft-media/bitstream"] aac-encode = ["craft-media/bitstream"] opus-decode = [] ac3-decode = ["craft-media/bitstream"] mpa-decode = ["craft-media/bitstream"] # ALAC packet decoder and encoder (`alac`), ported from Apple's reference implementation. alac-decode = [] alac-encode = [] ac3-encode = ["craft-media/bitstream"] eac3-encode = ["craft-media/bitstream"] # MPEG-1/2 Layer III (MP3) encoder (`mp3`). mp3-encode = ["craft-media/bitstream"] # Multi-resolution waveform overviews (`peaks`). peaks = [] # Encode AAC channels in parallel (with `aac-encode`). rayon = ["dep:rayon"] # Serialize and Deserialize for the shared types. serde = ["dep:serde", "craft-media/serde"] [dependencies] craft-media = { workspace = true } thiserror = { workspace = true } serde = { workspace = true, optional = true } log = { version = "0.4", optional = true } rayon = { workspace = true, optional = true } # symphonia keeps its AAC decoder for AAC in CAF, a container craft-media does not read. symphonia = { version = "0.6.1", optional = true, default-features = false, features = ["mp3", "flac", "vorbis", "ogg", "wav", "pcm", "aiff", "isomp4", "aac", "alac", "adpcm", "caf", "mkv"] } [dev-dependencies] craft-media-testkit = { workspace = true } proptest = { workspace = true } serde_json = { workspace = true } [[test]] name = "audio" required-features = ["decode", "lossless-encode", "peaks"] [[test]] name = "codecs" required-features = ["decode", "encode"] [[example]] name = "info" required-features = ["decode"] [[example]] name = "stream" required-features = ["decode"] [[example]] name = "packets" required-features = ["decode"] [[example]] name = "encode" required-features = ["lossless-encode", "aac-encode"]