Audio Control API

Audio Client

Provides audio capture, playback, and device enumeration through the camera-daemon gRPC service.

class neoruntime_ipc_sdk.audio.AudioDevice(name: 'str', description: 'str')[source]

Bases: object

name: str
description: str
__init__(name, description)
class neoruntime_ipc_sdk.audio.AudioStatus(capturing: 'bool', playing: 'bool', device: 'str', sample_rate: 'int', channels: 'int', codec: 'str', volume: 'float', mute: 'bool')[source]

Bases: object

capturing: bool
playing: bool
device: str
sample_rate: int
channels: int
codec: str
volume: float
mute: bool
__init__(capturing, playing, device, sample_rate, channels, codec, volume, mute)
class neoruntime_ipc_sdk.audio.AudioClient(endpoint=None)[source]

Bases: GrpcClient

Audio control client for the camera-daemon audio HAL.

Usage:

audio = AudioClient()

# List capture devices devices = audio.list_capture_devices()

# Start capture audio.start_capture(codec=”aac”, sample_rate=48000)

# Check status status = audio.get_status() print(status.capturing)

# Adjust volume audio.set_config(volume=0.8)

# Stop capture audio.stop_capture()

list_capture_devices()[source]

List available audio capture devices.

list_playback_devices()[source]

List available audio playback devices.

start_capture(device='', sample_rate=0, channels=0, codec='', bitrate=0)[source]

Start audio capture. Leave parameters at 0/empty to use defaults.

stop_capture()[source]

Stop audio capture.

start_playback(device='', sample_rate=0, channels=0)[source]

Start audio playback.

stop_playback()[source]

Stop audio playback.

get_status()[source]

Get current audio status.

set_config(device='', sample_rate=0, channels=0, codec='', bitrate=0, volume=-1.0, mute=None)[source]

Update audio configuration (volume, mute, codec, etc.).

Leave parameters at defaults to keep current values. Volume -1.0 means don’t change; mute None means don’t change.

stream_pcm(pcm_iter, sample_rate=48000, channels=1, fmt='S16LE')[source]

Stream PCM audio chunks to device for two-way talk (playback).

Parameters:
  • pcm_iter (Iterator[bytes]) – Iterator yielding raw PCM byte chunks.

  • sample_rate (int) – Sample rate (default 48000).

  • channels (int) – Channel count (default 1 = mono).

  • fmt (str) – Sample format (default “S16LE”).

stream_pcm_file(path, chunk_size=4096, sample_rate=48000, channels=1, fmt='S16LE')[source]

Stream a raw PCM file to device for playback.

Parameters:
  • path (str) – Path to raw PCM file.

  • chunk_size (int) – Bytes per chunk (default 4096).

  • sample_rate (int) – Sample rate.

  • channels (int) – Channel count.

  • fmt (str) – Sample format.

AudioClient

class neoruntime_ipc_sdk.AudioClient(endpoint=None)[source]

Bases: GrpcClient

Audio control client for the camera-daemon audio HAL.

Usage:

audio = AudioClient()

# List capture devices devices = audio.list_capture_devices()

# Start capture audio.start_capture(codec=”aac”, sample_rate=48000)

# Check status status = audio.get_status() print(status.capturing)

# Adjust volume audio.set_config(volume=0.8)

# Stop capture audio.stop_capture()

list_capture_devices()[source]

List available audio capture devices.

list_playback_devices()[source]

List available audio playback devices.

start_capture(device='', sample_rate=0, channels=0, codec='', bitrate=0)[source]

Start audio capture. Leave parameters at 0/empty to use defaults.

stop_capture()[source]

Stop audio capture.

start_playback(device='', sample_rate=0, channels=0)[source]

Start audio playback.

stop_playback()[source]

Stop audio playback.

get_status()[source]

Get current audio status.

set_config(device='', sample_rate=0, channels=0, codec='', bitrate=0, volume=-1.0, mute=None)[source]

Update audio configuration (volume, mute, codec, etc.).

Leave parameters at defaults to keep current values. Volume -1.0 means don’t change; mute None means don’t change.

stream_pcm(pcm_iter, sample_rate=48000, channels=1, fmt='S16LE')[source]

Stream PCM audio chunks to device for two-way talk (playback).

Parameters:
  • pcm_iter (Iterator[bytes]) – Iterator yielding raw PCM byte chunks.

  • sample_rate (int) – Sample rate (default 48000).

  • channels (int) – Channel count (default 1 = mono).

  • fmt (str) – Sample format (default “S16LE”).

stream_pcm_file(path, chunk_size=4096, sample_rate=48000, channels=1, fmt='S16LE')[source]

Stream a raw PCM file to device for playback.

Parameters:
  • path (str) – Path to raw PCM file.

  • chunk_size (int) – Bytes per chunk (default 4096).

  • sample_rate (int) – Sample rate.

  • channels (int) – Channel count.

  • fmt (str) – Sample format.

Data Types

AudioDevice

class neoruntime_ipc_sdk.AudioDevice(name: 'str', description: 'str')[source]
name: str
description: str
__init__(name, description)

AudioStatus

class neoruntime_ipc_sdk.AudioStatus(capturing: 'bool', playing: 'bool', device: 'str', sample_rate: 'int', channels: 'int', codec: 'str', volume: 'float', mute: 'bool')[source]
capturing: bool
playing: bool
device: str
sample_rate: int
channels: int
codec: str
volume: float
mute: bool
__init__(capturing, playing, device, sample_rate, channels, codec, volume, mute)

Usage Examples

Query devices and status

from neoruntime_ipc_sdk import AudioClient

audio = AudioClient()

# List capture / playback devices
for dev in audio.list_capture_devices():
    print(f"capture: {dev.name} ({dev.description})")
for dev in audio.list_playback_devices():
    print(f"playback: {dev.name} ({dev.description})")

# Current runtime status
status = audio.get_status()
print(f"capturing: {status.capturing}, playing: {status.playing}, "
      f"{status.sample_rate}Hz {status.channels}ch {status.codec}")

Start / stop capture

# Start capture with explicit parameters (0/empty keeps defaults)
audio.start_capture(sample_rate=16000, channels=1, codec="aac")

# Subscribe to audio frames via AudioStreamClient
# (see the audio streaming API)...

audio.stop_capture()

Play a file (intercom playback)

# Blocking playback of a PCM file
audio.start_playback(sample_rate=48000, channels=1)
audio.stream_pcm_file(
    "/app/audio/notice.pcm",
    sample_rate=48000, channels=1, fmt="S16LE",
)
audio.stop_playback()

Stream PCM (live intercom)

# pcm_iter yields PCM chunks; playback proceeds while chunks arrive
def pcm_chunks():
    for chunk in network_receive():
        yield chunk

audio.stream_pcm(pcm_chunks(), sample_rate=16000, channels=1)

Volume and mute

audio.set_config(volume=0.8, mute=False)

Context manager

with AudioClient() as audio:
    audio.get_status()