Skip to content

Commit 61f517b

Browse files
authored
feat(playback): add inital flac decoding support via the symphonia crate (#1589)
Enable native playback of FLAC (lossless) audio by enabling symphonia's flac feature, and integrating FlacReader/FlacDecoder into the Symphonia decoder.
1 parent 51a752f commit 61f517b

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

Cargo.lock

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

playback/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ symphonia = { version = "0.5", default-features = false, features = [
8585
"mp3",
8686
"ogg",
8787
"vorbis",
88+
"flac"
8889
] }
8990

9091
# Legacy Ogg container decoder for the passthrough decoder

playback/src/decoder/symphonia_decoder.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use symphonia::{
1010
meta::{StandardTagKey, Value},
1111
},
1212
default::{
13-
codecs::{MpaDecoder, VorbisDecoder},
14-
formats::{MpaReader, OggReader},
13+
codecs::{FlacDecoder, MpaDecoder, VorbisDecoder},
14+
formats::{FlacReader, MpaReader, OggReader},
1515
},
1616
};
1717

@@ -48,6 +48,8 @@ impl SymphoniaDecoder {
4848
Box::new(OggReader::try_new(mss, &format_opts)?)
4949
} else if AudioFiles::is_mp3(file_format) {
5050
Box::new(MpaReader::try_new(mss, &format_opts)?)
51+
} else if AudioFiles::is_flac(file_format) {
52+
Box::new(FlacReader::try_new(mss, &format_opts)?)
5153
} else {
5254
return Err(DecoderError::SymphoniaDecoder(format!(
5355
"Unsupported format: {file_format:?}"
@@ -63,6 +65,8 @@ impl SymphoniaDecoder {
6365
Box::new(VorbisDecoder::try_new(&track.codec_params, &decoder_opts)?)
6466
} else if AudioFiles::is_mp3(file_format) {
6567
Box::new(MpaDecoder::try_new(&track.codec_params, &decoder_opts)?)
68+
} else if AudioFiles::is_flac(file_format) {
69+
Box::new(FlacDecoder::try_new(&track.codec_params, &decoder_opts)?)
6670
} else {
6771
return Err(DecoderError::SymphoniaDecoder(format!(
6872
"Unsupported decoder: {file_format:?}"

0 commit comments

Comments
 (0)