The apps for PyDevices: things you run on a board or a desktop. A Home app lives in apps/; a program, which runs on its own, lives in programs/.
On a Wi-Fi board, one line installs an app with what it needs, and another starts Home at boot (install an app):
import omip
omip.install("github:PyDevices/apps/apps/home")
omip.install("github:PyDevices/apps/apps/home/main.py", target="/")On a computer, the apps are used from a clone, beside the libraries they build on:
git clone https://github.com/PyDevices/apps
git clone https://github.com/PyDevices/audioinstruments
git clone https://github.com/PyDevices/audioeffects
git clone https://github.com/PyDevices/audiodsp
pip install ./audiodsp numpy
pip install --no-deps ./audioinstruments ./audioeffects/lib/audioeffectsThe libraries the apps share (appkit, controlkit, deskkit, sayso,
songmodel, soundmodule, spectrum and touchkit) also install as a package, under
their own names. Each is imported directly, as in import controlkit:
pip install -i https://test.pypi.org/simple/ omnipython-applibsOn a board, use mip.install("applibs", index="https://lib.omnipython.org").
To freeze them into firmware, name this repository's folder as a module of the
build: its manifest.py lists them.
Render a MIDI file through the sound module to a WAV, with no MIDI hardware.
The sound comes from a General MIDI SoundFont (.sf2) that you supply, such
as GeneralUser GS:
cd apps
python tools/render_mid.py tests/midi/musicbox1_spooky_waltz.mid take.wav --bank GeneralUser-GS.sf2 --path libIt writes take.wav, 53 seconds of celesta, and prints what it measured:
notes 261
played 261
held 0
sounding 0
song 53.310
render 0.947
reverb 0
chorus 0
soundmodule: cpython 3.12.3 (linux): 0 bytes of MIDI, 0 Identity Requests answered, render behind by at most 0 ms while playing (0 ms before the first note)
channel 1: 157 notes, bank 0:0 program 8, Celesta
channel 2: 56 notes, bank 0:0 program 8, Celesta
channel 3: 32 notes, bank 0:0 program 8, Celesta
channel 16: 16 notes, bank 0:0 program 8, Celesta
played equals notes when every note sounded. The render and interpreter lines are yours to differ on.
Made by PyDevices.
