use symphonia::core::codecs::audio::AudioDecoderOptions;
use symphonia::core::errors::Error;
use symphonia::core::formats::FormatOptions;
use symphonia::core::formats::probe::Hint;
use symphonia::core::io::MediaSourceStream;
use symphonia::core::meta::MetadataOptions;
use symphonia_core::formats::TrackType;
fn main() {
let args: Vec<String> = std::env::args().collect();
let path = args.get(1).expect("file path not provided");
let src = std::fs::File::open(path).expect("failed to open media");
let mss = MediaSourceStream::new(Box::new(src), Default::default());
let mut hint = Hint::new();
hint.with_extension("mp3");
let meta_opts: MetadataOptions = Default::default();
let fmt_opts: FormatOptions = Default::default();
let mut format = symphonia::default::get_probe()
.probe(&hint, mss, fmt_opts, meta_opts)
.expect("unsupported format");
let track = format.default_track(TrackType::Audio).expect("no audio track");
let dec_opts: AudioDecoderOptions = Default::default();
let mut decoder = symphonia::default::get_codecs()
.make_audio_decoder(
track.codec_params.as_ref().expect("codec parameters missing").audio().unwrap(),
&dec_opts,
)
.expect("unsupported codec");
let track_id = track.id;
loop {
let packet = match format.next_packet() {
Ok(Some(packet)) => packet,
Ok(None) => {
break;
}
Err(Error::ResetRequired) => {
unimplemented!();
}
Err(err) => {
panic!("{}", err);
}
};
while !format.metadata().is_latest() {
format.metadata().pop();
}
if packet.track_id != track_id {
continue;
}
match decoder.decode(&packet) {
Ok(_decoded) => {
}
Err(Error::IoError(_)) => {
continue;
}
Err(Error::DecodeError(_)) => {
continue;
}
Err(err) => {
panic!("{}", err);
}
}
}
}