Files

50 lines
1.1 KiB
Rust
Raw Permalink Normal View History

2016-09-09 00:53:25 +01:00
extern crate sdl2;
2017-05-03 08:41:00 +02:00
use sdl2::audio::AudioSpecDesired;
2016-09-09 00:53:25 +01:00
use std::time::Duration;
fn gen_wave(bytes_to_write: i32) -> Vec<i16> {
// Generate a square wave
2017-08-23 18:56:12 +02:00
let tone_volume = 1_000i16;
let period = 48_000 / 256;
2016-09-09 00:53:25 +01:00
let sample_count = bytes_to_write;
let mut result = Vec::new();
2017-08-23 18:56:12 +02:00
2016-09-09 00:53:25 +01:00
for x in 0..sample_count {
2020-12-08 17:06:23 +01:00
result.push(if (x / period) % 2 == 0 {
tone_volume
} else {
-tone_volume
});
2016-09-09 00:53:25 +01:00
}
result
}
fn main() -> Result<(), String> {
let sdl_context = sdl2::init()?;
let audio_subsystem = sdl_context.audio()?;
2016-09-09 00:53:25 +01:00
let desired_spec = AudioSpecDesired {
2017-08-23 18:56:12 +02:00
freq: Some(48_000),
2016-09-09 00:53:25 +01:00
channels: Some(2),
// mono -
2021-02-15 11:40:13 +01:00
samples: None, // default sample size
};
2016-09-09 00:53:25 +01:00
let device = audio_subsystem.open_queue::<i16, _>(None, &desired_spec)?;
2016-09-09 00:53:25 +01:00
2017-08-23 18:56:12 +02:00
let target_bytes = 48_000 * 4;
2016-09-09 00:53:25 +01:00
let wave = gen_wave(target_bytes);
device.queue_audio(&wave)?;
2017-08-23 18:56:12 +02:00
// Start playback
2016-09-09 00:53:25 +01:00
device.resume();
2017-08-23 18:56:12 +02:00
// Play for 2 seconds
std::thread::sleep(Duration::from_millis(2_000));
2016-09-09 00:53:25 +01:00
2017-08-23 18:56:12 +02:00
// Device is automatically closed when dropped
Ok(())
2016-09-09 00:53:25 +01:00
}