# streamp3
This library implements streaming MP3 decompression using the LAME library.
## Status
[](https://badge.fury.io/py/streamp3)
[](https://circleci.com/gh/pylon/streamp3)
[](https://coveralls.io/github/pylon/streamp3?branch=master)
## Installation
### Pip
```bash
pip install streamp3
```
## Usage
To begin decoding an MP3, construct an MP3Decoder, passing it in a binary
stream or `bytes` object. You can then access the `bit_rate`, `sample_rate`,
and `num_channels` properties for information about the MP3.
```python
from streamp3 import MP3Decoder
with open('my.mp3', 'rb') as mp3_file:
decoder = MP3Decoder(mp3_file)
print(decoder.bit_rate, decoder.sample_rate, decoder.num_channels)
```
You can then read samples from the stream directly using the `read()` method
or use the decoder as an iterator. Samples are returned as `bytes` objects,
which are 16-bit PCM encoded, with samples interleaved across channels. This
example streams an MP3 file to the system speaker using
[PyAudio](https://pypi.org/project/PyAudio/).
```python
import pyaudio
from streamp3 import MP3Decoder
with open('my.mp3', 'rb') as mp3_file:
decoder = MP3Decoder(mp3_file)
audio = pyaudio.PyAudio()
device = audio.get_default_output_device_info()
speaker = audio.open(output=True,
input_device_index=device['index'],
format=pyaudio.paInt16,
channels=decoder.num_channels,
rate=decoder.sample_rate)
for chunk in decoder:
speaker.write(chunk)
```
## Development
### Setup
We generally use pyenv to create virtual environments. The following script
creates a virtual environment for the project and installs dependencies.
```bash
pyenv install 3.6.4
pyenv virtualenv 3.6.4 streamp3
pip install -r requirements.txt
```
LAME must also be installed. This can be done on OSX via homebrew.
```bash
brew install lame
```
### Deployment
The project uses setup.py for installation and is deployed to
[PyPI](https://pypi.org). The project can be built for installation with
the following command:
```bash
python setup.py clean --all; rm -r ./dist
python setup.py sdist bdist_wheel
```
The wheel and source distribution can then be uploaded to PyPI using twine.
```bash
twine upload --repository-url=https://upload.pypi.org/legacy/ dist/*
```
## License
Copyright 2018 Pylon, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
This library implements streaming MP3 decompression using the LAME library.
## Status
[](https://badge.fury.io/py/streamp3)
[](https://circleci.com/gh/pylon/streamp3)
[](https://coveralls.io/github/pylon/streamp3?branch=master)
## Installation
### Pip
```bash
pip install streamp3
```
## Usage
To begin decoding an MP3, construct an MP3Decoder, passing it in a binary
stream or `bytes` object. You can then access the `bit_rate`, `sample_rate`,
and `num_channels` properties for information about the MP3.
```python
from streamp3 import MP3Decoder
with open('my.mp3', 'rb') as mp3_file:
decoder = MP3Decoder(mp3_file)
print(decoder.bit_rate, decoder.sample_rate, decoder.num_channels)
```
You can then read samples from the stream directly using the `read()` method
or use the decoder as an iterator. Samples are returned as `bytes` objects,
which are 16-bit PCM encoded, with samples interleaved across channels. This
example streams an MP3 file to the system speaker using
[PyAudio](https://pypi.org/project/PyAudio/).
```python
import pyaudio
from streamp3 import MP3Decoder
with open('my.mp3', 'rb') as mp3_file:
decoder = MP3Decoder(mp3_file)
audio = pyaudio.PyAudio()
device = audio.get_default_output_device_info()
speaker = audio.open(output=True,
input_device_index=device['index'],
format=pyaudio.paInt16,
channels=decoder.num_channels,
rate=decoder.sample_rate)
for chunk in decoder:
speaker.write(chunk)
```
## Development
### Setup
We generally use pyenv to create virtual environments. The following script
creates a virtual environment for the project and installs dependencies.
```bash
pyenv install 3.6.4
pyenv virtualenv 3.6.4 streamp3
pip install -r requirements.txt
```
LAME must also be installed. This can be done on OSX via homebrew.
```bash
brew install lame
```
### Deployment
The project uses setup.py for installation and is deployed to
[PyPI](https://pypi.org). The project can be built for installation with
the following command:
```bash
python setup.py clean --all; rm -r ./dist
python setup.py sdist bdist_wheel
```
The wheel and source distribution can then be uploaded to PyPI using twine.
```bash
twine upload --repository-url=https://upload.pypi.org/legacy/ dist/*
```
## License
Copyright 2018 Pylon, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
streamp3-0.1.3.tar.gz
(31.2 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file streamp3-0.1.3.tar.gz.
File metadata
- Download URL: streamp3-0.1.3.tar.gz
- Upload date:
- Size: 31.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
794e388d71bba895c06f4afab229ceb80883819916af36ca94938217440a6331
|
|
| MD5 |
85ef00fb762194feff5af49b1643cef2
|
|
| BLAKE2b-256 |
c074f0f09fdf33bf3e9bb5e42564d08f3f10a128c3adc24ea6dfcf6dbd3a393d
|
File details
Details for the file streamp3-0.1.3-cp36-cp36m-macosx_10_13_x86_64.whl.
File metadata
- Download URL: streamp3-0.1.3-cp36-cp36m-macosx_10_13_x86_64.whl
- Upload date:
- Size: 18.3 kB
- Tags: CPython 3.6m, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4618ffb67ed32726c498b16d73042b953f203e4f8db5b6c3d731505ad8ed458
|
|
| MD5 |
198aa20a47edf4192bd69d342b7fbf4c
|
|
| BLAKE2b-256 |
ead7c96fe7a39dc209070718f7db1d81785f8fe7226dc069587d25bb6e63d2fe
|