Skip to main content

BufferSize

Enum BufferSize 

Source
pub enum BufferSize {
    Default,
    Fixed(FrameCount),
}
Expand description

The buffer size requests the callback size for audio streams.

This controls the approximate size of the audio buffer passed to your callback. The actual callback size depends on the host/platform implementation and hardware constraints, and may differ from or vary around the requested size.

§Callback Size Expectations

When you specify BufferSize::Fixed(x), you are requesting that callbacks receive approximately x frames of audio data. However, no guarantees can be made about the actual callback size:

  • The host may round to hardware-supported values
  • Different devices have different constraints
  • The callback size may vary between calls (especially on mobile platforms)
  • The actual size might be larger or smaller than requested

§Latency Considerations

BufferSize::Default uses the host’s default buffer size, which may be surprisingly large, leading to higher latency. If low latency is desired, BufferSize::Fixed should be used with a small value in accordance with the SupportedBufferSize range from SupportedStreamConfig.

Smaller buffer sizes reduce latency but may increase CPU usage and risk audio dropouts if the callback cannot process audio quickly enough.

§Example

use cpal::traits::{DeviceTrait, HostTrait};
use cpal::{BufferSize, SupportedBufferSize};

let host = cpal::default_host();
let device = host.default_output_device().unwrap();
let config = device.default_output_config().unwrap();

// Check supported buffer size range
match config.buffer_size() {
    SupportedBufferSize::Range { min, max } => {
        println!("Buffer size range: {} - {}", min, max);
        // Request a small buffer for low latency
        let mut stream_config = config.config();
        stream_config.buffer_size = BufferSize::Fixed(256);
    }
    SupportedBufferSize::Unknown => {
        // Platform doesn't expose buffer size control
        println!("Buffer size cannot be queried on this platform");
    }
}

Variants§

§

Default

§

Fixed(FrameCount)

Trait Implementations§

Source§

impl Clone for BufferSize

Source§

fn clone(&self) -> BufferSize

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

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

Performs copy-assignment from source. Read more
Source§

impl Debug for BufferSize

Source§

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

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

impl PartialEq for BufferSize

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · 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 BufferSize

Source§

impl Eq for BufferSize

Source§

impl StructuralPartialEq for BufferSize

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<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

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> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

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.
Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,