aboutsummaryrefslogtreecommitdiffstats
path: root/src/queue.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/queue.rs64
1 files changed, 32 insertions, 32 deletions
diff --git a/src/queue.rs b/src/queue.rs
index 26aeb8b..b0acf5f 100644
--- a/src/queue.rs
+++ b/src/queue.rs
@@ -17,28 +17,27 @@ pub struct AudioMetadata {
17} 17}
18 18
19pub fn extract_metadata(path: &Path) -> Option<AudioMetadata> { 19pub fn extract_metadata(path: &Path) -> Option<AudioMetadata> {
20 use symphonia::core::formats::probe::Hint;
20 use symphonia::core::io::MediaSourceStream; 21 use symphonia::core::io::MediaSourceStream;
21 use symphonia::core::meta::StandardTagKey; 22 use symphonia::core::meta::StandardTag;
22 use symphonia::core::probe::Hint;
23 23
24 let file = std::fs::File::open(path).ok()?; 24 let file = std::fs::File::open(path).ok()?;
25 let mss = MediaSourceStream::new(Box::new(file), Default::default()); 25 let mss = MediaSourceStream::new(Box::new(file), Default::default());
26 26
27 let hint = Hint::new(); 27 let hint = Hint::new();
28 let mut probed = symphonia::default::get_probe() 28 let mut probed = symphonia::default::get_probe()
29 .format(&hint, mss, &Default::default(), &Default::default()) 29 .probe(&hint, mss, Default::default(), Default::default())
30 .ok()?; 30 .ok()?;
31 31
32 // Extract duration from format track's codec parameters 32 // Extract duration from track's num_frames and time_base
33 let duration_secs = probed 33 let duration_secs = probed
34 .format
35 .tracks() 34 .tracks()
36 .iter() 35 .iter()
37 .find(|t| t.codec_params.n_frames.is_some() && t.codec_params.time_base.is_some()) 36 .find(|t| t.num_frames.is_some() && t.time_base.is_some())
38 .and_then(|t| { 37 .and_then(|t| {
39 let n_frames = t.codec_params.n_frames?; 38 let n_frames = t.num_frames?;
40 let tb = t.codec_params.time_base?; 39 let tb = t.time_base?;
41 Some(n_frames as f64 * tb.numer as f64 / tb.denom as f64) 40 Some(n_frames as f64 * tb.numer.get() as f64 / tb.denom.get() as f64)
42 }); 41 });
43 42
44 let mut metadata = AudioMetadata { 43 let mut metadata = AudioMetadata {
@@ -46,38 +45,39 @@ pub fn extract_metadata(path: &Path) -> Option<AudioMetadata> {
46 ..Default::default() 45 ..Default::default()
47 }; 46 };
48 47
49 if let Some(meta) = probed.metadata.get()
50 && let Some(rev) = meta.current()
51 { 48 {
52 for tag in rev.tags() { 49 let meta = probed.metadata();
53 match tag.std_key { 50 if let Some(rev) = meta.current() {
54 Some(StandardTagKey::TrackTitle) => { 51 for tag in &rev.media.tags {
55 metadata.title = Some(tag.value.to_string()); 52 match &tag.std {
56 } 53 Some(StandardTag::TrackTitle(value)) => {
57 Some(StandardTagKey::Artist) => { 54 metadata.title = Some(value.to_string());
58 metadata.artist = Some(tag.value.to_string()); 55 }
59 } 56 Some(StandardTag::Artist(value)) => {
60 Some(StandardTagKey::Album) => { 57 metadata.artist = Some(value.to_string());
61 metadata.album = Some(tag.value.to_string()); 58 }
59 Some(StandardTag::Album(value)) => {
60 metadata.album = Some(value.to_string());
61 }
62 _ => {}
62 } 63 }
63 _ => {}
64 } 64 }
65 } 65 }
66 } 66 }
67 67
68 if metadata.title.is_none() && metadata.artist.is_none() && metadata.album.is_none() { 68 if metadata.title.is_none() && metadata.artist.is_none() && metadata.album.is_none() {
69 let mut format = probed.format; 69 let meta = probed.metadata();
70 if let Some(rev) = format.metadata().current() { 70 if let Some(rev) = meta.current() {
71 for tag in rev.tags() { 71 for tag in &rev.media.tags {
72 match tag.std_key { 72 match &tag.std {
73 Some(StandardTagKey::TrackTitle) => { 73 Some(StandardTag::TrackTitle(value)) => {
74 metadata.title = Some(tag.value.to_string()); 74 metadata.title = Some(value.to_string());
75 } 75 }
76 Some(StandardTagKey::Artist) => { 76 Some(StandardTag::Artist(value)) => {
77 metadata.artist = Some(tag.value.to_string()); 77 metadata.artist = Some(value.to_string());
78 } 78 }
79 Some(StandardTagKey::Album) => { 79 Some(StandardTag::Album(value)) => {
80 metadata.album = Some(tag.value.to_string()); 80 metadata.album = Some(value.to_string());
81 } 81 }
82 _ => {} 82 _ => {}
83 } 83 }