1pub mod config;
2pub mod net;
3pub mod utils;
4
5use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
6use serde::{Deserialize, Serialize};
7
8pub type CommonSample = f32;
9
10pub const AUDIO_BUF_LEN: usize = 8192;
11
12#[derive(Clone, Copy)]
13pub struct AudioSpec {
14 pub n_channels: usize,
15 pub sample_rate: usize,
16}
17
18#[derive(Archive, Clone, Default, RkyvDeserialize, RkyvSerialize)]
19pub struct AudioChunk {
20 pub samples: Vec<CommonSample>,
21 pub n_channels: usize,
22 pub sample_rate: usize,
23 pub is_final: bool,
24}
25
26#[derive(Deserialize, Serialize)]
27#[serde(deny_unknown_fields)]
28pub struct RawFilter {
29 pub tag: String,
30 pub regex: String,
31}
32
33impl AudioSpec {
34 pub fn new(n_channels: usize, sample_rate: usize) -> Self {
35 Self {
36 n_channels,
37 sample_rate,
38 }
39 }
40}
41
42impl AudioChunk {
43 pub fn new(
44 samples: Vec<CommonSample>,
45 n_channels: usize,
46 sample_rate: usize,
47 is_final: bool,
48 ) -> Self {
49 Self {
50 samples,
51 n_channels,
52 sample_rate,
53 is_final,
54 }
55 }
56
57 pub fn slice(&self, start: usize, end: usize) -> Self {
58 let end = end.min(self.samples.len() - 1);
59 let is_final = end >= self.samples.len() - 1;
60
61 Self {
62 samples: self.samples[start..=end].to_vec(),
63 n_channels: self.n_channels,
64 sample_rate: self.sample_rate,
65 is_final,
66 }
67 }
68}