Skip to content

Commit

Permalink
Decode duration from ogg files
Browse files Browse the repository at this point in the history
  • Loading branch information
nukeop committed Mar 3, 2024
1 parent 607f5fe commit d1feab6
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
2 changes: 1 addition & 1 deletion packages/scanner/src/js.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,5 @@ pub fn set_properties_from_metadata(
set_optional_field_str(cx, obj, "thumbnail", metadata.thumbnail.clone());
set_optional_field_u32(cx, obj, "position", metadata.position);
set_optional_field_u32(cx, obj, "disc", metadata.disc);
set_optional_field_u32(cx, obj, "year", metadata.year);
set_optional_field_str(cx, obj, "year", metadata.year.clone());
}
23 changes: 14 additions & 9 deletions packages/scanner/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use derive_builder::Builder;
use id3::TagLike;
use metaflac;
use symphonia::core::{
codecs::DecoderOptions,
formats::FormatOptions,
io::MediaSourceStream,
meta::{MetadataOptions, MetadataRevision, StandardTagKey},
Expand All @@ -25,7 +26,7 @@ pub struct AudioMetadata {
pub duration: Option<u32>,
pub disc: Option<u32>,
pub position: Option<u32>,
pub year: Option<u32>,
pub year: Option<String>,
pub thumbnail: Option<String>,
}

Expand Down Expand Up @@ -75,7 +76,7 @@ impl MetadataExtractor for Mp3MetadataExtractor {
}
metadata.position = tag.track();
metadata.disc = tag.disc();
metadata.year = tag.year().map(|s| s as u32);
metadata.year = tag.year().map(|y| y.to_string());

metadata.thumbnail = Mp3ThumbnailGenerator::generate_thumbnail(
&path,
Expand Down Expand Up @@ -176,16 +177,21 @@ impl MetadataExtractor for OggMetadataExtractor {
let mut probed = symphonia::default::get_probe()
.format(&hint, mss, &fmt_opts, &meta_opts)
.expect("unsupported format");
let mut metadata = AudioMetadata::new();

if let Some(metadata_rev) = probed.format.metadata().current() {
let tags = metadata_rev.tags();
}
let track = probed.format.default_track().unwrap();
let time_base = track.codec_params.time_base.unwrap();
let duration = track
.codec_params
.n_frames
.map(|frames| track.codec_params.start_ts + frames);

let mut metadata = AudioMetadata::new();
metadata.duration = duration.map(|d| ((d as u32) * time_base.numer / time_base.denom));

if let Some(mut meta) = probed.format.metadata().current() {
if let Some(meta) = probed.format.metadata().current() {
for tag in meta.tags().iter() {
if tag.is_known() {
println!("{:?}", tag.std_key);
match tag.std_key {
Some(StandardTagKey::TrackTitle) => {
metadata.title = Some(tag.value.to_string());
Expand All @@ -203,8 +209,7 @@ impl MetadataExtractor for OggMetadataExtractor {
metadata.disc = Some(tag.value.to_string().parse::<u32>().unwrap());
}
Some(StandardTagKey::Date) => {
println!("Year: {:?}", tag.value);
metadata.year = Some(tag.value.to_string().parse::<u32>().unwrap());
metadata.year = Some(tag.value.to_string());
}
_ => {}
}
Expand Down

0 comments on commit d1feab6

Please sign in to comment.