SIGN IN SIGN UP

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