Skip to main content

Open, read and write Wave files

Project description

PyWave

Open, read and write Wave files

PyWave is a small extension that enables you to open and read the data of any WAVE-RIFF file.
It supports PCM, IEEE-FLOAT, EXTENSIBLE and a few other wave formats (including 32 and 64 bit waves).
It can also create and write wave files, but it's currently limited to PCM-Waves and pure data (no metadata).

Tiny documentation

About PyWave

PyWave is supposed to replace the builtin Python extension wave, which doesn't support >16-bit wave files.

Using PyWave

To install PyWave you can use the PyPI:

pip install PyWave

To use PyWave in a script, you have to import the package PyWave using

import PyWave

or a wildcard import:

from PyWave import *

The Wave class

You can use open(path) to open and read a wave file.

Or you can use

open(path[, mode = 'r', channels = 2, frequency = 48000, bits_per_sample = 16, format = WAVE_FORMAT_PCM])

with <mode> set to 'w' to open and create a writable wave file.

Both will return an instance of the Wave class.

The following methods are provided by the Wave class:

Wave.read([max_bytes = None]) -> <bytes> data
    Reads and returns at most <max_bytes> bytes of data.
    If <max_bytes> is None, reads until the end.

Wave.read_samples(number_of_samples) -> <bytes> data
    Reads and returns at most <number_of_samples> samples of data.
    
Wave.write(data) -> None
    Writes <data> to the data chunk of the wave file.
    Before write can be called, the following members have to be set:
    - Wave.channels
    - Wave.frequency
    - Wave.bits_per_sample
    
    This function can only append to the end of the data chunk,
    thus it is not effected by 'seek()'.

Wave.seek(offset[, whence = 0]) -> None
    Sets the current position in the data stream.
    If <whence> is 0, <offset> is the absolute position of the
    data stream in bytes.
    If <whence> is 1, <offset> is added to the current position
    in the data stream in bytes.
    If <whence> is 2, the position will be set to the end of
    the file plus <offset>.
    
Wave.tell() -> <int> position
    Returns the current position in the data stream.
    
Wave.close() -> None
    Closes the file handle.

And it has the following members:

Wave.format <int>
    Format of the audio data. Can be any of:
    - WAVE_FORMAT_PCM
    - WAVE_FORMAT_IEEE_FLOAT
    - WAVE_FORMAT_ALAW
    - WAVE_FORMAT_MULAW
    - WAVE_FORMAT_EXTENSIBLE
    Otherwise the format is unknown
    
Wave.channels <int>
    The number of audio channels present in the audio stream
    
Wave.frequency <int>
    Sample rate of the audio stream
    
Wave.bitrate <int>
    Number of bits per second
    
Wave.bits_per_sample <int>
    Number of bits per sample (usually 8, 16 or 32)
    
Wave.samples <int>
    Total number of samples in the audio data
    
Wave.data <bytes>
    [Deprecated]
    (only exists if <auto_read> was set to True)
    Audio data as bytes
    
Wave.metadata <dict>
    A dictionary containing metadata specified in the wave file

Example

import PyWave

PATH = "path/to/a/wave/file.wav"

wf = PyWave.open(PATH)

print("This WAVE file has the following properties:")
print(wf.channels, "channels")
print(wf.frequency, "Hz sample rate")
print(wf.bitrate, "bits per second")
print(wf.samples, "total samples")

wf_copy = PyWave.open("path/to/a/wave/file_copy.wav", 
                      mode = "w",
                      channels = wf.channels,
                      frequency = wf.frequency,
                      bits_per_sample = wf.bits_per_sample,
                      format = wf.format)
wf_copy.write(wf.read())
wf.close()
wf_copy.close()

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

PyWave-0.4.1.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

PyWave-0.4.1-py2.py3-none-any.whl (7.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file PyWave-0.4.1.tar.gz.

File metadata

  • Download URL: PyWave-0.4.1.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for PyWave-0.4.1.tar.gz
Algorithm Hash digest
SHA256 b2e628b84001b9d3d4fa94e45b304119d363634ff913be6b61f3a1aa80417ca4
MD5 c89a3306162763a0e04e4454b7dc6b29
BLAKE2b-256 227ae9ac202bf38807dba616cc6161269b26741d3ca75db0e8e5838a793c1b32

See more details on using hashes here.

File details

Details for the file PyWave-0.4.1-py2.py3-none-any.whl.

File metadata

  • Download URL: PyWave-0.4.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0

File hashes

Hashes for PyWave-0.4.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 81dbbe64c805402cf9a71e44c327dcf00a3c7a9f22d50d5004a3def47c21c705
MD5 ade3d90f7e6a37c93e2ee04c28ed709c
BLAKE2b-256 ef3d8bfbad2bb7c4325dc7b1367c21a4d650ec69f925343a11ac8abf7099cf7b

See more details on using hashes here.

Supported by

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