From ff0a588014e324be427ba6f40bf3259088c3293a Mon Sep 17 00:00:00 2001 From: Psychotoxical Date: Tue, 7 Apr 2026 14:34:00 +0200 Subject: [PATCH] feat(audio): add ALAC and AAC-LC native decoding via Symphonia Add 'alac' to symphonia features. Combined with the existing 'aac' and 'isomp4' features this enables native lossless decoding of Apple Lossless Audio Codec (.m4a/ALAC) and AAC-LC files without server-side transcoding. Symphonia probes the format from the stream bytes, so no URL or hint changes are needed for server streams. Co-Authored-By: Claude Sonnet 4.6 --- src-tauri/Cargo.lock | 11 +++++++++++ src-tauri/Cargo.toml | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 747f610d..bd978e76 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -4402,6 +4402,7 @@ dependencies = [ "symphonia-bundle-mp3", "symphonia-codec-aac", "symphonia-codec-adpcm", + "symphonia-codec-alac", "symphonia-codec-pcm", "symphonia-codec-vorbis", "symphonia-core", @@ -4456,6 +4457,16 @@ dependencies = [ "symphonia-core", ] +[[package]] +name = "symphonia-codec-alac" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8413fa754942ac16a73634c9dfd1500ed5c61430956b33728567f667fdd393ab" +dependencies = [ + "log", + "symphonia-core", +] + [[package]] name = "symphonia-codec-pcm" version = "0.5.5" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index fed04064..0929c21b 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -31,7 +31,7 @@ tauri-plugin-fs = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" rodio = { version = "0.19", default-features = false, features = ["symphonia-all"] } -symphonia = { version = "0.5", default-features = false, features = ["flac", "mp3", "pcm", "aac", "isomp4", "vorbis", "ogg", "wav", "adpcm"] } +symphonia = { version = "0.5", default-features = false, features = ["flac", "mp3", "pcm", "aac", "alac", "isomp4", "vorbis", "ogg", "wav", "adpcm"] } reqwest = { version = "0.12", default-features = false, features = ["stream", "json", "multipart", "rustls-tls", "blocking"] } futures-util = "0.3" md5 = "0.7"