1.0.0 • Published 5 years ago

brinicle v1.0.0

Weekly downloads
8
License
SEE LICENSE IN LI...
Repository
github
Last release
5 years ago
  • What is this? Brinicle is a proof-of-concept, polyglot framework for creating audio effect plug-ins. Audio processing is written in [https://www.rust-lang.org], and the user interface is written in javascript using [https://facebook.github.io/react-native/]. Currently the only supported format is audio units v2, but many of the concepts could be generalized to other formats.
  • Is this ready for production use? Probably not without serious investment - this is just a proof of concept framework to explore what's possible.
  • Why do something like this? This was done for a few reasons - first, so that I could personally learn more about the technologies involved, and also to dream about a more modern way to write audio software. Currently the vast majority of audio plug-ins are written in C++, using user-interface libraries that are quite a bit older than react-native. Is the reactive approach a better one for writing audio software? Is rust a better language for signal processing than C++? The idea of creating this proof-of-concept was to begin to answer these questions.
  • How do I create a brinicle project? ** Prerequisites
  • node.js
  • rust
  • rust aarch64-apple-ios toolchain (~rustup target add aarch64-apple-ios~)
  • rust x86_64-apple-ios toolchain (~rustup target add x86_64-apple-ios~)
  • xcode 10 ** Starting a project Brinicle comes with scaffolding script called ~create-brinicle>~. You can create your brinicle project by calling ~npx create-brinicle ~. You will be prompted for some relevant information.

Then, to build your project, open the xcode project in the ~mac~ folder. To get started, build the target called ~TestApp~. This will build a stand-alone application where you can test your effect before running a plug-in build. It is critical that you disable parallelize builds from the scheme options in xcode - this is required to build any react-native project due to some configuration choices made upstream. Sometimes the first build will fail building underlying react libraries; if this happens please try again and it may succeed next time.

If you did everything right, it should look something like this:

#+CAPTION: example #+NAME: example.png [./example.png]

To build a plug-in, build the target named ~AU~. In most hosts, due to sandboxing, you'll only be able to run the release build inside the host.

  • How do I edit the UI code? The user interface code is written in javascript, and the entry point is in ~mac/index.mac.js~.
  • How do I edit the signal processing code? The signal processing code is written in rust, and the entry point is ~rust/kernel/src/lib.js~