scaper
A library for soundscape synthesis and augmentation
Please refer to the documentation for details.
For the motivation behind scaper and its applications check out the scaper-paper:
Scaper: A library for soundscape synthesis and augmentation
J. Salamon, D. MacConnell, M. Cartwright, P. Li, and J. P. Bello
In IEEE Workshop on Applications of Signal Processing to Audio and Acoustics (WASPAA), New Paltz, NY, USA, Oct. 2017.
Installation
Non-python dependencies
Scaper has one non-python dependency:
- FFmpeg: https://ffmpeg.org/
If you are installing Scaper on Windows, you will also need:
On Linux/macOS SoX is replaced by SoxBindings which is significantly faster, giving better runtime performance in Scaper. On these platforms SoxBindings is installed automatically when calling pip install scaper (see below).
Linux/macOS
If you're using Anaconda (or miniconda) to manage your python environment (recommended), you can install FFmpeg using conda on macOS/Linux:
conda install -c conda-forge ffmpeg
macOS
On macOS FFmpeg can be installed using homebrew:
brew install ffmpeg
Linux
On linux you can use your distribution's package manager, e.g. on Ubuntu (15.04 "Vivid Vervet" or newer):
sudo apt-get install ffmpeg
NOTE: on earlier versions of Ubuntu ffmpeg may point to a Libav binary which is not the correct binary. If you are using Anaconda, you can install the correct version as described earlier by calling conda install -c conda-forge ffmpeg. Otherwise, you can obtain a static binary from the ffmpeg website.
Windows
On windows you can use the provided installation binaries:
- SoX: https://sourceforge.net/projects/sox/files/sox/
- FFmpeg: https://ffmpeg.org/download.html#build-windows
Installing Scaper
The simplest way to install scaper is by using pip, which will also install the required python dependencies if needed. To install scaper using pip, simply run:
pip install scaper
To install the latest version of scaper from source, clone or pull the lastest version:
git clone git@github.com:justinsalamon/scaper.git
Then enter the source folder and install using pip to handle python dependencies:
cd scaper
pip install -e .
Tutorial
To help you get started with scaper, please see this step-by-step tutorial.
Example
import scaper
import numpy as np
# OUTPUT FOLDER
outfolder = 'audio/soundscapes/'
# SCAPER SETTINGS
fg_folder = 'audio/soundbank/foreground/'
bg_folder = 'audio/soundbank/background/'
n_soundscapes = 1000
ref_db = -50
duration = 10.0
min_events = 1
max_events = 9
event_time_dist = 'truncnorm'
event_time_mean = 5.0
event_time_std = 2.0
event_time_min = 0.0
event_time_max = 10.0
source_time_dist = 'const'
source_time = 0.0
event_duration_dist = 'uniform'
event_duration_min = 0.5
event_duration_max = 4.0
snr_dist = 'uniform'
snr_min = 6
snr_max = 30
pitch_dist = 'uniform'
pitch_min = -3.0
pitch_max = 3.0
time_stretch_dist = 'uniform'
time_stretch_min = 0.8
time_stretch_max = 1.2
# Generate 1000 soundscapes using a truncated normal distribution of start times
for n in range(n_soundscapes):
print('Generating soundscape: {:d}/{:d}'.format(n+1, n_soundscapes))
# create a scaper
sc = scaper.Scaper(duration, fg_folder, bg_folder)
sc.protected_labels = []
sc.ref_db = ref_db
# add background
sc.add_background(label=('const', 'noise'),
source_file=('choose', []),
source_time=('const', 0))
# add random number of foreground events
n_events = np.random.randint(min_events, max_events+1)
for _ in range(n_events):
sc.add_event(label=('choose', []),
source_file=('choose', []),
source_time=(source_time_dist, source_time),
event_time=(event_time_dist, event_time_mean, event_time_std, event_time_min, event_time_max),
event_duration=(event_duration_dist, event_duration_min, event_duration_max),
snr=(snr_dist, snr_min, snr_max),
pitch_shift=(pitch_dist, pitch_min, pitch_max),
time_stretch=(time_stretch_dist, time_stretch_min, time_stretch_max))
# generate
audiofile = os.path.join(outfolder, "soundscape_unimodal{:d}.wav".format(n))
jamsfile = os.path.join(outfolder, "soundscape_unimodal{:d}.jams".format(n))
txtfile = os.path.join(outfolder, "soundscape_unimodal{:d}.txt".format(n))
sc.generate(audiofile, jamsfile,
allow_repeated_label=True,
allow_repeated_source=False,
reverb=0.1,
disable_sox_warnings=True,
no_audio=False,
txt_path=txtfile)
How to contribute
If you would like to contribute a feature and/or bugfix to this repository, please follow the following steps:
- Create an issue describing the feature/fix.
- I will reply on the issue thread to determine whether the feature/fix can/should be added.
- Discuss design/implementation details in the issue thread and reach consensus.
- Once consensus is reached (and only then), start a pull request (PR). Further discsussion can continue in the PR thread.
- Implement feature/fix, ensuring all current unit tests pass and new tests are added to maintain 100% test coverage. Inline docstrings as well as the main docs files should also be updated accordingly.
- Request code review once the pull request is ready for review.
- Fix requested changes to the pull request if any. Repeat steps 5-7 until the PR is approved.
- once the PR is approved I will merge it into master (and most likely create a new release).
IMPORTANT: please be sure to always discuss a proposed feature/fix in an issue before creating a pull request.
Metadata
Release files for scaper 1.6.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| scaper-1.6.5.tar.gz | 33.8 kB | Without provenance | Details for scaper-1.6.5.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| scaper-1.6.5-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details for scaper-1.6.5-py2.py3-none-any.whl |
Total release size: 67.0 kB
Release files / scaper-1.6.5.tar.gz
| Download URL | scaper-1.6.5.tar.gz |
|---|---|
| Size | 33.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
48ff17d727b11a64dddedd89a621e971b31eb7a9caab516f1839aa5bd6cf8e02
|
|
BLAKE2b-256 checksum How to use checksums |
0a10d4be24a905cb38e7b813eba389f1d46b0281e4ff5460f1782ee3ffea140d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.5.0.1 requests/2.19.1 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/2.7.17
|
Release files / scaper-1.6.5-py2.py3-none-any.whl
| Download URL | scaper-1.6.5-py2.py3-none-any.whl |
|---|---|
| Size | 33.2 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
c42bf0fb2fe9805bbb1a96d1589dbc3416e059482191da94a7e8acfb9d949ca6
|
|
BLAKE2b-256 checksum How to use checksums |
dbb787e5d1b900883829eb6cedef5193dff39865d302d288353eb5517069afc2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.5.0.1 requests/2.19.1 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/2.7.17
|
Security for scaper 1.6.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.