From 63df1c15b7fdd0c236a0cfd6d1e57c90db330110 Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Sun, 1 Nov 2026 00:15:38 -0500 Subject: [PATCH] Modules: synthstation, opt-in; pin omnipython-lib past it and audioinstruments 0.5.1.dev0 synthstation is an app, so all leaves it out: name it (all,synthstation) to freeze it, or install it with mip. The library pin moves to pydevices 3d7c92d, which carries synthstation and pins audioinstruments v0.5.1.dev0, whose audioinstruments.panel synthstation imports. --- .gitignore | 1 + docs/guides/choose-modules.md | 10 ++++++---- docs/reference/modules.md | 5 +++-- modules.lock | 2 +- modules/synthstation/OPT_IN | 2 ++ modules/synthstation/manifest.py | 7 +++++++ 6 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 modules/synthstation/OPT_IN create mode 100644 modules/synthstation/manifest.py diff --git a/.gitignore b/.gitignore index 141da58..1118534 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ !/modules/appkit/ !/modules/controlpanel/ !/modules/sayso/ +!/modules/synthstation/ !/modules/audioinstruments/ !/modules/audioeffects/ !/modules/audiocomponents/ diff --git a/docs/guides/choose-modules.md b/docs/guides/choose-modules.md index 1d877c4..b391206 100644 --- a/docs/guides/choose-modules.md +++ b/docs/guides/choose-modules.md @@ -13,8 +13,9 @@ A name is one of three things: - **A path**, to a module of your own: a directory with a `manifest.py`, or a C module with its `micropython.mk` or `micropython.cmake`. - **`all`**: every module except the opt-in ones. `picotts`, `tflite` and - `vision` are opt-in (each has an `OPT_IN` file saying why), so name them to - get them: `--modules all,picotts`, and for the other two + `vision` are opt-in, and so is `synthstation` (each has an `OPT_IN` file + saying why), so name them to get them: `--modules all,picotts` or + `--modules all,synthstation`, and for tflite and vision [Use esp-vision's modules](use-esp-vision-modules.md). A module never brings another, and nothing checks dependencies. If you name @@ -23,9 +24,10 @@ A module never brings another, and nothing checks dependencies. If you name ## Python packages from omnipython-lib Our Python-only packages come from omnipython-lib: `pydevices`, `palettes`, -`pdwidgets`, `appkit`, `controlpanel`, `sayso`, `audioinstruments` and +`pdwidgets`, `appkit`, `controlpanel`, `synthstation`, `sayso`, `audioinstruments` and `audioeffects` are modules whose manifest requires them from it. `sayso`, the -Spotify controller, freezes only into desktop and web builds. Any other package +Spotify controller, freezes only into desktop and web builds, and +`synthstation`, an app, only when you name it: `all` leaves it out. Any other package of it, such as a board config, can be named too. ## The desktop board config diff --git a/docs/reference/modules.md b/docs/reference/modules.md index 0f4709f..c56ef62 100644 --- a/docs/reference/modules.md +++ b/docs/reference/modules.md @@ -27,12 +27,12 @@ tracked here or linked from a sibling checkout or cloned at the commit in |---|---| | `audiodsp`, `pygraphics`, `ulab` | Cloned at the commit in `modules.lock` when `modules/` is missing, or linked from a sibling checkout. | | `lvgl` | [omnipython-lvgl](https://github.com/PyDevices/omnipython-lvgl), fetched at the commit in `modules.lock` into `modules/.omnipython-lvgl`, or linked from a sibling checkout. A build compiles its `ports/micropython` or `ports/circuitpython`, whichever the interpreter is, and `all` includes it. | -| `pydevices`, `palettes`, `pdwidgets`, `appkit`, `controlpanel`, `sayso`, `audioinstruments`, `audioeffects` | Manifests here that require the Python packages from omnipython-lib. `audiocomponents` is the old name for the last two together and still builds both. | +| `pydevices`, `palettes`, `pdwidgets`, `appkit`, `controlpanel`, `synthstation`, `sayso`, `audioinstruments`, `audioeffects` | Manifests here that require the Python packages from omnipython-lib. `audiocomponents` is the old name for the last two together and still builds both. | | `micropython-lib` | MicroPython's own upstream packages, frozen from the checkout the MicroPython tree carries. | | `tflite`, `vision` | [esp-vision's modules](../guides/use-esp-vision-modules.md), opt-in: `all` leaves them out. | [`modules/all`](https://github.com/PyDevices/micropython-pydevices/tree/main/modules/all) is not a module but the rule behind `all`: every module beside it -except those with an `OPT_IN` file: `picotts`, `tflite` and `vision`. +except those with an `OPT_IN` file: `picotts`, `synthstation`, `tflite` and `vision`. ## Which modules build on CircuitPython @@ -63,6 +63,7 @@ it is. "Unix" is CircuitPython's unix port, built and imported in | lvgl | yes | all five | One name for both interpreters: a CircuitPython build compiles omnipython-lvgl's `ports/circuitpython`. A board build needs `CIRCUITPY_GIFIO=0`, since LVGL links its own AnimatedGIF decoder; our boards set it. | | micropython-lib | no | no | MicroPython's own upstream packages. | | appkit, controlpanel | frozen | frozen | Python only. controlpanel draws with LVGL. | +| synthstation | when named | when named | Python only, and opt-in: `all` leaves it out. The app that plays an instrument on controlpanel from a MIDI keyboard; it needs LVGL, audiodsp, controlpanel and audioinstruments. | | sayso | desktop and web only | desktop and web only | Python only: the Spotify controller. A board build that names it freezes nothing. | | pydevices, palettes, pdwidgets | frozen | frozen | Python only. On unix, pydevices also freezes its desktop files (the boards drop them), and pdwidgets and palettes with it: together their names pass CircuitPython's 64 KB frozen-string pool, so [`build_mp.py`](https://github.com/PyDevices/micropython-pydevices/blob/main/build_mp.py) builds the unix port with four-byte qstr offsets (patches 0001 and 0010). Boards keep two-byte offsets. | diff --git a/modules.lock b/modules.lock index 2ff6c0b..71def74 100644 --- a/modules.lock +++ b/modules.lock @@ -23,4 +23,4 @@ audiodsp https://github.com/PyDevices/audiodsp.git 733b44b63f omnipython-lvgl https://github.com/PyDevices/omnipython-lvgl.git e6f88b7737e3c5252e92a6e717142875127816ca pygraphics https://github.com/PyDevices/pygraphics.git ecc4eb2348b3289f4383d51c6f401e922621e724 ulab https://github.com/v923z/micropython-ulab.git 1d3ddd8f5228e2c7335dac71f4846e6abb0ec9f9 -omnipython-lib https://github.com/PyDevices/pydevices.git 6390b79d1754cf980a803568a1d58b5fd4efc144 +omnipython-lib https://github.com/PyDevices/pydevices.git 3d7c92d183adfd08cc10d4c6b93d7672a27a1167 diff --git a/modules/synthstation/OPT_IN b/modules/synthstation/OPT_IN new file mode 100644 index 0000000..a6b2cf6 --- /dev/null +++ b/modules/synthstation/OPT_IN @@ -0,0 +1,2 @@ +Opt-in: name synthstation to build it; --modules all leaves it out. +It's an app rather than a library: install it with mip on the board that runs it, or freeze it into a build made for that board. diff --git a/modules/synthstation/manifest.py b/modules/synthstation/manifest.py new file mode 100644 index 0000000..e4f7506 --- /dev/null +++ b/modules/synthstation/manifest.py @@ -0,0 +1,7 @@ +# synthstation, from omnipython-lib: the app that plays an audioinstruments +# instrument from a MIDI keyboard on controlpanel's panel. It needs LVGL, +# audiodsp, controlpanel and audioinstruments, so name them too (or use +# all,synthstation); the library brings midiports with it. Opt-in: all leaves +# it out (OPT_IN). Frozen at opt=3. +include("../library.py") +require("synthstation", library="omnipython-lib", opt=3)