Recent Releases of dawdreamer

dawdreamer - v0.8.3

For macOS builds, macOS 12 (Monterey) is required. For all platforms Python 3.10 or higher is required (to save space on PyPI).

PluginProcessor: * Added get_parameter_range(index: int, search_steps: int = 1000, convert: bool = True) Since convert=True, the output will try to convert the parameter's range of text labels into floats (e.g. "16.2 kHz" will become 16200.0, "440 Hz" will become 440, "50% (-32.0 dB)" will become -32.0, and so on). If convert=False, you'll get the strings instead of the float conversions.

FaustProcessor: * Use libfaust 2.70.3 (which is behind the latest libfaust version 2.74.6) * Added opt_level property for LLVM optimization level, defaulting to -1 for backwards compatibility. * Allow multiple paths for Faust assets paths and library paths. * .faust_libraries_path (a str) * .faust_libraries_paths (a list of str) * .faust_assets_path (a str) * .faust_assets_paths (a list of str) * boxFFun and sigFFun have been added to the Box API and Signal API. * Fixed a bug with boxVGroup accidentally using boxHGroup

- C++
Published by DBraun over 1 year ago

dawdreamer - v0.8.0

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.

- C++
Published by DBraun over 2 years ago

dawdreamer - v0.7.4

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)

- C++
Published by DBraun over 2 years ago

dawdreamer - v0.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. * 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)

- C++
Published by DBraun over 2 years ago

dawdreamer - v0.7.2 [wait for 0.7.3]

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)

- C++
Published by DBraun over 2 years ago

dawdreamer - v0.7.1

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.

- C++
Published by DBraun over 2 years ago

dawdreamer - v0.7.0

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.

- C++
Published by DBraun almost 3 years ago

dawdreamer - v0.6.16

Bug fixes: * Fix memory leak due to calling engine.load_graph with an invalid argument. * Fix semaphore leak? (https://github.com/DBraun/DawDreamer/issues/146)

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)

- C++
Published by DBraun about 3 years ago

dawdreamer - v0.6.15

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

- C++
Published by DBraun about 3 years ago

dawdreamer - v0.6.14

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.

- C++
Published by DBraun over 3 years ago

dawdreamer - v0.6.12

Same as 0.6.11 but with support for Apple Silicon.

- C++
Published by DBraun over 3 years ago

dawdreamer - v0.6.11

  • 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.

- C++
Published by DBraun over 3 years ago

dawdreamer - v0.6.10

  • 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 JUCE6/JUCE7 because it's just included in JuceLibraryCode

- C++
Published by DBraun over 3 years ago

dawdreamer - v0.6.9

Non-breaking changes: * Don't use KissFFT on Windows. This should have a marginal quality improvement for PlaybackWarpProcessor.

- C++
Published by DBraun over 3 years ago

dawdreamer - v0.6.8

Breaking changes: * PlaybackWarpProcessor now has an enum config system based on Rubber Band's docs. The code below will maintain backwards compatibility

python 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

- C++
Published by DBraun over 3 years ago

dawdreamer - v0.6.7

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.

- C++
Published by DBraun almost 4 years ago

dawdreamer - v0.6.6

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

- C++
Published by DBraun almost 4 years ago

dawdreamer - v0.6.5

No breaking changes. * Fix memory leaks (https://github.com/DBraun/DawDreamer/issues/1, https://github.com/DBraun/DawDreamer/issues/88). In general, engines and processors should not leak when created over and over again, but some plugins will leak. Feel free to report them to me. TAL-NoiseMaker seems to leak. Serum does not. * Plugin Processor's load_state() has been improved. Under the hood, it creates a window to the plugin and doesn't show the window to the user. This makes the plugin work correctly (for example Spitfire LABs). (This might address specific plugins such as https://github.com/DBraun/DawDreamer/issues/67)

- C++
Published by DBraun almost 4 years ago

dawdreamer - v0.6.4

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

Try it in a Google Colab!

- C++
Published by DBraun almost 4 years ago

dawdreamer - v0.6.3

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

- C++
Published by DBraun almost 4 years ago

dawdreamer - v0.6.2

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.

- C++
Published by DBraun almost 4 years ago

dawdreamer - v0.6.1

Non-breaking changes to Playback Warp Processor: * Fix issue with when warping is disabled (close https://github.com/DBraun/DawDreamer/issues/81) * Add new function for resetting warp markers to a steady BPM reset_warp_markers(bpm: float) * Add new function for setting warp markers to a 2D array (.warp_markers property) (close https://github.com/DBraun/DawDreamer/issues/73)

See tests/test_playbackwarp_processor.py for more examples.

- C++
Published by DBraun almost 4 years ago

dawdreamer - v0.6.0

Breaking changes:

  • Previously we encouraged using assert statements in conjunction with various functions such as assert engine.load_graph(graph). This is now discouraged because these functions that previously returned bools will now throw errors when relevant. It is up to you to catch the errors with try/except blocks. The benefit is that you are no longer burdened with writing assert all over.

Non-breaking changes:

  • Fix bug in how Faust processor handle MIDI loaded from files.
  • Fix bug in Add Processor's number of output channels. It will always be stereo now.
  • Add keyword arg all_events to load_midi for Plugin Processor. Default is True for backwards compatibility.
  • Add Faust Processor property faust_libraries_path to specify where user's .lib files are.
  • Add Faust property for release length to avoid false-positive voice stealing warnings.
  • Revise Render Engine graph construction to give warning rather than error when too many signals are connected to some other node.
  • Upgrade JUCE, Faust and pybind11

Thanks to everyone who filed issues and PRs.

- C++
Published by DBraun almost 4 years ago

dawdreamer - v0.5.8.2

Trying to fix pip install requirements

- C++
Published by DBraun about 4 years ago

dawdreamer - v0.5.8.1

  • Multichannel support for VSTs, Faust, and other applicable processors
  • * try synth.get_num_input_channels() and synth.get_num_output_channels()
  • Better macOS support for all CPU types (try pip install dawdreamer again!)

- C++
Published by DBraun about 4 years ago

dawdreamer - v0.5.7.9

Minor update for pypi wheels with no code changes. This should build macOS from 10.15 but still support Apple Silicon via the "universal" build wheels.

- C++
Published by DBraun over 4 years ago

dawdreamer - v0.5.7.8

The soundfile primitive can now be used in Faust. On the python side, use the set_soundfiles function and pass a dictionary involving numpy arrays. See the README and soundfile tests for more examples.

- C++
Published by DBraun over 4 years ago

dawdreamer - v0.5.7.7

Remove python 3.7 for macOS because it failed to build last time.

- C++
Published by DBraun over 4 years ago

dawdreamer - v0.5.7.5

- C++
Published by DBraun over 4 years ago

dawdreamer - v0.5.0

  • Add PlaybackWarpProcessor
  • Remove Maximilian due to namespace collision with kissfft, which is used in time-stretching for PlaybackWarpProcessor

- C++
Published by DBraun over 4 years ago

dawdreamer - v0.4.0

- C++
Published by DBraun about 5 years ago