use bliss_rs::bliss_lib::Song; use std::env; /** * Simple utility to print distance between two songs according to bliss. * * Takes two file paths, and analyze the corresponding songs, printing * the distance between the two files according to bliss. */ fn main() -> Result<(), String> { let mut paths = env::args().skip(1).take(2); let first_path = paths.next().ok_or("Help: ./distance ")?; let second_path = paths.next().ok_or("Help: ./distance ")?; let song1 = Song::from_path(&first_path).map_err(|x| x.to_string())?; let song2 = Song::from_path(&second_path).map_err(|x| x.to_string())?; let mut distance_squared: f64 = 0.0; let analysis1 = song1.analysis.as_bytes(); let analysis2 = song2.analysis.as_bytes(); for (i, feature1) in analysis1.iter().enumerate() { distance_squared += (feature1 - analysis2[i]).pow(2) as f64; } println!( "d({:?}, {:?}) = {}", &first_path, &second_path, distance_squared.sqrt(), ); Ok(()) }