brickworks/examples/README.md

145 lines
8.7 KiB
Markdown
Raw Normal View History

# Examples
2024-02-23 09:35:13 +00:00
## Premise
2024-02-23 09:35:13 +00:00
Each of these examples consists of a common part of code, shared by all examples, which contains all necessary boilerplate code and is not Brickworks-related, and a specific part which actually implements the audio engine. The common code is copied/generated by an external tool called [Tibia](https://github.com/sdangelo/tibia). If you downloaded an official Brickworks release you don't need to care about any of this - all needed files will already be present -, otherwise you first need to [run Tibia as outlined below](#tibia). You might also want to do that if you need to edit the location of third-party dependencies (this is better explained in the following platform-specific instructions).
2024-02-23 10:54:03 +00:00
Each subfolder contains an example, except the `common` folder, which contains a good deal of common code and common Tibia metadata. In order to build an example just `cd` to <code>*example*/*platform*</code> and use the following platform-specific instructions. Building for any platform requires a recent enough version of [GNU Make](https://www.gnu.org/software/make/) installed.
## VST3
### Prerequisites
Windows (via [MSYS2/Mingw-w64](https://www.msys2.org/)), macOS, and Linux OSes are supported. Building tested with [GCC](https://gcc.gnu.org/), probably also works with [Clang](https://clang.llvm.org/).
2024-02-23 09:35:13 +00:00
You also need to download or clone the [VST3 C API](https://github.com/steinbergmedia/vst3_c_api) and place it in the same folder as the Brickworks folder, or otherwise edit `common/src/vst3-make.json` then change `cflags` to point to the correct directory and finally [run Tibia](#tibia), or invoke `make` with appropriate `CFLAGS` straight from the command line.
### Build
2024-02-23 09:35:13 +00:00
In order to build just type `make`. You'll find the resulting VST3 directory in <code>build/bw\_example\_*example*.vst3</code>.
### Installation
2024-02-23 09:35:13 +00:00
If all went fine, you can install for the current user (i.e., into the user VST3 folder) by invoking `make install-user` or for all users (i.e., into the system VST3 folder) by `make install`.
2024-02-23 09:35:13 +00:00
## LV2
### Prerequisites
Windows (via [MSYS2/Mingw-w64](https://www.msys2.org/)), macOS, and Linux OSes are supported. Building tested with [GCC](https://gcc.gnu.org/), probably also works with [Clang](https://clang.llvm.org/).
You also need to download/install [LV2](https://lv2plug.in/), so that either header files are found by the compiler in its default include path, or otherwise you could add an appropriate `cflags` value to `common/src/lv2-make.json` and [run Tibia](#tibia), or invoke `make` with appropriate `CFLAGS` straight from the command line.
### Build
In order to build just type `make`. You'll find the resulting LV2 bundle in <code>build/bw\_example\_*example*.lv2</code>.
### Installation
If all went fine, you can install for the current user (i.e., into the user VST3 folder) by invoking `make install-user` or for all users (i.e., into the system VST3 folder) by `make install`.
## Web
### Prerequisites
You need Clang with WebAssembly target support and [OpenSSL](https://www.openssl.org/) installed.
### Build
In order to build just type `make`. You'll find the resulting output directory in `build/web`.
### Running
2023-02-20 17:12:17 +00:00
The output files need to be served over HTTPS. A self-signed certificate is generated in the output directory (hence the OpenSSL requirement) to make it possible to run an HTTPS-enabled web server, e.g. `http-server -S`, directly on/from the output folder.
## Daisy Seed
### Prerequisites
Building and firmware upload was only tested on Linux. You need [arm-none-eabi-gcc](https://developer.arm.com/Tools%20and%20Software/GNU%20Toolchain) (for building) and [dfu-util](https://dfu-util.sourceforge.net/) (for firmware upload) installed.
2024-02-23 09:35:13 +00:00
You also need to clone/download [libDaisy](https://github.com/electro-smith/libDaisy) (beware that since version 7.0.0 you also need to clone submodules, see the [release notes](https://github.com/electro-smith/libDaisy/releases/tag/v7.0.0)), `cd` to it, and run `make`. You should either place it in the same folder as the Brickworks folder, or otherwise edit `common/src/daisy-seed-make.json` then change `libdaisyDir` to point to the correct directory and finally [run Tibia](#tibia).
### Build
In order to build just type `make`. You'll find the resulting output files in `build`.
### Firmware upload
To upload the firmware:
1. branch the board to the uploading machine via USB;
2. put the board in DFU mode by pressing BOOT, then RESET, then letting go of RESET and then of BOOT;
3. type `make program-dfu`.
Effect examples report output parameter values and CPU usage statistics via USB serial. You can read the output by, e.g., `screen /dev/ttyACM0`.
2023-07-30 09:30:05 +00:00
## Android
### Prerequisites
2024-02-23 09:35:13 +00:00
Android examples are built without the help of Android Studio or Gradle. You'll however need to have a recent enough JDK (we need `javac`), as well as to download the latest stable:
2023-07-30 09:30:05 +00:00
- Android SDK (https://developer.android.com/studio/index.html) \*;
- Android NDK (https://developer.android.com/ndk/downloads) \*;
2023-07-30 09:30:05 +00:00
- `.jar`s and `.aar`s (and you'll also need to manually extract the inner `.jar` from each `.aar`, which are just ZIP files) for:
- AndroidX Core (https://mvnrepository.com/artifact/androidx.core/core);
- AndroidX Lifecycle Common (https://mvnrepository.com/artifact/androidx.lifecycle/lifecycle-common)
- AndroidX VersionedParcelable (https://mvnrepository.com/artifact/androidx.versionedparcelable/versionedparcelable)
- Kotlin Stdlib (https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib);
- Koltin Coroutines Core (https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-core);
- Koltin Coroutines Core JVM (https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-core-jvm);
- `miniaudio.h` library (http://miniaud.io/).
2024-02-23 09:35:13 +00:00
Then you'll probably also need to adjust paths and values in `common/src/android-make.json` and [run Tibia](#tibia).
2023-07-30 09:30:05 +00:00
\* You can install both the needed parts of the Android SDK and the NDK by downloading the so-called "command line tools" (https://developer.android.com/studio#command-line-tools-only) and using the included `sdkmanager` program. In such case you need to install the following packages: "platforms;android-*latest*", "build-tools;*latest*", "platform-tools", and "ndk;*latest*".
2023-07-30 09:30:05 +00:00
### Build
In order to build just type `make`. You'll find the resulting `.apk` file in `build`.
### Installation
2024-02-23 09:35:13 +00:00
If all went fine, you can branch your device and install using `make install` or otherwise install manually.
2023-07-30 09:30:05 +00:00
### Usage and known issues
Effect examples process audio input signals, therefore they will require permission to use the capture device.
2024-02-23 10:54:03 +00:00
Synth examples use input MIDI and support hotplugging.
2023-07-30 09:30:05 +00:00
2023-08-04 14:20:35 +00:00
## iOS
### Prerequisites
iOS examples are not directly built by the supplied Makefiles. These rather generate the corresponding XCode projects and required files.
2023-08-07 11:26:04 +00:00
For this to work you need to have the latest [Xcode](https://developer.apple.com/xcode/) and [XcodeGen](https://github.com/yonaskolb/XcodeGen) installed, as well as a copy of the latest [`miniaudio.h`](http://miniaud.io/).
2024-02-23 09:35:13 +00:00
Finally, you might need to adjust header search path for miniaudio in `common/src/ios-make.json`, `common/src/ios-make-cxx-fx.json`, and `common/src/io-make-cxx-synth.json`, and [run Tibia](#tibia).
2023-08-04 14:20:35 +00:00
### Build
Typing `make` will generate the required Xcode project in `build/gen`.
You'll need to open it and select a development team (click on the project root in the left side pane, then choose the "Signing & Capabilities" tab, and finally pick a "Team").
At this point you can build and run as with any other iOS app.
### Usage
Effect examples process audio input signals, therefore they will require permission to use the capture device.
Synth examples use input MIDI and support hotplugging.
2024-02-23 09:35:13 +00:00
## Tibia
2024-02-23 10:54:03 +00:00
You need [Node.js](https://nodejs.org/en) and [npm](https://www.npmjs.com/) to be installed.
Get [Tibia 0.0.1](https://github.com/sdangelo/tibia/releases/tag/v0.0.1), place it in the same directory as the Brickworks folder, and rename it as `tibia`. Then either `cd` to the Tibia folder and `npm install dot`, or install the [dot npm package](https://www.npmjs.com/package/dot) globally and make sure that the `NODE_PATH` environment variable is corretly set to find it.
2024-02-23 10:55:58 +00:00
Now you can `cd` to the `examples` folder and run `./tibia_gen.sh` to copy/generate files for all examples, or otherwise run `./tibia_gen.sh common` to only copy/generate files in `examples/common` or <code>./tibia\_gen.sh *example*</code> to do the same for files in <code>examples/*example*</code>.
2024-02-23 10:54:03 +00:00
If you want to remove all files copied/generated by Tibia, and thus restore the `examples` directory as it would appear in the official repository, run `./tibia_clean.sh` from the `examples` directory.