custom_renderer/
custom_renderer.rs1use kittyaudio::{Backend, Device, Frame, Renderer, RendererHandle, StreamSettings};
3use std::{thread, time::Duration};
4
5#[derive(Clone)]
6struct CustomRenderer {
7 frame: usize,
8}
9
10impl Renderer for CustomRenderer {
11 fn next_frame(&mut self, sample_rate: u32) -> Frame {
12 self.frame += 1;
13 let time = self.frame as f64 / sample_rate as f64;
14 let value = (time.sin() * 1200.0).sin() * 0.5;
15 Frame::from_mono(value as f32)
16 }
17}
18
19fn main() {
20 let renderer = RendererHandle::new(CustomRenderer { frame: 0 });
21
22 thread::spawn(|| {
23 let mut backend = Backend::new();
24 backend
25 .start_audio_thread(Device::Default, StreamSettings::default(), renderer)
26 .expect("failed to start audio thread");
27 });
28
29 thread::sleep(Duration::from_secs(30));
30}