Skip to main content

No project description provided

Project description

https://travis-ci.org/tgarc/pastream.svg?branch=master https://ci.appveyor.com/api/projects/status/wk52r5jy9ri7dsi9/branch/master?svg=true

pastream - Portaudio Streams for Python

pastream builds on top of portaudio and the excellent sounddevice python bindings to provide some more advanced functionality right out of the box. Note that in addition to the pastream library, pastream includes a command line interface for playing and recording audio files.

Features

GIL-less Audio Callbacks
Having the portaudio callback implemented in C means audio interrupts can be serviced quickly and reliably without ever needing to acquire the Python Global Interpreter Lock (GIL). This is crucial when working with libraries like Pillow which may greedily grab and hold the GIL subsequently causing audio overruns/underruns.
Input Stream iterators

Efficiently retrieve live audio capture data through an iterable. As simple as:

import pastream as ps
for chunk in ps.chunks():
    # do stuff with chunked audio

See pastream.chunks and pastream.*Stream.chunks method.

Expanded State Machine
Adds the ability to differentiate whether a stream has been aborted or completed successfully even after the stream has finished.
Reader/Writer Threads
pastream simplifies the process of implementing stream reader and writer threads to manipulate and/or generate data in the background while leaving the main thread free for higher level management tasks.

Dependencies

cffi

sounddevice (depends on PortAudio)

soundfile (depends on libsndfile)

(Optional) numpy

Installation

For linux platforms a recent version of the PortAudio and libsndfile C libraries are required. (For Windows or OSX, the sounddevice and soundfile packages include prebuilt version for you). You can either install the latest available from your package manager (libportaudio2 libsndfile for debian/raspbian) or install the latest stable build from the package websites (Recommended; see links in Dependencies).

pastream is now available on pypi. Installation is as easy as:

$ pip install pastream

Building From Source

If doing a fresh checkout:

$ git clone --recursive http://github.com/tgarc/pastream

If you already have a checkout:

$ git submodule update --init

Then do a pip install:

$ pip install <path/to/checkout>

Examples

Record to file:

import pastream as ps

with ps.SoundFileInputStream('recording.wav', device='my-device'):
    stream.start()
    stream.wait()

Grab (real) frequency transformed live audio stream with 50% overlap:

import pastream as ps, numpy as np

chunksize = 1024
window = np.hanning(chunksize)
for l, x_l in ps.chunks(chunksize, overlap=chunksize//2, channels=1):
    X_l = np.fft.rfft(x_l) * window

See also the included examples under pastream/examples.

Command Line Interface

Once installed, the pastream application should be callable from your command line. If you’re familiar with sox you’ll notice that some of the command line syntax is quite similar. Here are a few examples to help get you started.

Display the help file:

$ pastream -h

List available audio devices:

$ pastream -l

Simultaneous play and record from the default audio device:

$ pastream input.wav output.wav

Record only:

$ pastream null output.wav

Pipe input from sox using the AU format:

$ sox -n -t au - synth sine 440 | pastream - output.wav

Play a RAW file:

$ pastream null -c1 -r48k -e=pcm_16 output.raw

Record 10 seconds of audio at 48kHz:

$ pastream null output.wav -r48k -n=$(( 48000 * 10 ))

Project details


Download files

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

Files for pastream, version 0.0.3
Filename, size File type Python version Upload date Hashes
Filename, size pastream-0.0.3-cp27-cp27m-macosx_10_6_intel.whl (33.2 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp27-cp27m-manylinux1_i686.whl (43.6 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp27-cp27m-manylinux1_x86_64.whl (46.0 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp27-cp27mu-manylinux1_i686.whl (43.6 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp27-cp27mu-manylinux1_x86_64.whl (46.0 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp27-cp27m-win32.whl (26.9 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp27-cp27m-win_amd64.whl (27.9 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp34-cp34m-macosx_10_6_intel.whl (33.7 kB) File type Wheel Python version cp34 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp34-cp34m-manylinux1_i686.whl (40.4 kB) File type Wheel Python version cp34 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp34-cp34m-manylinux1_x86_64.whl (42.7 kB) File type Wheel Python version cp34 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp34-cp34m-win32.whl (26.9 kB) File type Wheel Python version cp34 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp34-cp34m-win_amd64.whl (27.7 kB) File type Wheel Python version cp34 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp35-cp35m-macosx_10_6_intel.whl (33.7 kB) File type Wheel Python version cp35 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp35-cp35m-manylinux1_i686.whl (40.4 kB) File type Wheel Python version cp35 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp35-cp35m-manylinux1_x86_64.whl (42.7 kB) File type Wheel Python version cp35 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp35-cp35m-win32.whl (28.4 kB) File type Wheel Python version cp35 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp35-cp35m-win_amd64.whl (30.1 kB) File type Wheel Python version cp35 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp36-cp36m-macosx_10_6_intel.whl (33.7 kB) File type Wheel Python version cp36 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp36-cp36m-manylinux1_i686.whl (40.4 kB) File type Wheel Python version cp36 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp36-cp36m-manylinux1_x86_64.whl (42.7 kB) File type Wheel Python version cp36 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp36-cp36m-win32.whl (28.4 kB) File type Wheel Python version cp36 Upload date Hashes View hashes
Filename, size pastream-0.0.3-cp36-cp36m-win_amd64.whl (30.1 kB) File type Wheel Python version cp36 Upload date Hashes View hashes
Filename, size pastream-0.0.3.tar.gz (39.2 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page