sapi_lite/audio/
format.rs1use windows as Windows;
2use Windows::Win32::Media::Audio::{WAVEFORMATEX, WAVE_FORMAT_PCM};
3
4#[derive(Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
6#[allow(missing_docs)]
7pub enum SampleRate {
8 Hz8000 = 8000,
9 Hz11025 = 11025,
10 Hz12000 = 12000,
11 Hz16000 = 16000,
12 Hz22050 = 22050,
13 Hz24000 = 24000,
14 Hz32000 = 32000,
15 Hz44100 = 44100,
16 Hz48000 = 48000,
17}
18
19#[derive(Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
21#[allow(missing_docs)]
22pub enum BitRate {
23 Bits8 = 8,
24 Bits16 = 16,
25}
26
27#[derive(Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
29#[allow(missing_docs)]
30pub enum Channels {
31 Mono = 1,
32 Stereo = 2,
33}
34
35#[derive(Debug, Hash, PartialEq, Eq, Clone)]
37pub struct AudioFormat {
38 pub sample_rate: SampleRate,
40 pub bit_rate: BitRate,
42 pub channels: Channels,
44}
45
46impl AudioFormat {
47 pub(super) fn to_sapi(&self) -> WAVEFORMATEX {
48 let block_align = (self.channels as u32) * (self.bit_rate as u32) / 8;
49 WAVEFORMATEX {
50 wFormatTag: WAVE_FORMAT_PCM as _,
51 nChannels: self.channels as u16,
52 nSamplesPerSec: self.sample_rate as u32,
53 nAvgBytesPerSec: (self.sample_rate as u32) * block_align,
54 nBlockAlign: block_align as u16,
55 wBitsPerSample: self.bit_rate as u16,
56 cbSize: 0,
57 }
58 }
59}