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
impl Clone for BufferSize
Source§fn clone(&self) -> BufferSize
fn clone(&self) -> BufferSize
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more