update nanobind to v2.14.0; release the GIL during rendering, plugin loading, and Faust compilation
- nanobind v2.13.0 -> v2.14.0 (robin_map v1.4.0). Integer-typed arguments now require Python's __index__ protocol, so np.float32 values and strings are no longer silently truncated/parsed into int parameters. - Add nb::call_guard<nb::gil_scoped_release> to RenderEngine.render, make_plugin_processor, save_state/load_state, load_preset, load_vst3_preset, and all FaustProcessor compile methods. These paths never touch Python objects (automation is copied into std::vector, audio into JUCE buffers), so other Python threads can run concurrently; rendering four engines on four threads is ~3.7x faster than serially. - Serialize Faust compilation with a process-wide mutex: libfaust DSP factory creation/deletion is not thread-safe, and with the GIL released, concurrent compile() calls segfaulted. The FaustProcessor destructor takes the same mutex because clear() deletes factories. JUCE plugin scanning/instantiation gets an analogous mutex in loadPlugin. - Remove a redundant mid-file #include <iostream> in FaustProcessor.cpp.
D
David Braun committed
cc61d235ed6955cc78662999140a8903ad85bcc1
Parent: fe7337b