playback_sine/
playback_sine.rs1use rtaudio::{Api, Buffers, DeviceParams, SampleFormat, StreamInfo, StreamOptions, StreamStatus};
2
3const AMPLITUDE: f32 = 0.5;
4const FREQ_HZ: f32 = 440.0;
5
6fn main() {
7 let host = rtaudio::Host::new(Api::Unspecified).unwrap();
8 dbg!(host.api());
9
10 let out_device = host.default_output_device().unwrap();
11
12 let mut stream_handle = host
13 .open_stream(
14 Some(DeviceParams {
15 device_id: out_device.id,
16 num_channels: 2,
17 first_channel: 0,
18 }),
19 None,
20 SampleFormat::Float32,
21 out_device.preferred_sample_rate,
22 256,
23 StreamOptions::default(),
24 |error| eprintln!("{}", error),
25 )
26 .unwrap();
27 dbg!(stream_handle.info());
28
29 let mut phasor = 0.0;
30 let phasor_inc = FREQ_HZ / stream_handle.info().sample_rate as f32;
31
32 stream_handle
33 .start(
34 move |buffers: Buffers<'_>, _info: &StreamInfo, _status: StreamStatus| {
35 if let Buffers::Float32 { output, input: _ } = buffers {
36 for frame in output.chunks_mut(2) {
38 let val = (phasor * std::f32::consts::TAU).sin() * AMPLITUDE;
40 phasor = (phasor + phasor_inc).fract();
41
42 frame[0] = val;
43 frame[1] = val;
44 }
45 }
46 },
47 )
48 .unwrap();
49
50 std::thread::sleep(std::time::Duration::from_millis(3000));
52}