use std::thread::sleep;
use std::time::{Duration, Instant};
use klingt::{CpalDevice, Klingt};
use klingt::nodes::{Sine, Mixer, Gain};
fn main() {
let devices = CpalDevice::list_outputs();
for (i, d) in devices.iter().enumerate() {
println!("[{}] {} ({}Hz)", i, d.name(), d.sample_rate());
}
let device = devices.into_iter().next().expect("No audio device");
println!("Using: {}\n", device.name());
let mut klingt = Klingt::new(device.sample_rate())
.with_output(device.create_sink());
let root = klingt.add(Sine::new(220.0)); let third = klingt.add(Sine::new(277.18)); let fifth = klingt.add(Sine::new(329.63));
let mixer = klingt.add(Mixer::stereo());
klingt.connect(&root, &mixer);
klingt.connect(&third, &mixer);
klingt.connect(&fifth, &mixer);
let gain = klingt.add(Gain::new(0.33));
klingt.connect(&mixer, &gain);
klingt.output(&gain);
println!("Playing A major chord... Ctrl+C to stop");
let start = Instant::now();
let rate = klingt.sample_rate() as f64;
let mut blocks = 0u64;
loop {
let target = (start.elapsed().as_secs_f64() * rate / 64.0) as u64 + 6;
while blocks < target {
klingt.process();
blocks += 1;
}
sleep(Duration::from_micros(500));
}
}