aap-lv2-string-machine: String-Machine ported to Audio Plugins For Android

July 8, 2026 ยท View on GitHub

It is a port of String-Machine to Audio Plugins For Android. It is powered by LV2 using aap-lv2.

Building

See GitHub Actions script for the normative setup.

For local desktop development, prepare string-machine, build the local aap-lv2 submodule into Maven Local, then build this app:

$ scripts/prepare-sources.sh
$ cd external/aap-lv2/external/aap-core
$ ./gradlew publishToMavenLocal
$ cd ../..
$ ./gradlew :androidaudioplugin-lv2:build :androidaudioplugin-lv2:publishToMavenLocal
$ cd ../..
$ ./gradlew build bundle

Historically, we downloaded prebuilt string-machine binaries from android-native-audio-builders release artifacts. Now DPF supports CMake so our build is based on CMake script (with some tweaks).

We patch string-machine sources as if it did not support GUI (DGL does not compile on Android). DPF CMake does not seem to support UI_TYPE and CROSS_COMPILING.

Important notes on updating string-machine

This build setup involves patching DPF cmake script to explicitly skip lv2-ttl-generator (because it does not compile under cross-compiling environment). If you updated string-machine sources, make sure to build it locally first, copy the string-machine.lv2 directory to app/main/assets/lv2, removing *.so files (they are built during app build time by Gradle).

Therefore unlike other LV2 projects, we directly commit string-machine.lv2 content in the source tree for now.

(It may sound awkward, but having to download prebuilt binaries and therefore being unable to debug the sources is way more annoying problem that you would not like to deal with.)

aap_metadata.xml is generated manually when LV2 assets change:

$ cd external/aap-lv2
$ cmake -E rm -rf tools/aap-import-lv2-metadata/build
$ cmake -S tools/aap-import-lv2-metadata -B tools/aap-import-lv2-metadata/build -G Ninja -DCMAKE_BUILD_TYPE=Debug
$ cmake --build tools/aap-import-lv2-metadata/build
$ cd ../..
$ external/aap-lv2/tools/aap-import-lv2-metadata/build/aap-import-lv2-metadata app/src/main/assets/lv2 app/src/main/res/xml

Licensing notice

aap-lv2-string-machine codebase is distributed under the BSL-1.0 license.

LV2 (repository for the headers) is under the ISC license.

String-Machine is distributed under the BSL-1.0 license.

The entire plugin application bundles androidaudioplugin-lv2 AAR module from aap-lv2, and androidaudioplugin AAR module, and is packaged into one application.