Skip to content

strands.experimental.bidi.io.audio

Send and receive audio data from devices.

Reads user audio from input device and sends agent audio to output device using PyAudio. If a user interrupts the agent, the output buffer is cleared to stop playback.

Audio configuration is provided by the model via agent.model.config[“audio”].

class _BidiAudioBuffer()

Defined in: src/strands/experimental/bidi/io/audio.py:26

Buffer chunks of audio data between agent and PyAudio.

def __init__(size: int | None = None)

Defined in: src/strands/experimental/bidi/io/audio.py:32

Initialize buffer settings.

Arguments:

  • size - Size of the buffer (default: unbounded).
def start() -> None

Defined in: src/strands/experimental/bidi/io/audio.py:40

Setup buffer.

def stop() -> None

Defined in: src/strands/experimental/bidi/io/audio.py:45

Tear down buffer.

def put(chunk: bytes) -> None

Defined in: src/strands/experimental/bidi/io/audio.py:56

Put data chunk into buffer.

If full, removes the oldest chunk.

def get(byte_count: int | None = None) -> bytes

Defined in: src/strands/experimental/bidi/io/audio.py:71

Get the number of bytes specified from the buffer.

Arguments:

  • byte_count - Number of bytes to get from buffer.

    • If the number of bytes specified is not available, the return is padded with silence.
    • If the number of bytes is not specified, get the first chunk put in the buffer.

Returns:

Specified number of bytes.

def clear() -> None

Defined in: src/strands/experimental/bidi/io/audio.py:101

Clear the buffer.

class _BidiAudioInput(BidiInput)

Defined in: src/strands/experimental/bidi/io/audio.py:110

Handle audio input from user.

Attributes:

  • _audio - PyAudio instance for audio system access.
  • _stream - Audio input stream.
  • _buffer - Buffer for sharing audio data between agent and PyAudio.
def __init__(config: dict[str, Any]) -> None

Defined in: src/strands/experimental/bidi/io/audio.py:126

Extract configs.

async def start(agent: "BidiAgent") -> None

Defined in: src/strands/experimental/bidi/io/audio.py:134

Start input stream.

Arguments:

  • agent - The BidiAgent instance, providing access to model configuration.
async def stop() -> None

Defined in: src/strands/experimental/bidi/io/audio.py:160

Stop input stream.

async def __call__() -> BidiAudioInputEvent

Defined in: src/strands/experimental/bidi/io/audio.py:173

Read audio from input stream.

class _BidiAudioOutput(BidiOutput)

Defined in: src/strands/experimental/bidi/io/audio.py:190

Handle audio output from bidi agent.

Attributes:

  • _audio - PyAudio instance for audio system access.
  • _stream - Audio output stream.
  • _buffer - Buffer for sharing audio data between agent and PyAudio.
def __init__(config: dict[str, Any]) -> None

Defined in: src/strands/experimental/bidi/io/audio.py:206

Extract configs.

async def start(agent: "BidiAgent") -> None

Defined in: src/strands/experimental/bidi/io/audio.py:214

Start output stream.

Arguments:

  • agent - The BidiAgent instance, providing access to model configuration.
async def stop() -> None

Defined in: src/strands/experimental/bidi/io/audio.py:239

Stop output stream.

async def __call__(event: BidiOutputEvent) -> None

Defined in: src/strands/experimental/bidi/io/audio.py:252

Send audio to output stream.

class BidiAudioIO()

Defined in: src/strands/experimental/bidi/io/audio.py:270

Send and receive audio data from devices.

def __init__(**config: Any) -> None

Defined in: src/strands/experimental/bidi/io/audio.py:273

Initialize audio devices.

Arguments:

  • **config - Optional device configuration:

    • input_buffer_size (int): Maximum input buffer size (default: None)
    • input_device_index (int): Specific input device (default: None = system default)
    • input_frames_per_buffer (int): Input buffer size (default: 512)
    • output_buffer_size (int): Maximum output buffer size (default: None)
    • output_device_index (int): Specific output device (default: None = system default)
    • output_frames_per_buffer (int): Output buffer size (default: 512)
def input() -> _BidiAudioInput

Defined in: src/strands/experimental/bidi/io/audio.py:288

Return audio processing BidiInput.

def output() -> _BidiAudioOutput

Defined in: src/strands/experimental/bidi/io/audio.py:292

Return audio processing BidiOutput.