devalang_wasm/engine/audio/
settings.rs1use std::fmt;
2
3#[cfg(feature = "cli")]
4use clap::ValueEnum;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7#[cfg_attr(feature = "cli", derive(ValueEnum))]
8#[cfg_attr(feature = "cli", clap(rename_all = "lower"))]
9pub enum AudioFormat {
10 Mp3,
11 Wav,
12 Flac,
13 Mid, }
15
16impl Default for AudioFormat {
17 fn default() -> Self {
18 AudioFormat::Mp3
19 }
20}
21
22impl AudioFormat {
23 pub fn label(self) -> &'static str {
24 match self {
25 AudioFormat::Mp3 => "mp3",
26 AudioFormat::Wav => "wav",
27 AudioFormat::Flac => "flac",
28 AudioFormat::Mid => "mid",
29 }
30 }
31
32 pub fn file_extension(self) -> &'static str {
33 self.label()
34 }
35
36 pub fn from_str(s: &str) -> Option<Self> {
38 match s.to_lowercase().as_str() {
39 "mp3" => Some(AudioFormat::Mp3),
40 "wav" => Some(AudioFormat::Wav),
41 "flac" => Some(AudioFormat::Flac),
42 "mid" | "midi" => Some(AudioFormat::Mid),
43 _ => None,
44 }
45 }
46}
47
48#[derive(Debug, Clone, Copy, PartialEq, Eq)]
49#[cfg_attr(feature = "cli", derive(ValueEnum))]
50#[cfg_attr(feature = "cli", clap(rename_all = "lower"))]
51pub enum AudioBitDepth {
52 #[cfg_attr(feature = "cli", clap(alias = "8"))]
53 Bit8,
54 #[cfg_attr(feature = "cli", clap(alias = "16"))]
55 Bit16,
56 #[cfg_attr(feature = "cli", clap(alias = "24"))]
57 Bit24,
58 #[cfg_attr(feature = "cli", clap(alias = "32"))]
59 Bit32,
60}
61
62impl Default for AudioBitDepth {
63 fn default() -> Self {
64 AudioBitDepth::Bit16
65 }
66}
67
68impl AudioBitDepth {
69 pub fn bits(self) -> u16 {
70 match self {
71 AudioBitDepth::Bit8 => 8,
72 AudioBitDepth::Bit16 => 16,
73 AudioBitDepth::Bit24 => 24,
74 AudioBitDepth::Bit32 => 32,
75 }
76 }
77}
78
79#[derive(Debug, Clone, Copy, PartialEq, Eq)]
80#[cfg_attr(feature = "cli", derive(ValueEnum))]
81#[cfg_attr(feature = "cli", clap(rename_all = "lower"))]
82pub enum AudioChannels {
83 #[cfg_attr(feature = "cli", clap(alias = "1"))]
84 Mono,
85 #[cfg_attr(feature = "cli", clap(alias = "2"))]
86 Stereo,
87}
88
89impl Default for AudioChannels {
90 fn default() -> Self {
91 AudioChannels::Stereo
92 }
93}
94
95impl AudioChannels {
96 pub fn count(self) -> u16 {
97 match self {
98 AudioChannels::Mono => 1,
99 AudioChannels::Stereo => 2,
100 }
101 }
102}
103
104#[derive(Debug, Clone, Copy, PartialEq, Eq)]
105#[cfg_attr(feature = "cli", derive(ValueEnum))]
106#[cfg_attr(feature = "cli", clap(rename_all = "kebab-case"))]
107pub enum ResampleQuality {
108 #[cfg_attr(feature = "cli", clap(alias = "linear"))]
109 Linear2,
110 #[cfg_attr(feature = "cli", clap(alias = "sinc-12"))]
111 Sinc12,
112 Sinc24,
113 Sinc48,
114 Sinc96,
115 Sinc192,
116 Sinc512,
117}
118
119impl Default for ResampleQuality {
120 fn default() -> Self {
121 ResampleQuality::Sinc24
122 }
123}
124
125impl ResampleQuality {
126 pub fn label(self) -> &'static str {
127 match self {
128 ResampleQuality::Linear2 => "2-point linear",
129 ResampleQuality::Sinc12 => "12-point sinc",
130 ResampleQuality::Sinc24 => "24-point sinc",
131 ResampleQuality::Sinc48 => "48-point sinc",
132 ResampleQuality::Sinc96 => "96-point sinc",
133 ResampleQuality::Sinc192 => "192-point sinc",
134 ResampleQuality::Sinc512 => "512-point sinc",
135 }
136 }
137}
138
139impl fmt::Display for ResampleQuality {
140 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
141 f.write_str(self.label())
142 }
143}