custom_renderer/
custom_renderer.rs

1//! Example of creating a backend with a custom renderer.
2use 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}