aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs46
1 files changed, 36 insertions, 10 deletions
diff --git a/src/main.rs b/src/main.rs
index 57271f5..262c822 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,30 +1,56 @@
+use std::{io::{self, Write}, time::Duration};
use unicode_width::UnicodeWidthStr;
-use std::io::Write;
+use rodio::{OutputStream, Sink, source::{SineWave, Source}};
+use clap::Parser;
-use std::time::Duration;
-use rodio::{OutputStream, Sink};
-use rodio::source::{SineWave, Source};
+#[derive(Parser, Debug)]
+#[clap(version, about, long_about = None)]
+struct Args {
+ /// How many spaces a tab character counts as
+ #[clap(short, long, value_parser, default_value_t = 4)]
+ tab_width: usize,
+
+ /// Frequency of tones. Multiplied by line length
+ #[clap(short, long, value_parser, default_value_t = 20.0)]
+ frequency: f32,
+
+ /// Duration of each tone, in seconds
+ #[clap(short, long, value_parser, default_value_t = 0.1)]
+ duration: f32,
+
+ /// Amplifier of tones
+ #[clap(short, long, value_parser, default_value_t = 1.0)]
+ amplifier: f32,
+}
fn main() {
+ let args = Args::parse();
+
let (_stream, stream_handle) = OutputStream::try_default().unwrap();
let sink = Sink::try_new(&stream_handle).unwrap();
- let mut stdout = std::io::stdout().lock();
+ let mut stdout = io::stdout().lock();
- for line in std::io::stdin().lines() {
+ for line in io::stdin().lines() {
let line: String = line
.unwrap()
.chars()
- .map(|c| if c == '\t' { String::from(" ").repeat(8) } else { c.to_string() })
+ .map(|c|
+ if c == '\t' {
+ String::from(" ").repeat(args.tab_width)
+ } else {
+ c.to_string()
+ }
+ )
.collect();
let len = UnicodeWidthStr::width(&*line) as f32;
stdout.write_fmt(format_args!("{}\n", line)).unwrap();
- sink.append(SineWave::new(44.0 * len)
- .take_duration(Duration::from_secs_f32(0.1))
- .amplify(0.20));
+ sink.append(SineWave::new(args.frequency * len)
+ .take_duration(Duration::from_secs_f32(args.duration))
+ .amplify(args.amplifier));
sink.sleep_until_end();
}
}