Skip to main content

Easy Audio Interfaces is a Python library that provides a simple and flexible way to work with audio streams, including recording, playback, network transfer, and processing.

Project description

Easy Audio Interfaces

Easy Audio Interfaces is a Python library that provides a simple and flexible way to work with audio streams, including recording, playback, network transfer, and processing.

Features

  • Socket-based audio streaming
  • Local file reading and writing
  • Audio resampling and rechunking
  • Voice activity detection (VAD) using Silero VAD model
  • Network file transfer

Quick Start

Here's a simple example to get you started - record audio from a socket, process it, and save to a file:

from easy_audio_interfaces import SocketReceiver, LocalFileSink, RechunkingBlock, ResamplingBlock

async with SocketReceiver() as receiver, LocalFileSink("output.wav") as sink:
    rechunker = RechunkingBlock(chunk_size=512)
    resampler = ResamplingBlock(original_sample_rate=receiver.sample_rate, resample_rate=16000)

    rechunked_stream = rechunker.rechunk(receiver)
    resampled_stream = resampler.resample(rechunked_stream)
    await sink.write_from(resampled_stream)

Advanced Usage: Manual Chunk Processing with ResamplingBlock

For more control over individual audio chunks, you can use process_chunk and process_chunk_last:

from easy_audio_interfaces import ResamplingBlock
from wyoming.audio import AudioChunk

resampler = ResamplingBlock(resample_rate=16000)
await resampler.open()

# Process individual chunks
for chunk in audio_chunks:
    async for resampled_chunk in resampler.process_chunk(chunk):
        # Handle each resampled chunk
        process_audio(resampled_chunk)

# Important: Flush remaining buffered samples
async for final_chunk in resampler.process_chunk_last():
    process_audio(final_chunk)

await resampler.close()

Installation

From PyPI

uv add easy-audio-interfaces

From Source

uv add "https://github.com/AnkushMalaker/python-audio-interfaces.git"

Optional Dependencies

Based on the functionality you require, you should consider installing with the following extras:

# For speech-to-text
uv add "easy-audio-interfaces[stt]"

# For voice activity detection
uv add "easy-audio-interfaces[silero-vad]"

# For Bluetooth audio
uv add "easy-audio-interfaces[bluetooth]"

# For local audio devices
uv add "easy-audio-interfaces[local-audio]"

Usage

Main Components

Audio Sources

  • SocketReceiver: Receives audio data over a WebSocket connection
  • LocalFileStreamer: Streams audio data from a local file

Audio Sinks

  • SocketStreamer: Sends audio data over a WebSocket connection
  • LocalFileSink: Writes audio data to a local file

Processing Blocks

  • CollectorBlock: Collects audio samples for a specified duration
  • ResamplingBlock: Resamples audio to a different sample rate
    • process_chunk_last(): Flushes remaining buffered samples from the resampler. Call this after processing all chunks to ensure no audio data is lost due to internal buffering.
  • RechunkingBlock: Rechunks audio data into fixed-size chunks

Voice Activity Detection

  • SileroVad: Uses the Silero VAD model for voice activity detection
  • VoiceGate: Applies voice activity detection to segment audio

Examples

Basic Friend Recorder

Records voice segments from a network stream using VAD:

python -m easy_audio_interfaces.examples.basic_friend_recorder

File Network Transfer

Transfer audio files over a network:

# Sender
python -m easy_audio_interfaces.examples.file_network_transfer sender input_file.wav --host localhost --port 8080

# Receiver
python -m easy_audio_interfaces.examples.file_network_transfer receiver output_file.wav --host 0.0.0.0 --port 8080

For more detailed usage and API documentation, please refer to the docstrings in the source code.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

easy_audio_interfaces-0.6.0.tar.gz (35.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

easy_audio_interfaces-0.6.0-py3-none-any.whl (41.5 kB view details)

Uploaded Python 3

File details

Details for the file easy_audio_interfaces-0.6.0.tar.gz.

File metadata

File hashes

Hashes for easy_audio_interfaces-0.6.0.tar.gz
Algorithm Hash digest
SHA256 70fbf82df690a59aeb0e41799289a9f18ccb77b58978935269b928c617b5568d
MD5 e407c19a268170308f106c717ee2a5f3
BLAKE2b-256 cc0aab7313eca395daf3e69ca484ac39d555aa17609e7cd4209a489f33408ca8

See more details on using hashes here.

File details

Details for the file easy_audio_interfaces-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for easy_audio_interfaces-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 146888390f77e9b00dad4d8812e0cdbb1d48c31bb201eb33910408b010bfbd2d
MD5 80f30968295dc3ad79d59b6df149c6be
BLAKE2b-256 69a59eaecdbdcdc0d429f129c69e7f6a085578e2a066dffab104ef073d7f53c5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page