dawdreamer

Digital Audio Workstation with Python; VST instruments/effects, parameter automation, FAUST, JAX, Warp Markers, and JUCE processors

https://github.com/dbraun/dawdreamer

Science Score: 46.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: arxiv.org
  • Committers with academic emails
    1 of 8 committers (12.5%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (8.2%) to scientific vocabulary

Keywords

ableton audio audio-plugin audio-processing daw faust jax juce midi python synthesizer vst vst-host vst3 vst3-host

Keywords from Contributors

cryptocurrency transformer mesh sequences interactive hacking network-simulation
Last synced: 6 months ago · JSON representation

Repository

Digital Audio Workstation with Python; VST instruments/effects, parameter automation, FAUST, JAX, Warp Markers, and JUCE processors

Basic Info
  • Host: GitHub
  • Owner: DBraun
  • License: gpl-3.0
  • Language: C++
  • Default Branch: main
  • Homepage:
  • Size: 483 MB
Statistics
  • Stars: 1,026
  • Watchers: 33
  • Forks: 79
  • Open Issues: 53
  • Releases: 31
Topics
ableton audio audio-plugin audio-processing daw faust jax juce midi python synthesizer vst vst-host vst3 vst3-host
Created over 5 years ago · Last pushed about 1 year ago
Metadata Files
Readme License Citation

README.md

```


| __ \ | __ \
| | | | __ _ __ __ | | | | _ __ ___ __ _ _ __ ___ ___ _ __ | | | | / ` | \ \ /\ / / | | | | | '| / _ \ / _` | | ' ` _ \ / _ \ | '| | || | | (| | \ 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.

```python import dawdreamer as daw from scipy.io import wavfile SAMPLERATE = 44100 engine = daw.RenderEngine(SAMPLERATE, 512) # 512 block size faustprocessor = engine.makefaustprocessor("faust") faustprocessor.setdspstring( """ 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(faustprocessor.getparametersdescription()) engine.loadgraph([ (faustprocessor, []) ]) faustprocessor.setparameter("/MySine/freq", 440.) # 440 Hz faustprocessor.setparameter("/MySine/vol", -6.) # -6 dB volume

engine.setbpm(120.) engine.render(4., beats=True) # render 4 beats. audio = engine.getaudio() # shaped (2, N samples) wavfile.write('sinedemo.wav', SAMPLERATE, audio.transpose())

Change settings and re-render

faustprocessor.setparameter("/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.

```python import dawdreamer as daw from scipy.io import wavfile SAMPLERATE = 44100 INSTRUMENTPATH = "path/to/instrument.dll" EFFECT_PATH = "path/to/effect.dll"

engine = daw.RenderEngine(SAMPLERATE, 512) engine.setbpm(120.)

synth = engine.makepluginprocessor("synth", INSTRUMENTPATH) print('inputs:', synth.getnuminputchannels()) print('outputs:', synth.getnumoutputchannels()) print(synth.getparameters_description())

synth.set_parameter(7, .1234)

(MIDI note, velocity, start sec, duration sec)

synth.addmidinote(60, 100, 0.0, 2.)

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

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

engine.render(4.) # render 4 seconds. audio = engine.getaudio() wavfile.write('synthdemo.wav', SAMPLERATE, audio.transpose()) synth.clearmidi()

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

Owner

  • Name: David Braun
  • Login: DBraun
  • Kind: user
  • Company: DIRT Design

Do It Real-Time | Audiovisual ML, Faust, TouchDesigner | alum @ccrma

GitHub Events

Total
  • Issues event: 8
  • Watch event: 137
  • Issue comment event: 20
  • Push event: 1
  • Gollum event: 1
  • Fork event: 13
Last Year
  • Issues event: 8
  • Watch event: 137
  • Issue comment event: 20
  • Push event: 1
  • Gollum event: 1
  • Fork event: 13

Committers

Last synced: 12 months ago

All Time
  • Total Commits: 194
  • Total Committers: 8
  • Avg Commits per committer: 24.25
  • Development Distribution Score (DDS): 0.485
Past Year
  • Commits: 7
  • Committers: 2
  • Avg Commits per committer: 3.5
  • Development Distribution Score (DDS): 0.143
Top Committers
Name Email Commits
David Braun e****l@e****m 100
David Braun 2****n 86
Guillaume g****d@g****m 3
imilas a****i@u****a 1
dependabot[bot] 4****] 1
auryd 7****d 1
Saint 5****t 1
Malek 7****8 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 9 months ago

All Time
  • Total issues: 105
  • Total pull requests: 37
  • Average time to close issues: 3 months
  • Average time to close pull requests: 5 days
  • Total issue authors: 55
  • Total pull request authors: 7
  • Average comments per issue: 3.61
  • Average comments per pull request: 0.38
  • Merged pull requests: 30
  • Bot issues: 0
  • Bot pull requests: 1
Past Year
  • Issues: 10
  • Pull requests: 2
  • Average time to close issues: 7 days
  • Average time to close pull requests: 4 days
  • Issue authors: 10
  • Pull request authors: 2
  • Average comments per issue: 2.4
  • Average comments per pull request: 0.5
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 1
Top Authors
Issue Authors
  • DBraun (26)
  • turian (7)
  • samuelbraun04 (5)
  • AI-Guru (4)
  • malekinho8 (3)
  • Centauria (3)
  • heqi201255 (3)
  • GMPHL (2)
  • RustoMCSpit (2)
  • noyuzrad (2)
  • music-lover99 (2)
  • NoahdoRegoUO (1)
  • gabyfle (1)
  • woodshop (1)
  • michael-jan (1)
Pull Request Authors
  • DBraun (30)
  • imilas (2)
  • malekinho8 (2)
  • dependabot[bot] (2)
  • auryd (1)
  • meisenzahl (1)
  • sainttttt (1)
Top Labels
Issue Labels
bug (31) enhancement (25) help wanted (13) good first issue (7)
Pull Request Labels
dependencies (2) github_actions (2)

Packages

  • Total packages: 3
  • Total downloads:
    • pypi 1,095 last-month
  • Total dependent packages: 0
    (may contain duplicates)
  • Total dependent repositories: 1
    (may contain duplicates)
  • Total versions: 57
  • Total maintainers: 1
proxy.golang.org: github.com/DBraun/DawDreamer
  • Versions: 0
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 5.4%
Average: 5.6%
Dependent repos count: 5.8%
Last synced: Never
proxy.golang.org: github.com/dbraun/dawdreamer
  • Versions: 28
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 5.4%
Average: 5.6%
Dependent repos count: 5.8%
Last synced: 6 months ago
pypi.org: dawdreamer

An audio-processing Python library supporting core DAW features

  • Versions: 29
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 1,095 Last month
Rankings
Stargazers count: 2.3%
Forks count: 5.6%
Downloads: 6.7%
Average: 9.2%
Dependent packages count: 10.1%
Dependent repos count: 21.6%
Maintainers (1)
Last synced: 6 months ago

Dependencies

test-requirements.txt pypi
  • librosa >=0.8.1
  • numpy >=1.21.2
  • pytest >=6.2.4
  • requests >=2.26.0
  • scipy >=1.7.0
.github/workflows/all.yml actions
  • actions/checkout v2 composite
  • actions/download-artifact v2 composite
  • actions/setup-python v2 composite
  • actions/upload-artifact v2 composite
  • docker/setup-qemu-action v1 composite
  • lukka/get-cmake latest composite
  • microsoft/setup-msbuild v1.0.3 composite
  • peaceiris/actions-gh-pages v3 composite
  • pypa/cibuildwheel v2.12.0 composite
  • pypa/gh-action-pypi-publish release/v1 composite
Dockerfile docker
  • quay.io/pypa/manylinux2014_x86_64 latest build