CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-sounddevice

Python bindings for PortAudio library providing cross-platform audio I/O functionality with NumPy integration.

Pending
Overview
Eval results
Files

device-management.mddocs/

Device Management

Functions to discover, query, and validate audio devices and host APIs. These functions are essential for configuring audio hardware, ensuring compatibility across different systems, and optimizing audio performance for specific platforms.

Capabilities

Device Discovery

Query information about available audio devices, including input and output capabilities, supported sample rates, and channel configurations.

def query_devices(device=None, kind=None):
    """
    Query information about available audio devices.
    
    Parameters:
    - device (int or str, optional): Device index or name to query specific device
    - kind (str, optional): 'input' or 'output' to filter device types
    
    Returns:
    DeviceList or dict: List of all devices or single device information dict
    """

Host API Information

Query information about available host APIs (audio system backends) such as ASIO, DirectSound, WASAPI, Core Audio, ALSA, and JACK.

def query_hostapis(index=None):
    """
    Query information about available host APIs.
    
    Parameters:
    - index (int, optional): Host API index to query specific API
    
    Returns:
    tuple or dict: Tuple of all host APIs or single host API information dict
    """

Settings Validation

Validate input and output device settings before use, ensuring compatibility and preventing runtime errors.

def check_input_settings(device=None, channels=None, dtype=None, extra_settings=None, samplerate=None):
    """
    Check if input device settings are valid.
    
    Parameters:
    - device (int or str, optional): Input device to check
    - channels (int, optional): Number of input channels
    - dtype (str or numpy.dtype, optional): Input data type
    - extra_settings (settings object, optional): Host-API-specific settings
    - samplerate (float, optional): Sample rate in Hz
    
    Returns:
    None
    
    Raises:
    PortAudioError: If settings are invalid
    """

def check_output_settings(device=None, channels=None, dtype=None, extra_settings=None, samplerate=None):
    """
    Check if output device settings are valid.
    
    Parameters:
    - device (int or str, optional): Output device to check  
    - channels (int, optional): Number of output channels
    - dtype (str or numpy.dtype, optional): Output data type
    - extra_settings (settings object, optional): Host-API-specific settings
    - samplerate (float, optional): Sample rate in Hz
    
    Returns:
    None
    
    Raises:
    PortAudioError: If settings are invalid
    """

Usage Examples

Listing Available Devices

import sounddevice as sd

# List all available devices
devices = sd.query_devices()
print(devices)

# List only input devices
input_devices = sd.query_devices(kind='input')
print("Input devices:")
for i, device in enumerate(input_devices):
    print(f"  {i}: {device['name']}")

# List only output devices  
output_devices = sd.query_devices(kind='output')
print("Output devices:")
for i, device in enumerate(output_devices):
    print(f"  {i}: {device['name']}")

Getting Specific Device Information

import sounddevice as sd

# Get information about default input device
default_input = sd.query_devices(kind='input')
print(f"Default input device: {default_input}")

# Get information about a specific device by index
device_info = sd.query_devices(device=1)
print(f"Device 1: {device_info}")

# Get information about a device by name (partial match)
usb_devices = [d for d in sd.query_devices() if 'USB' in d['name']]
if usb_devices:
    print(f"USB device: {usb_devices[0]}")

Querying Host APIs

import sounddevice as sd

# List all available host APIs
hostapis = sd.query_hostapis()
print("Available host APIs:")
for i, api in enumerate(hostapis):
    print(f"  {i}: {api['name']} ({api['device_count']} devices)")

# Get information about a specific host API
if len(hostapis) > 0:
    api_info = sd.query_hostapis(index=0)
    print(f"Host API 0: {api_info}")

Validating Device Settings

import sounddevice as sd

try:
    # Check if we can record from default input device
    sd.check_input_settings(
        channels=2, 
        samplerate=44100, 
        dtype='float32'
    )
    print("Input settings are valid")
    
    # Check if we can play to default output device
    sd.check_output_settings(
        channels=2,
        samplerate=44100,
        dtype='float32'
    )
    print("Output settings are valid")
    
except sd.PortAudioError as e:
    print(f"Invalid settings: {e}")

Finding Best Device Configuration

import sounddevice as sd

def find_best_input_device():
    """Find the best input device with highest sample rate support."""
    devices = sd.query_devices(kind='input')
    best_device = None
    best_samplerate = 0
    
    for i, device in enumerate(devices):
        if device['max_input_channels'] > 0:
            # Test supported sample rates
            for rate in [96000, 48000, 44100, 22050]:
                try:
                    sd.check_input_settings(
                        device=i,
                        samplerate=rate,
                        channels=min(2, device['max_input_channels'])
                    )
                    if rate > best_samplerate:
                        best_device = i
                        best_samplerate = rate
                    break
                except sd.PortAudioError:
                    continue
    
    return best_device, best_samplerate

device_idx, samplerate = find_best_input_device()
if device_idx is not None:
    device_info = sd.query_devices(device=device_idx)
    print(f"Best input device: {device_info['name']} at {samplerate} Hz")

Device Information Structure

Device information dictionaries contain the following keys:

{
    'name': str,                    # Device name
    'index': int,                   # Device index  
    'hostapi': int,                 # Host API index
    'max_input_channels': int,      # Maximum input channels
    'max_output_channels': int,     # Maximum output channels
    'default_low_input_latency': float,    # Low latency for input
    'default_low_output_latency': float,   # Low latency for output
    'default_high_input_latency': float,   # High latency for input  
    'default_high_output_latency': float,  # High latency for output
    'default_samplerate': float     # Default sample rate
}

Host API information dictionaries contain:

{
    'name': str,           # Host API name (e.g., 'WASAPI', 'DirectSound', 'ASIO')
    'device_count': int,   # Number of devices using this host API
    'default_input_device': int,   # Default input device index (-1 if none)
    'default_output_device': int,  # Default output device index (-1 if none)  
    'type': int           # Host API type identifier
}

Install with Tessl CLI

npx tessl i tessl/pypi-sounddevice

docs

configuration.md

convenience-functions.md

device-management.md

index.md

stream-processing.md

utilities.md

tile.json