use cpal::traits::HostTrait;
use cpal::{BufferSize, SampleFormat};
use rodio::source::SineWave;
use rodio::Source;
use std::error::Error;
use std::num::NonZero;
use std::thread;
use std::time::Duration;
fn main() -> Result<(), Box<dyn Error>> {
let default_device = cpal::default_host()
.default_output_device()
.ok_or("No default audio output device is found.")?;
let stream_handle = rodio::DeviceSinkBuilder::from_device(default_device)?
.with_buffer_size(BufferSize::Fixed(256))
.with_sample_rate(NonZero::new(48_000).unwrap())
.with_sample_format(SampleFormat::F32)
.open_sink_or_fallback()?;
let mixer = stream_handle.mixer();
let wave = SineWave::new(740.0)
.amplify(0.1)
.take_duration(Duration::from_secs(1));
mixer.add(wave);
println!("Beep...");
thread::sleep(Duration::from_millis(1500));
Ok(())
}