use num_complex::Complex32;
use super::generator::Sine;
pub struct FrequencyShift {
offset_signal: Sine,
}
impl FrequencyShift {
pub fn new(freq_offset: f32, sample_rate: usize) -> Self {
let offset_signal = Sine::new(freq_offset as f32, sample_rate);
Self {offset_signal}
}
pub fn process_buffer(&mut self, input_buffer: &[Complex32], output_buffer: &mut [Complex32]) {
let n = usize::min(input_buffer.len(), output_buffer.len());
for i in 0..n {
output_buffer[i] = self.offset_signal.next().unwrap() * input_buffer[i];
}
}
pub fn process_sample(&mut self, v: &Complex32) -> Complex32 {
self.offset_signal.next().unwrap() * v
}
}