rill_core_dsp/context.rs
1//! Контекст выполнения DSP-алгоритмов
2
3use rill_core::Transcendental;
4
5/// Контекст DSP-обработки
6///
7/// Предоставляет информацию о текущем состоянии обработки:
8/// - временные метки
9/// - частота дискретизации
10/// - размер блока
11/// - и т.д.
12#[derive(Debug, Clone)]
13pub struct DspContext<T: Transcendental> {
14 /// Текущая частота дискретизации
15 pub sample_rate: f32,
16
17 /// Размер текущего обрабатываемого блока
18 pub block_size: usize,
19
20 /// Абсолютная позиция текущего блока (в семплах)
21 pub block_position: usize,
22
23 /// Тип данных для текущей обработки
24 pub _phantom: std::marker::PhantomData<T>,
25}
26
27impl<'a, T: Transcendental> DspContext<T> {
28 /// Создать новый контекст
29 pub fn new(sample_rate: f32, block_size: usize, block_position: usize) -> Self {
30 Self {
31 sample_rate,
32 block_size,
33 block_position,
34 _phantom: std::marker::PhantomData,
35 }
36 }
37
38 /// Получить текущую позицию в секундах
39 pub fn seconds(&self) -> f64 {
40 self.block_position as f64 / self.sample_rate as f64
41 }
42}