diff options
-rw-r--r-- | mp3lame.rs | 4 | ||||
-rw-r--r-- | per.rs | 42 |
2 files changed, 39 insertions, 7 deletions
@@ -74,6 +74,10 @@ impl LameContext { unsafe { lame_set_out_samplerate(self.gfp, rate as c_int) }; } #[fixed_stack_segment] + pub fn get_out_samplerate(&self) -> int { + unsafe { lame_get_out_samplerate(self.gfp) as int } + } + #[fixed_stack_segment] pub fn set_num_channels(&self, channels: int) { unsafe { lame_set_num_channels(self.gfp, channels as c_int) }; } @@ -1,3 +1,6 @@ +extern mod extra; +use extra::getopts::*; +use std::os; use std::path::Path; use std::rt::io::io_error; use std::task::{SingleThreaded, spawn_sched}; @@ -7,14 +10,35 @@ use mp3lame::*; mod oss; mod mp3lame; -static DSP_FILES: &'static [&'static str] = &["/dev/dsp", "/dev/dsp1"]; -static DSP_SPEEDS: [int, ..2] = [44100i, 48000i]; #[fixed_stack_segment] fn main() { + let args = os::args(); + let opts = ~[ + groups::optmulti("f", "file", "OSS device file", "/dev/dsp"), + groups::optmulti("r", "rate", "Sample rate in Hz", "44100"), + groups::optopt("s", "split", + "Number of minutes at which to split MP3 files", "60"), + groups::optflag("a", + "Align splits as if the first one happened midnight Jan. 1, 1970", "") + ]; + let DSP_FILES = ~[~"/dev/dsp", ~"/dev/dsp1"]; + let DSP_SPEEDS = ~[44100i, 48000i]; + let matches = match groups::getopts(args.tail(), opts) { + Ok(m) => m, + Err(f) => { + println(f.to_err_msg()); + print(groups::usage("Usage: per", opts)); + return; + } + }; + let dsp_files = match matches.opt_strs("f") { + [] => DSP_FILES, + f => f + }; let lame = LameContext::new(); let mut foo = None; - for file_name in DSP_FILES.iter() { + for file_name in dsp_files.iter() { match OssDevice::new(&Path(file_name.as_slice())) { Some(x) => { foo = Some(x); break } None => {} @@ -28,9 +52,13 @@ fn main() { dsp.set_format(); dsp.set_stereo(); lame.set_num_channels(2); + let dsp_speeds = match matches.opt_strs("r") { + [] => DSP_SPEEDS, + r => r.map(|x| { from_str::<int>(*x).unwrap() }) + }; let mut speed: int = 0; - for dsp_speed in DSP_SPEEDS.iter() { - do io_error::cond.trap(|_| {speed = 0}).inside { + for dsp_speed in dsp_speeds.iter() { + do io_error::cond.trap(|_| {debug!("speed %d is a no go", *dsp_speed); speed = 0}).inside { dsp.set_speed(*dsp_speed); speed = *dsp_speed; } @@ -39,12 +67,12 @@ fn main() { } } lame.set_in_samplerate(speed); - lame.set_out_samplerate(speed); - println(fmt!("Sample rate: %d Hz", speed)); lame.set_quality(2); lame.set_bitrate(128); lame.set_disable_reservoir(true); lame.init_params(); + println(fmt!("Recording sample rate: %d Hz", speed)); + println(fmt!("Encoding sample rate: %d Hz", lame.get_out_samplerate())); let (port, chan) = stream::<~[u8]>(); do spawn_sched(SingleThreaded) { dsp.read_all(&chan); |