diff --git a/src/main.rs b/src/main.rs index 6ddbbc9..a234c1e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,7 @@ mod resamplers; mod amdemod; mod aptsyncer; +use std::io::prelude::*; use std::fs::File; use std::path::Path; @@ -20,71 +21,32 @@ const LINES_PER_SECOND: u32 = 2; const PIXELS_PER_LINE: u32 = 2080; const LOWPASS_COEFFS : [f32; 63] = [ -7.383784e-03, - -3.183046e-03, - 2.255039e-03, - 7.461166e-03, - 1.091908e-02, - 1.149109e-02, - 8.769802e-03, - 3.252932e-03, - -3.720606e-03, - -1.027446e-02, - -1.447403e-02, - -1.486427e-02, - -1.092423e-02, - -3.307958e-03, - 6.212477e-03, - 1.511364e-02, - 2.072873e-02, - 2.096037e-02, - 1.492345e-02, - 3.347624e-03, - -1.138407e-02, - -2.560252e-02, - -3.507114e-02, - -3.591225e-02, - -2.553830e-02, - -3.371569e-03, - 2.882645e-02, - 6.711368e-02, - 1.060042e-01, - 1.394643e-01, - 1.620650e-01, - 1.700462e-01, - 1.620650e-01, - 1.394643e-01, - 1.060042e-01, - 6.711368e-02, - 2.882645e-02, - -3.371569e-03, - -2.553830e-02, - -3.591225e-02, - -3.507114e-02, - -2.560252e-02, - -1.138407e-02, - 3.347624e-03, - 1.492345e-02, - 2.096037e-02, - 2.072873e-02, - 1.511364e-02, - 6.212477e-03, - -3.307958e-03, - -1.092423e-02, - -1.486427e-02, - -1.447403e-02, - -1.027446e-02, - -3.720606e-03, - 3.252932e-03, - 8.769802e-03, - 1.149109e-02, - 1.091908e-02, - 7.461166e-03, - 2.255039e-03, - -3.183046e-03, - -7.383784e-03]; + -3.183046e-03, 2.255039e-03, 7.461166e-03, 1.091908e-02, + 1.149109e-02, 8.769802e-03, 3.252932e-03, -3.720606e-03, + -1.027446e-02, -1.447403e-02, -1.486427e-02, -1.092423e-02, + -3.307958e-03, 6.212477e-03, 1.511364e-02, 2.072873e-02, + 2.096037e-02, 1.492345e-02, 3.347624e-03, -1.138407e-02, + -2.560252e-02, -3.507114e-02, -3.591225e-02, -2.553830e-02, + -3.371569e-03, 2.882645e-02, 6.711368e-02, 1.060042e-01, + 1.394643e-01, 1.620650e-01, 1.700462e-01, 1.620650e-01, + 1.394643e-01, 1.060042e-01, 6.711368e-02, 2.882645e-02, + -3.371569e-03, -2.553830e-02, -3.591225e-02, -3.507114e-02, + -2.560252e-02, -1.138407e-02, 3.347624e-03, 1.492345e-02, + 2.096037e-02, 2.072873e-02, 1.511364e-02, 6.212477e-03, + -3.307958e-03, -1.092423e-02, -1.486427e-02, -1.447403e-02, + -1.027446e-02, -3.720606e-03, 3.252932e-03, 8.769802e-03, + 1.149109e-02, 1.091908e-02, 7.461166e-03, 2.255039e-03, + -3.183046e-03, -7.383784e-03]; fn main() { - let mut reader = match hound::WavReader::open("noaa19_20160814_mono.wav") { + let args : Vec = std::env::args().collect(); + + if args.len() != 3 { + println!("Usage: {} ", args[0]); + return; + } + + let mut reader = match hound::WavReader::open(&args[1]) { Err(e) => panic!("Could not open inputfile: {}", e), Ok(r) => r }; @@ -120,7 +82,20 @@ fn main() { let mut y = 0; let mut max_level = 0.0; + let mut progress = 0; + let step = sample_count * 13 / 150 / 10; + + print!("0%"); + std::io::stdout().flush().unwrap(); for synced_sample in syncer { + progress += 1; + + if progress % step == 0 { + print!("...{}%", progress / step * 10); + std::io::stdout().flush().unwrap(); + } + + let sample = match synced_sample { SyncedSample::Sample(s) => s, SyncedSample::SyncA(s) =>{ @@ -136,8 +111,6 @@ fn main() { max_level = f32::max(sample, max_level); let color = (sample / max_level * 255.0) as u8; - //println!("{}", color); - if y < lines { img.put_pixel(x,y,image::Luma([color])); } @@ -148,7 +121,14 @@ fn main() { y += 1; } } + println!(""); - let ref mut fout = File::create(&Path::new("decoded.png")).unwrap(); + let ref mut fout = match File::create(&Path::new(&args[2])) { + Err(e) => panic!("Could not open outputfile: {}", e), + Ok(f) => f + }; + image::ImageLuma8(img).save(fout, image::PNG).unwrap(); + + println!("Done !"); }