Digital Audio Workstation with Python; VST instruments/effects, parameter automation, FAUST, JAX, Warp Markers, and JUCE processors
GPL-3.0 License
Bot releases are visible (Hide)
Breaking changes:
boxFromDSP
now returns just a box
, not a tuple of (box, inputs, outputs)
getBoxType
has been removed.Improvements:
.valid
, .inputs
.outputs
. This is why boxFromDSP
changed and getBoxType
was removed.compile_box
now looks for .lib
/.dsp
files in its .faust_libraries_path
directory.Faust to JAX
/Faust to QDax
/Box API notebooks
. These will have more improvements over the next two weeks.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:
RenderEngine.cpp
has fixed an issue when the output render size was off by one sample if the block size was 2.Other updates:
soundfile
primitives directly from the filesystem. If the file hasn't been specified via set_soundfiles
then the filesystem will be checked.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.boxReal(val)
, boxInt(val)
, sigReal(val)
, and sigInt(val)
: boxHSlider("cutoff", 440, 20, 20000, .001)
is OK (440 is implicitly casted boxInt(440)
Published by DBraun about 1 year ago
PyPI now requires Python 3.8 for Windows/Linux. MacOS requires Python 3.9.
Bug fixes:
RenderEngine.cpp
has fixed an issue when the output render size was off by one sample if the block size was 2.Other updates:
soundfile
primitives directly from the filesystem. If the file hasn't been specified via set_soundfiles
then the filesystem will be checked.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.boxReal(val)
, boxInt(val)
, sigReal(val)
, and sigInt(val)
: boxHSlider("cutoff", 440, 20, 20000, .001)
is OK (440 is implicitly casted boxInt(440)
Published by DBraun about 1 year ago
PyPI now requires Python 3.8 for Windows/Linux. MacOS requires 3.9
Bug fixes:
RenderEngine.cpp
has fixed an issue when the output render size was off by one sample if the block size was 2.Other updates:
soundfile
primitives directly from the filesystem. If the file hasn't been specified via set_soundfiles
then the filesystem will be checked.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.boxReal(val)
, boxInt(val)
, sigReal(val)
, and sigInt(val)
: boxHSlider("cutoff", 440, 20, 20000, .001)
is OK (440 is implicitly casted boxInt(440)
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.
Published by DBraun over 1 year ago
PluginProcessor.record_automation
isBox
functions in the Faust Box API.Published by DBraun over 1 year ago
Bug fixes:
engine.load_graph
with an invalid argument.Other:
Published by DBraun over 1 year ago
Bug fixes:
.set_clip_positions(clip_positions)
Other:
Published by DBraun almost 2 years ago
Three new exciting notebooks to try with DawDreamer 0.6.14.
Published by DBraun about 2 years ago
Same as 0.6.11 but with support for Apple Silicon.
Published by DBraun over 2 years ago
processor.record_automation = True
and processor.get_automation()
to get a dictionary.processor.save_midi("path/to/my_output.mid")
. Use it after rendering.beats=True
. This only mattered significantly if the buffer size was large.JuceLibraryCode
Published by DBraun over 2 years ago
Non-breaking changes:
Published by DBraun over 2 years ago
Breaking changes:
rb_option = daw.PlaybackWarpProcessor.option
playback_warp_processor.set_options(
rb_option.OptionTransientsSmooth |
rb_option.OptionPitchHighQuality |
rb_option.OptionChannelsTogether
)
Non-breaking changes:
Published by DBraun over 2 years ago
Breaking change:
convert_to_sec=True
kwarg has been refactored into beats=False
everywhere.
New features:
sr
.RenderEngine.render
now has a default kwarg beats=False
. When True, the duration is measured in beats.Bug fixes:
fopen
issue in Ableton Clip Info (too many file opens caused a crash).Demo:
examples/dj_mixing/dj.py
for DJ transitions. Start with one song at tempo A and fade to another song with tempo B.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.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."set_automation
now works with optional second PPQN rate argument.Other features:
remove_processor(name: str)
. If you really want to remove a processor (and break existing Python references to it), use this.Bug fixes:
Published by DBraun over 2 years ago
No breaking changes.
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)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!
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)
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.