Skip to main content

Format

Struct Format 

Source
pub struct Format { /* private fields */ }
Expand description

PCM audio stream format.

Holds the parameters that the audio engine negotiates with an APO: format tag, channel count, sample rate, bit depth, and (for the extensible variant) channel mask plus sub-format GUID. The derived fields (block_align, avg_bytes_per_sec) are computed at construction from the inputs.

Implementations§

Source§

impl Format

Source

pub const fn from_raw( format_tag: u16, channels: u16, samples_per_sec: u32, bits_per_sample: u16, ) -> Self

Construct a format directly from its fields.

Prefer the typed constructors (pcm_int16, pcm_float32, …) when modelling a standard PCM stream. This raw constructor is intended for round-tripping through WAVEFORMATEX and for tests. Initialises the extension fields (valid_bits_per_sample, channel_mask) to zero.

Source

pub const fn pcm_int16(sample_rate: u32, channels: u16) -> Self

16-bit signed integer PCM (WAVE_FORMAT_PCM).

Source

pub const fn pcm_int24(sample_rate: u32, channels: u16) -> Self

24-bit signed integer PCM packed into 3-byte containers (WAVE_FORMAT_PCM).

Source

pub const fn pcm_int32(sample_rate: u32, channels: u16) -> Self

32-bit signed integer PCM (WAVE_FORMAT_PCM).

Source

pub const fn pcm_float32(sample_rate: u32, channels: u16) -> Self

32-bit IEEE float PCM (WAVE_FORMAT_IEEE_FLOAT). This is the canonical format negotiated between the Windows audio engine and most APOs.

Source

pub const fn pcm_float64(sample_rate: u32, channels: u16) -> Self

64-bit IEEE float PCM (WAVE_FORMAT_IEEE_FLOAT).

Source

pub const fn format_tag(&self) -> u16

wFormatTag field — one of WAVE_FORMAT_PCM, WAVE_FORMAT_IEEE_FLOAT, or WAVE_FORMAT_EXTENSIBLE.

Source

pub const fn channels(&self) -> u16

nChannels field.

Source

pub const fn sample_rate(&self) -> u32

nSamplesPerSec field, in hertz.

Source

pub const fn bits_per_sample(&self) -> u16

wBitsPerSample field.

Source

pub const fn block_align(&self) -> u16

nBlockAlign field — bytes per audio frame (one sample across all channels).

Source

pub const fn avg_bytes_per_sec(&self) -> u32

nAvgBytesPerSec field — sample_rate * block_align.

Source

pub const fn is_float(&self) -> bool

true if this is an IEEE-float PCM stream.

Source

pub const fn is_int_pcm(&self) -> bool

true if this is an integer PCM stream.

Source

pub const fn is_extensible(&self) -> bool

true if this is the extensible variant — the wire format uses WAVE_FORMAT_EXTENSIBLE and cbSize == 22 to surface channel_mask and valid_bits_per_sample over the wire. The logical PCM / float distinction stays in format_tag and resolves to the sub-format GUID at conversion time.

Source

pub const fn channel_mask(&self) -> u32

WAVEFORMATEXTENSIBLE::dwChannelMask value (zero if unspecified — the audio engine picks a default for the channel count).

Source

pub const fn valid_bits_per_sample(&self) -> u16

WAVEFORMATEXTENSIBLE::Samples::wValidBitsPerSample — effective precision when the container is wider than the sample (e.g. 24-bit-in-32-bit). Zero means “same as bits_per_sample”.

Source

pub const fn with_extensible(self) -> Self

Promote a base WAVEFORMATEX-style format to the extensible wire variant.

Flips the extensible flag to true and fills in the channel-position mask via default_channel_mask when channel_mask is currently zero. The format_tag field stays as WAVE_FORMAT_PCM / WAVE_FORMAT_IEEE_FLOAT so the sub-format GUID can still be resolved; only the over-the-wire wFormatTag changes (to WAVE_FORMAT_EXTENSIBLE).

Source

pub const fn with_channel_mask(self, mask: u32) -> Self

Override channel_mask. Useful for declaring custom channel layouts; pass zero to clear back to the default.

Source

pub const fn with_valid_bits_per_sample(self, bits: u16) -> Self

Override valid_bits_per_sample. Pass zero to clear back to “same as bits_per_sample”.

Trait Implementations§

Source§

impl Clone for Format

Source§

fn clone(&self) -> Format

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Format

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for Format

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Format

Source§

fn eq(&self, other: &Format) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Format

Source§

impl Eq for Format

Source§

impl StructuralPartialEq for Format

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.