use dialog::DialogBox;
use std::time::Duration;
use knyst::{
audio_backend::{CpalBackend, CpalBackendOptions},
controller::print_error_handler,
knyst_commands,
prelude::*,
};
fn main() -> anyhow::Result<()> {
let _backend = setup();
let file_path = dialog::FileSelection::new("Please select an audio file")
.title("Open audio file")
.show()
.expect("Could not display dialog box")
.unwrap();
let sound_buffer = Buffer::from_sound_file(file_path)?;
let channels = sound_buffer.num_channels();
let buffer = knyst_commands().insert_buffer(sound_buffer);
let buf_playback_node = BufferReaderMulti::new(buffer, 1.0, StopAction::FreeSelf)
.channels(channels)
.looping(true)
.upload();
graph_output(0, buf_playback_node.channels(2));
println!("Playing back sound for 10 seconds");
std::thread::sleep(Duration::from_millis(10000));
Ok(())
}
fn setup() -> impl AudioBackend {
let mut backend =
CpalBackend::new(CpalBackendOptions::default()).expect("Unable to connect to CPAL backend");
let _sphere_id = KnystSphere::start(
&mut backend,
SphereSettings {
..Default::default()
},
print_error_handler,
)
.ok();
backend
}