1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
pub use augmented_oscillator::generators::*;
pub use augmented_oscillator::Oscillator;
use std::time::Duration;
pub fn sine_buffer(sample_rate: f32, frequency: f32, length: Duration) -> Vec<f32> {
oscillator_buffer(sample_rate, frequency, length, sine_generator)
}
pub fn oscillator_buffer(
sample_rate: f32,
frequency: f32,
length: Duration,
generator_fn: fn(f32) -> f32,
) -> Vec<f32> {
let mut source = Oscillator::new(generator_fn);
source.set_sample_rate(sample_rate);
source.set_frequency(frequency);
let mut output = Vec::new();
let length_samples = (length.as_secs_f32() * sample_rate).ceil();
output.resize(length_samples as usize, 0.0);
for sample in &mut output {
*sample = source.next_sample();
}
output
}