Function create_duplex_stream

Source
pub fn create_duplex_stream<InputDevice: AudioInputDevice, OutputDevice: AudioOutputDevice, Callback: AudioDuplexCallback>(
    input_device: InputDevice,
    output_device: OutputDevice,
    callback: Callback,
    config: DuplexStreamConfig,
) -> Result<DuplexStreamHandle<InputDevice::StreamHandle<InputProxy>, OutputDevice::StreamHandle<DuplexCallback<Callback>>>, DuplexCallbackError<InputDevice::Error, OutputDevice::Error>>
Expand description

Creates a duplex audio stream that handles both input and output simultaneously.

This function sets up a full-duplex audio stream by creating separate input and output streams and connecting them through a ring buffer. The input stream captures audio data and stores it in the buffer, while the output stream retrieves and processes this data before playback.

§Arguments

  • input_device - The audio input device to capture audio from
  • input_config - Configuration parameters for the input stream
  • output_device - The audio output device to play audio through
  • output_config - Configuration parameters for the output stream
  • callback - The callback implementation that processes audio data

§Returns

A Result containing either:

  • A DuplexStreamHandle that can be used to manage the duplex stream
  • A DuplexCallbackError if stream creation fails

§Example

use interflow::duplex::AudioDuplexCallback;
use interflow::prelude::*;

struct MyCallback;

impl MyCallback {
    pub fn new() -> Self {
        Self
    }
}

impl AudioDuplexCallback for MyCallback {
    fn on_audio_data(&mut self, context: AudioCallbackContext, input: AudioInput<f32>, output: AudioOutput<f32>) {
        // Implementation left as exercise to the reader
    }
}

let input_device = default_input_device();
let output_device = default_output_device();
let input_config = input_device.default_input_config().unwrap();
let output_config = output_device.default_output_config().unwrap();

let callback = MyCallback::new();

let duplex_stream = create_duplex_stream(
    input_device,
    output_device,
    callback,
    DuplexStreamConfig::new(input_config, output_config),
).expect("Failed to create duplex stream");