Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zuzu-typ/pywave
Open and read Wave files
https://github.com/zuzu-typ/pywave
create easy extension interface load python python3 read riff riff-wave simple wave write
Last synced: 24 days ago
JSON representation
Open and read Wave files
- Host: GitHub
- URL: https://github.com/zuzu-typ/pywave
- Owner: Zuzu-Typ
- License: zlib
- Created: 2019-08-28T13:02:02.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2021-03-14T11:08:25.000Z (over 3 years ago)
- Last Synced: 2024-09-18T11:45:46.889Z (about 2 months ago)
- Topics: create, easy, extension, interface, load, python, python3, read, riff, riff-wave, simple, wave, write
- Language: Python
- Size: 680 KB
- Stars: 5
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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](https://packaging.python.org/tutorials/installing-packages/):pip install PyWave
To use PyWave in a script, you have to import the package `PyWave` usingimport 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 \ 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]) -> data
Reads and returns at most bytes of data.
If is None, reads until the end.
Wave.read_samples(number_of_samples) -> data
Reads and returns at most samples of data.
Wave.write(data) -> None
Writes 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 is 0, is the absolute position of the
data stream in bytes.
If is 1, is added to the current position
in the data stream in bytes.
If is 2, the position will be set to the end of
the file plus .
Wave.tell() -> position
Returns the current position in the data stream.
Wave.close() -> None
Closes the file handle.
And it has the following members:
Wave.format
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
The number of audio channels present in the audio stream
Wave.frequency
Sample rate of the audio stream
Wave.bitrate
Number of bits per second
Wave.bits_per_sample
Number of bits per sample (usually 8, 16 or 32)
Wave.samples
Total number of samples in the audio data
Wave.data
[Deprecated]
(only exists if was set to True)
Audio data as bytes
Wave.metadata
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()#### PyTest
PyTest support has been added in the form of a test_pywave.py module, in order to facilitate extensions to the module. In order to use it, one should install PyTest first by running:
```
pip install -r pytest_requirements.txt
```Once installed, you should be able to simply run
```
pytest
```In the repo folder, and see 2 items being collected, and 2 tests passing.