Skip to main content

rskit_media/stream/
audio.rs

1//! Audio types for media processing.
2
3use serde::{Deserialize, Serialize};
4
5/// Audio sample rate.
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub struct SampleRate(pub u32);
8
9impl SampleRate {
10    /// Create from Hz value.
11    pub fn hz(n: u32) -> Self {
12        Self(n)
13    }
14    /// CD quality (44,100 Hz).
15    pub fn cd() -> Self {
16        Self(44100)
17    }
18    /// DVD quality (48,000 Hz).
19    pub fn dvd() -> Self {
20        Self(48000)
21    }
22    /// HD audio (96,000 Hz).
23    pub fn hd() -> Self {
24        Self(96000)
25    }
26}
27
28/// Audio channel layout.
29#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
30pub enum ChannelLayout {
31    /// Single channel.
32    Mono,
33    /// Two channels (left + right).
34    Stereo,
35    /// 5.1 surround sound.
36    Surround51,
37    /// 7.1 surround sound.
38    Surround71,
39    /// Custom number of channels.
40    Custom(u16),
41}
42
43impl ChannelLayout {
44    /// Number of channels in this layout.
45    pub fn channel_count(&self) -> u16 {
46        match self {
47            Self::Mono => 1,
48            Self::Stereo => 2,
49            Self::Surround51 => 6,
50            Self::Surround71 => 8,
51            Self::Custom(n) => *n,
52        }
53    }
54}