use wasm_bindgen::prelude::*;
use ym2149_ay_replayer::AyMetadata as AyFileMetadata;
use ym2149_ym_replayer::LoadSummary;
#[wasm_bindgen]
#[derive(Debug, Clone)]
pub struct YmMetadata {
pub(crate) title: String,
pub(crate) author: String,
pub(crate) comments: String,
pub(crate) format: String,
pub(crate) frame_count: u32,
pub(crate) frame_rate: u32,
pub(crate) duration_seconds: f32,
}
#[wasm_bindgen]
impl YmMetadata {
#[wasm_bindgen(getter)]
pub fn title(&self) -> String {
self.title.clone()
}
#[wasm_bindgen(getter)]
pub fn author(&self) -> String {
self.author.clone()
}
#[wasm_bindgen(getter)]
pub fn comments(&self) -> String {
self.comments.clone()
}
#[wasm_bindgen(getter)]
pub fn format(&self) -> String {
self.format.clone()
}
#[wasm_bindgen(getter)]
pub fn frame_count(&self) -> u32 {
self.frame_count
}
#[wasm_bindgen(getter)]
pub fn frame_rate(&self) -> u32 {
self.frame_rate
}
#[wasm_bindgen(getter)]
pub fn duration_seconds(&self) -> f32 {
self.duration_seconds
}
}
pub fn metadata_from_summary(
player: &ym2149_ym_replayer::YmPlayer,
summary: &LoadSummary,
) -> YmMetadata {
let (title, author, comments, frame_rate) = if let Some(info) = player.info() {
(
info.song_name.clone(),
info.author.clone(),
info.comment.clone(),
info.frame_rate as u32,
)
} else {
(
"Unknown".to_string(),
"Unknown".to_string(),
String::new(),
50u32,
)
};
YmMetadata {
title,
author,
comments,
format: format!("{:?}", summary.format),
frame_count: summary.frame_count as u32,
frame_rate,
duration_seconds: player.get_duration_seconds(),
}
}
pub fn metadata_from_ay(meta: &AyFileMetadata) -> YmMetadata {
let frame_count = meta.frame_count.unwrap_or(0);
let duration_seconds = meta
.duration_seconds
.unwrap_or_else(|| frame_count as f32 / 50.0);
YmMetadata {
title: meta.song_name.clone(),
author: meta.author.clone(),
comments: meta.misc.clone(),
format: "AY".to_string(),
frame_count: frame_count as u32,
frame_rate: 50,
duration_seconds,
}
}