The Beast + BSE code base origins date back to the 90ties, so hacking on it requires some knowledge about ancient aspects and mixings with newer technologies. The following gives a high-level overview of the pitfalls involved, this file can be discussed at .
The code base is currently undergoing several migrations and new developments:
[ONGOING] (For BSE) Move from sfidl (and the old PROC files) to AIDA IDL (aidacc, distributed with Rapicorn). BSE already contains an AIDA style IDL file with C++11 objects that can be used in Beast. Eventually, all sfidl files need to be ported to AIDA IDL.
[ONGOING] Move from GObject (BseObject) to AIDA C++11 objects, derived from Aida::ImplicitBase and specified in IDL files. The following steps are planned:
bse_object_new_valist()
is used everywhere instead of g_object_new()
and its variants.bse_object_new_valist()
creates the GObject based BseObject and then creates and attaches an IDL based C++11 object (derived from Bse::Object). Back pointers are installed to link the two together and to convert back and forth. This way, features can be migrated incrementally from BseObject to Bse::Object and derived types. A template method as<>() is provided to convert between object types. This scheme requires no particular order and allows attaching C++ objects to abstract or concrete GObject types, whatever is easier for migration efforts.sfidl --plugin
mode, which generates very customized code to implement BSE objects and related synthesis engine modules.[STARTED] The BSE plugin API has almost no uses, but plugin loading causes major slowdowns in the startup phase. As a consequence, all plugins shipped together with BSE should be linked into the same ELF library.
[PLANNED] Migrate the use of the Gtk+ toolkti to use Rapicorn widgets instead.
[PLANNED] Add interactive REPL loop via Python interpreter, requires
integration of multiple main loops.
[PLANNED] Use Python scripts instead of Scheme scripts. As soon as it’s
possible to implement basic Python scripts, SCM scripts may be broken and
shall be replaced.
[COMPLETED] Beast used to generate some structures from bstrecords.idl (sfidl), these are all migrated into bstapi.idl (ADIA IDL).
[COMPLETE] Beast enums have all been migrated from scanned C headers into bstapi.idl.
[COMPLETE] All .c files have been turned into .cc files, so all sources are now compiled as C++11.
Conversion between object handles works as follows:
// In bse/
BseServer server = server_impl->as
ServerImpl
ServerIface server_iface = server->as
ServerIfaceP server_iface_p = shared_ptr_cast
// In beast-gtk/
ServerIface
ObjectIfaceP server_iface->from_proxy (proxyid);
SfiProxy proxy = server_iface->proxy_id();