Skip to main content

Python audio coding classes - for dsp and sonification

Project description

Version PyPI GitHub commits License

pyA

What is pyA?

pyA is a package to support creation and manipulation of audio signals with Python. It uses numpy arrays to store and compute audio signals.

It provides:

  • Asig - a versatile audio signal class
    • Ugen - a subclass of Asig, which offers unit generators such as sine, square, swatooth, noise
  • Aserver - an audio server class for queuing and playing Asigs
  • Aspec - an audio spectrum class, using rfft as real-valued signals are always implied
  • Astft - an audio STFT (short-term Fourier transform) class

pyA can be used for

  • multi-channel audio processing
  • auditory display and sonification
  • sound synthesis experiment
  • audio applications in general such as games or GUI-enhancements
  • signal analysis and plotting
  • at this time more suitable for offline rendering than realtime.

Authors and Contributors

  • Thomas Hermann, Ambient Intelligence Group, Faculty of Technology, Bielefeld University (author and maintainer)
  • Jiajun Yang, Ambient Intelligence Group, Faculty of Technology, Bielefeld University (co-author)
  • Contributors will be acknowledged here, contributions are welcome.

Installation

Disclaimer: We are currently making sure that pyA can be uploaded to PyPI, until then clone the master branch and from inside the pya directory install via pip install -e .

Use pip to install pya via

pip install pya

Besides numpy, scipy and matplotlib, pyA requires pyaudio which in turn requires portaudio. Note that Linux/Windows users should make sure that the corresponding binary packages are installed.

See pyaudio installation http://people.csail.mit.edu/hubert/pyaudio/#downloads

Anaconda can install non-python packages, so that the easiest way (if applicable) would be to

conda install pyaudio

A simple example

Startup:

from pya import *
s = Aserver(bs=1024)
Aserver.default = s  # to set as default server
s.boot()   

Create an Asig signal:

A 1s / 440 Hz sine tone at sampling rate 44100 as channel name 'left':

import numpy as np
signal_array = np.sin(2 * np.pi * 440 * np.linspace(0, 1, 44100))
atone = Asig(signal_array, sr=44100, label='1s sine tone', cn=['left'])

In addition to passing numpy.ndarray as argument for Asig, it is also for possible to pass int as samples or float as seconds to create an Asig obj with silence audio.

Audio files are also possible using the file path. WAV should work without issues. MP3 is supported but may raise error under Windows and Linux if FFmpeg is not installed. MacOS should be fine thanks to CoreAudio.

Key attributes

  • atone.sig --> The numpy array containing the signal is
  • atone.sr --> the sampling rate
  • atone.cn --> the list of custom defined channel names
  • atone.label --> a custom set identifier string

Play signals

atone.play(server=s)  

play() uses Aserver.default if server is not specified

Plotting signals

to plot the first 1000 samples:

atone[:1000].plot()

to plot the magnitude and phase spectrum:

atone.plot_spectrum()

to plot the spectrum via the Aspec class

atone.to_spec().plot()

to plot the spectrogram via the Astft class

atone.to_stft().plot(ampdb)

Selection of subsets

  • Asigs support multi-channel audio (as columns of the signal array)
    • a1[:100, :3] would select the first 100 samples and the first 3 channels,
    • a1[{1.2:2}, ['left']] would select the channel named 'left' using a time slice from 1

Method chaining

Asig methods usually return an Asig, so methods can be chained, e.g

atone[{0:1.5}].fade_in(0.1).fade_out(0.8).gain(db=-6).plot(lw=0.1).play(rate=0.4, onset=1)

Learning more

  • Please check the examples/pya-examples.ipynb for more examples and details.

Contributing

  • Please get in touch with us if you wish to contribute. We are happy to be involved in the discussion of new features and to receive pull requests.

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

pya-0.2.1.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

pya-0.2.1-py3-none-any.whl (33.6 kB view details)

Uploaded Python 3

File details

Details for the file pya-0.2.1.tar.gz.

File metadata

  • Download URL: pya-0.2.1.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.19.1 setuptools/41.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.3

File hashes

Hashes for pya-0.2.1.tar.gz
Algorithm Hash digest
SHA256 55f083af28e02640b7016a5c2192bd5d9f2b87e987be5ec5a8e23afcb2fe5609
MD5 7ac18582588d6f715e43cef1410dadc4
BLAKE2b-256 b587b5004f11dfb9174ca82ce8f8756a395630bd82aaefea6704a0c5dacf850a

See more details on using hashes here.

File details

Details for the file pya-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: pya-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 33.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.19.1 setuptools/41.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.3

File hashes

Hashes for pya-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 75a41af5da171227f13463326093591abd17e0a4b089f9ff483f07a9603b41b1
MD5 27aae769bd26be0af0f13860a07d1777
BLAKE2b-256 51b2348fcc58108b0368588b97d8b7a60309fa1fdd2441b460235983b4d610eb

See more details on using hashes here.

Supported by

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