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
isBoxfunctions 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 = Trueandprocessor.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 when
beats=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
assertstatements in conjunction with various functions such asassert 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 withtry/exceptblocks. The benefit is that you are no longer burdened with writingassertall 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_eventstoload_midifor Plugin Processor. Default is True for backwards compatibility. - Add Faust Processor property
faust_libraries_pathto specify where user's.libfiles 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()andsynth.get_num_output_channels() - Better macOS support for all CPU types (try
pip install dawdreameragain!)
- 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.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