beatmachine

A library for procedurally remixing songs


Keywords
beat-edits, music, python, remix
License
MIT
Install
pip install beatmachine==2.2.0-alpha.1

Documentation

beatmachine

Build Status PyPI Version Documentation Status

The Beat Machine is a library for remixing songs by procedurally editing their beats, inspired by the creations on /r/BeatEdits. It works both as a library and as a command-line utility.

Installation

The beatmachine library is available on PyPI:

$ pip install beatmachine

Usage

CLI

When called from the command line, the beatmachine module will operate on a given song with a JSON array of effects.

Its basic usage is:

$ python -m beatmachine -i in.mp3 -e '[{"type": "swap", "x_period": 2, "y_period": 4}]' -o out.mp3

A complete list of effects can be found by browsing the documentation for the effects package. The general format of an effect object is:

{
    "type": "value of __effect_name__",

    "kwarg1": true,
    "kwarg2": 2,
    "kwarg3": "etc..."
}

As of 3.2.0, beatmachine also offers a JSON schema for the effects array. It can be accessed through:

$ python -m beatmachine.dump_schema

This command always provides the latest output, and reflects local modifications.

Python

The beatmachine.Beats class provides a simple interface for working with songs:

import beatmachine as bm

beats = bm.Beats.from_song('in.mp3')
beats.apply(bm.effects.RemoveEveryNth(2)).save('out.mp3')

All of the effects are located in the effects package and its sub-modules. For custom operations, to_ndarray() is available to expose the underlying NumPy array:

import beatmachine as bm
import numpy as np

beats = bm.Beats.from_song('in.mp3')
y = np.flip(beats.to_ndarray())