Skip to main content

An audio-processing Python library supporting core DAW features

Project description

  _____                       _____                                                  
 |  __ \                     |  __ \                                                 
 | |  | |   __ _  __      __ | |  | |  _ __    ___    __ _   _ __ ___     ___   _ __ 
 | |  | |  / _` | \ \ /\ / / | |  | | | '__|  / _ \  / _` | | '_ ` _ \   / _ \ | '__|
 | |__| | | (_| |  \ V  V /  | |__| | | |    |  __/ | (_| | | | | | | | |  __/ | |   
 |_____/   \__,_|   \_/\_/   |_____/  |_|     \___|  \__,_| |_| |_| |_|  \___| |_|   
                                                                                     
* * Digital Audio Workstation with Python * *

Supported Platforms Test Badge PyPI version fury.io GPLv3 license GitHub Repo stars Generic badge

DawDreamer

Read the introduction to DawDreamer, which was presented as a Late-Breaking Demo at the 2021 ISMIR Conference.

DawDreamer is an audio-processing Python framework supporting core DAW features and beyond:

  • Composing graphs of multi-channel audio processors
  • Audio playback
  • VST instruments and effects (with UI editing and state loading/saving)
  • FAUST effects and polyphonic instruments
  • Time-stretching and looping, optionally according to Ableton Live warp markers
  • Pitch-warping
  • Parameter automation at audio-rate and at pulses-per-quarter-note
  • Parameter automation saving in absolute audio-rate time
  • MIDI playback in absolute time and PPQN time
  • MIDI file export in absolute time
  • Rendering and saving multiple processors simultaneously
  • Support for the Faust Box and Signal APIs
  • Transpiling Faust code to JAX/Flax and other target languages (C++, Rust, Wasm, etc.)
  • Machine learning experiments with QDax
  • Multiprocessing support
  • Full support on macOS, Windows, Linux, Google Colab, and Ubuntu Dockerfile

DawDreamer's foundation is JUCE, with a user-friendly Python interface thanks to pybind11. DawDreamer evolved from an earlier VSTi audio "renderer", RenderMan.

Installation

macOS requirements:

  • 64-bit Python 3.10-3.12
  • Apple Silicon or Intel CPU
  • macOS 11.0 or higher

Windows requirements:

  • x86_64 CPU
  • 64-bit Python 3.10-3.12

Linux requirements:

  • x86_64 CPU
  • 64-bit Python 3.10-3.12

Install with PyPI:

pip install dawdreamer

API Documentation

https://dirt.design/DawDreamer/

Basic Example

Using Faust, let's make a stereo sine-tone at 440 Hz and -6 dB. You can run this code as-is.

import dawdreamer as daw
from scipy.io import wavfile
SAMPLE_RATE = 44100
engine = daw.RenderEngine(SAMPLE_RATE, 512)  # 512 block size
faust_processor = engine.make_faust_processor("faust")
faust_processor.set_dsp_string(
    """
    declare name "MySine";
    freq = hslider("freq", 440, 0, 20000, 0);
    gain = hslider("vol[unit:dB]", 0, -120, 20, 0) : ba.db2linear;
    process = freq : os.osc : _*gain <: si.bus(2);
    """
    )
print(faust_processor.get_parameters_description())
engine.load_graph([
                   (faust_processor, [])
])
faust_processor.set_parameter("/MySine/freq", 440.)  # 440 Hz
faust_processor.set_parameter("/MySine/vol", -6.)  # -6 dB volume

engine.set_bpm(120.)
engine.render(4., beats=True)  # render 4 beats.
audio = engine.get_audio()  # shaped (2, N samples)
wavfile.write('sine_demo.wav', SAMPLE_RATE, audio.transpose())

# Change settings and re-render
faust_processor.set_parameter("/MySine/freq", 880.)  # 880 Hz
engine.render(4., beats=True)
# and so on...

Next, let's make a graph with a VST instrument and effect. This graph will be simple, but you can make more complicated ones.

import dawdreamer as daw
from scipy.io import wavfile
SAMPLE_RATE = 44100
INSTRUMENT_PATH = "path/to/instrument.dll"
EFFECT_PATH = "path/to/effect.dll"

engine = daw.RenderEngine(SAMPLE_RATE, 512)
engine.set_bpm(120.)

synth = engine.make_plugin_processor("synth", INSTRUMENT_PATH)
print('inputs:', synth.get_num_input_channels())
print('outputs:', synth.get_num_output_channels())
print(synth.get_parameters_description())

synth.set_parameter(7, .1234)

# (MIDI note, velocity, start sec, duration sec)
synth.add_midi_note(60, 100, 0.0, 2.)

effect = engine.make_plugin_processor("effect", EFFECT_PATH)

engine.load_graph([
  (synth, []),
  (effect, [synth.get_name()])  # effect needs 2 channels, and "synth" provides those 2.
  ])

engine.render(4.)  # render 4 seconds.
audio = engine.get_audio()
wavfile.write('synth_demo.wav', SAMPLE_RATE, audio.transpose())
synth.clear_midi()
# add midi again, render again, and so on...

Please refer to the Wiki, examples, API documentation, and tests.

License

DawDreamer is licensed under GPLv3 to make it easier to comply with all of the dependent projects. If you use DawDreamer, you must obey the licenses of JUCE, pybind11, Libsamplerate, Rubber Band Library, Steinberg VST2/3, and FAUST.

Thanks to contributors to the original RenderMan

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

dawdreamer_bh-0.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

dawdreamer_bh-0.8.4-cp312-cp312-macosx_12_0_arm64.whl (30.8 MB view details)

Uploaded CPython 3.12macOS 12.0+ ARM64

dawdreamer_bh-0.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

dawdreamer_bh-0.8.4-cp311-cp311-macosx_12_0_arm64.whl (30.8 MB view details)

Uploaded CPython 3.11macOS 12.0+ ARM64

dawdreamer_bh-0.8.4-cp310-cp310-macosx_12_0_arm64.whl (30.8 MB view details)

Uploaded CPython 3.10macOS 12.0+ ARM64

File details

Details for the file dawdreamer_bh-0.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dawdreamer_bh-0.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 41c0a7d517d9c07a279e904db2ad869b93a5b41a08b2e516da6c17380079e935
MD5 56daa10a8f92886e42d29ce4120f356e
BLAKE2b-256 75ca00d8dca4bbd52abde0767a9c4c039c2f81378f3d902468eab215b4f0534a

See more details on using hashes here.

Provenance

The following attestation bundles were made for dawdreamer_bh-0.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: all.yml on ben-hayes/DawDreamer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dawdreamer_bh-0.8.4-cp312-cp312-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for dawdreamer_bh-0.8.4-cp312-cp312-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 87078f647a72f3bf5f7c94e8fb830704b41e39eecab398a7d34658ce3cafd413
MD5 aa9048c6d85a06b643f071fa79f81f0b
BLAKE2b-256 8c5ee1da77c9c0239e1af3e3122462cff4d1511b118b7d683554fc2c518dee02

See more details on using hashes here.

Provenance

The following attestation bundles were made for dawdreamer_bh-0.8.4-cp312-cp312-macosx_12_0_arm64.whl:

Publisher: all.yml on ben-hayes/DawDreamer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dawdreamer_bh-0.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dawdreamer_bh-0.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dc375a351fe7c1e4dec6d3576b50d331c0da5b162a563e83b9308b9b21f533f8
MD5 d792e1e6fe255ebde1d62979533c5c8d
BLAKE2b-256 f343f5dd7ba383d0ac5a59401f04a1dbc79bb8f4197034ab4c37d0f187817e04

See more details on using hashes here.

Provenance

The following attestation bundles were made for dawdreamer_bh-0.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: all.yml on ben-hayes/DawDreamer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dawdreamer_bh-0.8.4-cp311-cp311-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for dawdreamer_bh-0.8.4-cp311-cp311-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 b17aab33df175e56c6de2d884abaf272503dfba9d07be375c11902a2d6baec79
MD5 d2f512fe900a6a39d863cb0e0cf28dd7
BLAKE2b-256 690bd6802d8117eb8e08ae696c210d0455a2f4c1f07c2ff982f9853b2eb68cfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for dawdreamer_bh-0.8.4-cp311-cp311-macosx_12_0_arm64.whl:

Publisher: all.yml on ben-hayes/DawDreamer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dawdreamer_bh-0.8.4-cp310-cp310-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for dawdreamer_bh-0.8.4-cp310-cp310-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 b1a9b882f56379035603c719b41324d95c4f339099ec65a45c60f2e8e0495c09
MD5 5edbdfde3b54afd61f56d8f0092b2d2f
BLAKE2b-256 5a667f0269c866bcc37b8c00dc21ca0693623f282048580b529deb30eefcde8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for dawdreamer_bh-0.8.4-cp310-cp310-macosx_12_0_arm64.whl:

Publisher: all.yml on ben-hayes/DawDreamer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page