Skip to content

v0.9.0

Latest

Choose a tag to compare

@DBraun DBraun released this 12 Aug 17:01
· 8 commits to main since this release

DawDreamer 0.9.0 is on PyPI with wheels for Python 3.11–3.14 on Linux x86_64, Linux aarch64 (new), macOS arm64, macOS Intel (new), and Windows x86_64.

Highlights

  • Free-threading-friendly rendering: the GIL is released during RenderEngine.render, make_plugin_processor, plugin state/preset loading, and all FaustProcessor compile methods, so multiple engines can render concurrently on Python threads (measured ~3.7x speedup with 4 threads). Faust compilation and plugin loading are internally serialized because libfaust factory creation and JUCE plugin scanning are not thread-safe. See the new threading guide.
  • Pickling for RenderEngine and all processors (see PICKLE_FORMAT.md).
  • Python bindings switched from pybind11 to nanobind v2.14.0.
  • Faust and libfaust updated to 2.85.9 with matching faustlibraries; Sampler updated for JUCE 8.
  • Comprehensive Sphinx documentation: user guide, Faust Box/Signal API reference, and content migrated from the GitHub Wiki.

Breaking changes

  • Minimum Python version is now 3.11.
  • Requesting a plugin parameter name or text for an out-of-range index raises an exception instead of returning an empty string.
  • nanobind converts arguments more strictly than pybind11; integer arguments must be real integers (implementing __index__).

Fixes

  • Non-2D audio data passed to Playback, PlaybackWarp, or Sampler processors raises RuntimeError instead of crashing, and zero-sample audio renders silence (#219).
  • set_bus deactivates the hosted plugin before changing the bus arrangement, as VST3 requires; enable_all_buses and disable_nonmain_buses now actually reach the hosted plugin (#216).
  • Plugin loading only probes formats matching the file type, removing spurious stderr errors like LV2's "attempt to map invalid URI" (#218).
  • make_panner_processor clamps pan values below -1; load_graph validates input names immediately.

Full details in the CHANGELOG.

Full diff: v0.8.3...v0.9.0