Skip to main content

A library for soundscape synthesis and augmentation

Project description

scaper

A library for soundscape synthesis and augmentation

PyPI License Build Status Coverage Status Documentation Status Downloads PyPI

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:

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:

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:

  1. Create an issue describing the feature/fix.
  2. I will reply on the issue thread to determine whether the feature/fix can/should be added.
  3. Discuss design/implementation details in the issue thread and reach consensus.
  4. Once consensus is reached (and only then), start a pull request (PR). Further discsussion can continue in the PR thread.
  5. 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.
  6. Request code review once the pull request is ready for review.
  7. Fix requested changes to the pull request if any. Repeat steps 5-7 until the PR is approved.
  8. 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.

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

scaper-1.6.5.tar.gz (33.8 kB view details)

Uploaded Source

Built Distribution

scaper-1.6.5-py2.py3-none-any.whl (33.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file scaper-1.6.5.tar.gz.

File metadata

  • Download URL: scaper-1.6.5.tar.gz
  • Upload date:
  • Size: 33.8 kB
  • Tags: Source
  • Uploaded using 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

File hashes

Hashes for scaper-1.6.5.tar.gz
Algorithm Hash digest
SHA256 48ff17d727b11a64dddedd89a621e971b31eb7a9caab516f1839aa5bd6cf8e02
MD5 42654aeeb5c3b877d974b131d2270f27
BLAKE2b-256 0a10d4be24a905cb38e7b813eba389f1d46b0281e4ff5460f1782ee3ffea140d

See more details on using hashes here.

File details

Details for the file scaper-1.6.5-py2.py3-none-any.whl.

File metadata

  • Download URL: scaper-1.6.5-py2.py3-none-any.whl
  • Upload date:
  • Size: 33.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using 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

File hashes

Hashes for scaper-1.6.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 c42bf0fb2fe9805bbb1a96d1589dbc3416e059482191da94a7e8acfb9d949ca6
MD5 46d551439df83b4f9a597bc210898357
BLAKE2b-256 dbb787e5d1b900883829eb6cedef5193dff39865d302d288353eb5517069afc2

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