Enum SampleRate

Source
pub enum SampleRate<R> {
Show 15 variants Streaminfo(u32), Hz88200, Hz176400, Hz192000, Hz8000, Hz16000, Hz22050, Hz24000, Hz32000, Hz44100, Hz48000, Hz96000, KHz(R), Hz(R), DHz(R),
}
Expand description

Possible sample rates in a FLAC frame

Common rates are stored as a 4-bit value, while uncommon rates are stored as 8 or 16 bit values. Sample rates defined in the STREAMINFO metadata block are only possible on a “non-subset” stream, which is not streamable.

BitsSample Rate
0000get from STREAMINFO
000188200 Hz
0010176400 Hz
0011192000 Hz
01008000 Hz
010116000 Hz
011022050 Hz
011124000 Hz
100032000 Hz
100144100 Hz
101048000 Hz
101196000 Hz
1100read 8 bits, in kHz
1101read 16 bits, in Hz
1110read 16 bits, in 10s of Hz
1111invalid sample rate

Handing uncommon frame rates is why this type is a generic with multiple implementations from reading from a bitstream. The first reads common rates, while the second reads additional bits if necessary.

§Example

use flac_codec::stream::SampleRate;
use bitstream_io::{BitReader, BitRead, BigEndian};

let data: &[u8] = &[
    0b0110_1001,              // block size + sample rate
    0b0000_100_0,             // channels + bps + pad
    0x00,                     // frame number
    0x13,                     // uncommon block size (+1)
];

let mut r = BitReader::endian(data, BigEndian);
r.skip(4).unwrap();          // skip block size
let sample_rate = r.parse::<SampleRate<()>>().unwrap();  // reads 0b1001
assert_eq!(
    sample_rate,
    SampleRate::Hz44100,     // got defined sample rate
);
r.skip(8 + 8 + 8).unwrap();  // skip unnecessary bits for this example
assert_eq!(
    // since our rate is defined, no need to read additional bits
    r.parse_using::<SampleRate<u32>>(sample_rate).unwrap(),
    SampleRate::Hz44100,
);

Variants§

§

Streaminfo(u32)

Get rate from STREAMINFO metadata block

§

Hz88200

88200 Hz

§

Hz176400

176,400 Hz

§

Hz192000

192,000 Hz

§

Hz8000

8,000 Hz

§

Hz16000

16,000 Hz

§

Hz22050

22,050 Hz

§

Hz24000

24,000 Hz

§

Hz32000

32,000 Hz

§

Hz44100

44,100 Hz

§

Hz48000

48,000 Hz

§

Hz96000

96,000 Hz

§

KHz(R)

8-bit value in kHz

§

Hz(R)

16-bit value in Hz

§

DHz(R)

16-bit value * 10 in Hz

Trait Implementations§

Source§

impl<R: Clone> Clone for SampleRate<R>

Source§

fn clone(&self) -> SampleRate<R>

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<R: Debug> Debug for SampleRate<R>

Source§

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

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

impl Display for SampleRate<u32>

Source§

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

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

impl From<SampleRate<u32>> for u32

Source§

fn from(rate: SampleRate<u32>) -> Self

Converts to this type from the input type.
Source§

impl FromBitStream for SampleRate<()>

Source§

type Error = Error

Error generated during parsing, such as io::Error
Source§

fn from_reader<R: BitRead + ?Sized>(r: &mut R) -> Result<Self, Self::Error>

Parse Self from reader
Source§

impl FromBitStreamUsing for SampleRate<()>

Reads the raw sample rate bits, which need to be finalized

Source§

type Context = Option<u32>

Some context to consume when parsing
Source§

type Error = Error

Error generated during parsing, such as io::Error
Source§

fn from_reader<R: BitRead + ?Sized>( r: &mut R, streaminfo_rate: Option<u32>, ) -> Result<Self, Self::Error>

Parse Self from reader with the given context
Source§

impl FromBitStreamUsing for SampleRate<u32>

Source§

type Context = SampleRate<()>

Some context to consume when parsing
Source§

type Error = Error

Error generated during parsing, such as io::Error
Source§

fn from_reader<R: BitRead + ?Sized>( r: &mut R, rate: SampleRate<()>, ) -> Result<Self, Self::Error>

Parse Self from reader with the given context
Source§

impl<R: PartialEq> PartialEq for SampleRate<R>

Source§

fn eq(&self, other: &SampleRate<R>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

const 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<R> ToBitStream for SampleRate<R>

Writes the raw sample rate bits

Source§

type Error = Error

Error generated during building, such as io::Error
Source§

fn to_writer<W: BitWrite + ?Sized>(&self, w: &mut W) -> Result<(), Self::Error>

Generate self to writer
Source§

fn bits<C>(&self) -> Result<C, Self::Error>
where C: Counter, Self: Sized,

Returns length of self in bits, if possible
Source§

fn bits_len<C, E>(&self) -> Result<C, Self::Error>
where C: Counter, E: Endianness, Self: Sized,

👎Deprecated since 4.0.0: use of bits() is preferred
Returns total length of self, if possible
Source§

impl TryFrom<u32> for SampleRate<u32>

Source§

type Error = Error

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

fn try_from(sample_rate: u32) -> Result<Self, Error>

Performs the conversion.
Source§

impl<R: Copy> Copy for SampleRate<R>

Source§

impl<R: Eq> Eq for SampleRate<R>

Source§

impl<R> StructuralPartialEq for SampleRate<R>

Auto Trait Implementations§

§

impl<R> Freeze for SampleRate<R>
where R: Freeze,

§

impl<R> RefUnwindSafe for SampleRate<R>
where R: RefUnwindSafe,

§

impl<R> Send for SampleRate<R>
where R: Send,

§

impl<R> Sync for SampleRate<R>
where R: Sync,

§

impl<R> Unpin for SampleRate<R>
where R: Unpin,

§

impl<R> UnwindSafe for SampleRate<R>
where R: UnwindSafe,

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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.