DawDreamer

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

GPL-3.0 License

Downloads
3.3K
Stars
905
Committers
7

Bot releases are hidden (Show)

DawDreamer - v0.8.0 Latest Release

Published by DBraun 11 months ago

Breaking changes:

  • boxFromDSP now returns just a box, not a tuple of (box, inputs, outputs)
  • getBoxType has been removed.

Improvements:

  • A box object has new properties: .valid, .inputs .outputs. This is why boxFromDSP changed and getBoxType was removed.
  • FaustProcessor's compile_box now looks for .lib/.dsp files in its .faust_libraries_path directory.
  • Update libfaust to 2.69.3.
  • PyPI builds for Python 3.12
  • Update JUCE to 7.0.8
  • Minor touchups to the Faust to JAX/Faust to QDax/Box API notebooks. These will have more improvements over the next two weeks.
DawDreamer - v0.7.4

Published by DBraun about 1 year ago

This release fixes issues introduced in 0.7.2 and 0.7.3.
PyPI now requires Python 3.8 for Windows/Linux. MacOS requires Python 3.9.

Bug fixes:

  • In between renders, a plugin processor is now better told to turn off all MIDI notes. This is helpful if a render ends before a Note Off event.
  • RenderEngine.cpp has fixed an issue when the output render size was off by one sample if the block size was 2.

Other updates:

  • JUCE has been updated to 7.0.7.
  • pybind11 has been updated.
  • Sampler Processor Plugin project has been updated.
  • libfaust has been updated to 2.68.1.
  • rubberband has been updated
  • libsamplerate has been updated.
  • libfaust (the Box and Signal API) files have been refactored into more isolated files.
  • The Faust Processor can now load soundfile primitives directly from the filesystem. If the file hasn't been specified via set_soundfiles then the filesystem will be checked.
    • Similar improvement for boxSoundfile("mySound[url:{'tango.wav'}]", 2): If you tell a FaustProcessor to compile the box involving boxSoundfile, then the files will be loaded. As a fallback, the dictionary from set_soundfiles will be used.
  • Python floats and ints can be implicitly converted into boxReal(val), boxInt(val), sigReal(val), and sigInt(val): boxHSlider("cutoff", 440, 20, 20000, .001) is OK (440 is implicitly casted boxInt(440)
DawDreamer - v0.7.3

Published by DBraun about 1 year ago

PyPI now requires Python 3.8 for Windows/Linux. MacOS requires Python 3.9.

Bug fixes:

  • In between renders, a plugin processor is now better told to turn off all MIDI notes. This is helpful if a render ends before a Note Off event.
  • RenderEngine.cpp has fixed an issue when the output render size was off by one sample if the block size was 2.

Other updates:

  • JUCE has been updated to 7.0.7.
  • pybind11 has been updated.
  • Sampler Processor Plugin project has been updated.
  • libfaust has been updated to 2.68.1.
  • libfaust (the Box and Signal API) files have been refactored into more isolated files.
  • The Faust Processor can now load soundfile primitives directly from the filesystem. If the file hasn't been specified via set_soundfiles then the filesystem will be checked.
    • Similar improvement for boxSoundfile("mySound[url:{'tango.wav'}]", 2): If you tell a FaustProcessor to compile the box involving boxSoundfile, then the files will be loaded. As a fallback, the dictionary from set_soundfiles will be used.
  • Python floats and ints can be implicitly converted into boxReal(val), boxInt(val), sigReal(val), and sigInt(val): boxHSlider("cutoff", 440, 20, 20000, .001) is OK (440 is implicitly casted boxInt(440)
DawDreamer - v0.7.2 [wait for 0.7.3]

Published by DBraun about 1 year ago

PyPI now requires Python 3.8 for Windows/Linux. MacOS requires 3.9

Bug fixes:

  • In between renders, a plugin processor is now better told to turn off all MIDI notes. This is helpful if a render ends before a Note Off event.
  • RenderEngine.cpp has fixed an issue when the output render size was off by one sample if the block size was 2.

Other updates:

  • JUCE has been updated to 7.0.7.
  • pybind11 has been updated.
  • Sampler Processor Plugin project has been updated.
  • libfaust has been updated to 2.68.1.
  • libfaust (the Box and Signal API) files have been refactored into more isolated files.
  • The Faust Processor can now load soundfile primitives directly from the filesystem. If the file hasn't been specified via set_soundfiles then the filesystem will be checked.
    • Similar improvement for boxSoundfile("mySound[url:{'tango.wav'}]", 2): If you tell a FaustProcessor to compile the box involving boxSoundfile, then the files will be loaded. As a fallback, the dictionary from set_soundfiles will be used.
  • Python floats and ints can be implicitly converted into boxReal(val), boxInt(val), sigReal(val), and sigInt(val): boxHSlider("cutoff", 440, 20, 20000, .001) is OK (440 is implicitly casted boxInt(440)
DawDreamer - v0.7.1

Published by DBraun over 1 year ago

This version adds some multiprocessing tests and examples.

Behind the scenes, we're using the JUCE AudioProcessorGraph in a slightly better way.

  • The mutex in PluginProcessor has been removed because it was no longer necessary.
  • We create the JUCE MessageManager instance before creating the AudioProcessorGraph.
DawDreamer - v0.7.0

Published by DBraun over 1 year ago

Breaking changes:

  • Dropped PyPI builds for macOS python 3.7/3.8. Please use Python 3.9 or higher.
  • Minimum macOS version is now 11.0.

Updates:

  • https://github.com/DBraun/DawDreamer/issues/152 is a high-priority bug that is not yet addressed.
  • Fixed crash with PluginProcessor.record_automation
  • Updated to Faust version 2.59.6 and the associated Faust Libraries.
  • Updated the Box/Signal APIs with some new functions
    • Fixed some of the isBox functions in the Faust Box API.

Developer notes:

  • Removed libfaust files from repository
  • Build procedure now dynamically downloads libfaust
  • Updated faust, faustlibraries, and pybind11 submodules
  • Developer's Guide will be updated this week to reflect these changes.
  • The JAX/QDax Python notebooks will also be updated very soon.
DawDreamer - v0.6.16

Published by DBraun over 1 year ago

Bug fixes:

Other:

  • AddProcessor will throw a runtime error if the most recently specified gain levels don't work for the given audio buffer (such as 3 gain values for 2 stereo tracks)
DawDreamer - v0.6.15

Published by DBraun over 1 year ago

Bug fixes:

  • PlaybackWarp Processor now outputs zeros rather than junk values after the playhead has passed the processor's clips, as determined by .set_clip_positions(clip_positions)

Other:

  • Python 3.11 builds of DawDreamer are available
  • JUCE has been updated to 7.0.5
DawDreamer - v0.6.14

Published by DBraun almost 2 years ago

Three new exciting notebooks to try with DawDreamer 0.6.14.

  • Box API: Access the intermediate representation of Faust, programmatically compose boxes, then render audio with DawDreamer, or transpile to a target language (C++, JAX, Rust, etc.).
  • Faust to JAX: Convert Faust to JAX and optimize parameters using gradient descent.
  • Faust to QDax: Convert Faust to JAX and train with Quality-Diversity algorithms.
DawDreamer - v0.6.12

Published by DBraun about 2 years ago

Same as 0.6.11 but with support for Apple Silicon.

DawDreamer - v0.6.11

Published by DBraun about 2 years ago

  • No breaking changes, hopefully just better VST support. Please try and report.
  • Fix possible MIDI memory issue.
  • Add the Faust Box and Signal APIs. Check out tests/test_libfaust*.py) if you're interested! There will be a tutorial eventually.
DawDreamer - v0.6.10

Published by DBraun over 2 years ago

  • New feature to fetch automation as audio-rate data. Use processor.record_automation = True and processor.get_automation() to get a dictionary.
  • New feature to save MIDI processor.save_midi("path/to/my_output.mid"). Use it after rendering.
  • Upgrade to JUCE 7, enabling LV2 plugins, although not tested
  • Bug fix related to MIDI timing whenbeats=True. This only mattered significantly if the buffer size was large.
  • Bug fixes related to VST3 parameters (ignore parameters which aren't automatable or have empty "" name)
  • Performance optimization for FaustProcessor and PluginProcessor parameters which aren't automated (they're constant)
  • Git repository no longer includes JUCE_6/JUCE_7 because it's just included in JuceLibraryCode
DawDreamer - v0.6.9

Published by DBraun over 2 years ago

Non-breaking changes:

  • Don't use KissFFT on Windows. This should have a marginal quality improvement for PlaybackWarpProcessor.
DawDreamer - v0.6.8

Published by DBraun over 2 years ago

Breaking changes:

  • PlaybackWarpProcessor now has an enum config system based on Rubber Band's docs. The code below will maintain backwards compatibility
rb_option = daw.PlaybackWarpProcessor.option
playback_warp_processor.set_options(
    rb_option.OptionTransientsSmooth |
    rb_option.OptionPitchHighQuality |
    rb_option.OptionChannelsTogether
)

Non-breaking changes:

  • Fixed a bug related to PlaybackWarpProcessor when warp is off.
  • PyPI now includes Windows with Python 3.10
DawDreamer - v0.6.7

Published by DBraun over 2 years ago

Breaking change:
convert_to_sec=True kwarg has been refactored into beats=False everywhere.

New features:

  • PlaybackWarp Processor can now take audio of a different sample rate if you specify the rate as kwarg sr.
  • RenderEngine.render now has a default kwarg beats=False. When True, the duration is measured in beats.

Bug fixes:

  • Fix looping-related bad code in PlaybackWarp Processor. The tempo won't fall out of sync now.
  • Fix fopen issue in Ableton Clip Info (too many file opens caused a crash).

Demo:

  • New examples/dj_mixing/dj.py for DJ transitions. Start with one song at tempo A and fade to another song with tempo B.
DawDreamer - v0.6.6

Published by DBraun over 2 years ago

Versions 0.6.7 and above dropped convert_to_sec=True in favor of beats=False.

BPM/PPQN new features:

  • load_midi and add_midi_note now take convert_to_sec as a kwarg, which is True by default. This maintains backwards compatibility. When convert_to_sec is False, the notes are added according to their beats, so changes to the Engine's BPM will affect the timing.
  • load_midi has a kwarg for clear_previous, which defaults to True, maintaining backwards compatibility.
  • RenderEngine's set_bpm can now take a numpy array and an integer PPQN. For example, if the values in the array change every PPQN samples, then the tempo change will be "on the beat."
  • Any parameter's set_automation now works with optional second PPQN rate argument.

Other features:

  • RenderEngine has remove_processor(name: str). If you really want to remove a processor (and break existing Python references to it), use this.

Bug fixes:

  • Fix int cast overflow bug with playback warp processor
DawDreamer - v0.6.5

Published by DBraun over 2 years ago

No breaking changes.

DawDreamer - v0.6.4

Published by DBraun over 2 years ago

PyPI now has wheels for Linux x86_64 with Python 3.7, 3.8, 3.9, 3.10

Try it in a Google Colab!

DawDreamer - v0.6.3

Published by DBraun over 2 years ago

Quick update to v0.6.2: Fix issue when overwriting files with Plugin Processor's save_state(filepath: str)

DawDreamer - v0.6.2

Published by DBraun over 2 years ago

New Plugin Processor features:

  • open_editor()
  • load_state(filepath: str)
  • save_state(filepath: str)
  • can_set_bus(inputs: int, outputs: int)
  • set_bus(inputs: int, outputs: int)

See tests/test_plugins.py for more examples.