Klangstrom (KLST) is a subtractive infrastructure design framework to facilitate generative, networked, embedded sound + music + composition. Klangstrom is comprised of software libraries, an embedded hardware platform, and a programming environment to allow seamless development of generative, networked, embedded sound + music + composition applications.
Klangstrom is comprised of the following repositories:
├── klangstrom-arduino
├── klangstrom-libraries
├── klangstrom-hardware # ⚠️ private, access on request ⚠️
└── klangstrom-tools
klangstrom-arduino
├── install.sh # ⚠️ WIP ⚠️ installs libraries and hardware variants into Arduino folders
├── libraries # ⚠️ DO NOT CHANGE ⚠️ copy of 'klangstrom-libraries' included as subtree
│ ├── CODING-STYLE.md
│ ├── Klangstrom
│ ├── Klangstrom_Emulator
│ ├── Klangstrom_KLST_EMU
│ ├── Klangstrom_KLST_PANDA_STM32
│ ├── Klangstrom_KLST_PANDA_STM32_CubeMX
│ ├── LICENSE
│ ├── README.md
│ ├── USBDevices
│ └── USBHost
├── README.md
├── tools # ⚠️ WIP ⚠️ CLI tools + scripts for installation
└── variants # variant files added to STM32duino hardware defintions via script
contains libraries and hardware ( i.e board ) definitions for Arduino IDE and arduino-cli
.
contains a series of libraries that are mostly but not exclusively used by the Arduino IDE or arduino-cli
.
klangstrom-libraries are used ( as git subtree ) in the repositories klangstrom-hardware and klangstrom-arduino.
libraries included in klangstrom-libraries:
klangstrom-libraries
├── Klangstrom
├── Klangstrom_Emulator
├── Klangstrom_KLST_EMU
├── Klangstrom_KLST_PANDA_STM32
├── Klangstrom_KLST_PANDA_STM32_CubeMX
├── USBDevices
└── USBHost # <- ⚠️ WIP ⚠️ currently broken
Klangstrom is the library that applications interact with. it defines the Klangstrom API.
infrastructure for running Klangstrom emulators. it is based on Umfeld for Arduino. it tries to mimic some Arduino functions but by far not every available function.
this library is usually not used directly.
implementation of Klangstrom API for running on the emulator. currently emulates KLST_PANDA and KLST_CATERPILLAR.
implementation of board-specific (BSP) functions of the Klangstrom API for KLST_PANDA and KLST_CATERPILLAR.
this library is usually not used directly.
low-level firmware files generated by STM32CubeMX with definitions found in the project configuration files ( .ioc
) in the klangstrom-hardware
repository.
this library is usually not used directly.
USB device library for STM32H7 devices. in USB terminology a device is a peripheral that is connect to a host e.g a keyboard, mouse or audio interface.
USB host library for STM32H7 devices. in USB terminology a host allows devices to connect to it. this library implements a sub-set of Human-Interface Devices (HID):
- keyboard
- mouse
- MIDI
klangstrom-hardware
├── KLST_CATERPILLAR
├── KLST_OCTOPUS
├── KLST_PANDA
├── KLST_PANDA_PROTO
├── KLST_SHEEP
└── KLST_TINY
contains the hardware design file ( KiCad ) for Printed-Circuit Board (PCB) production and the STM32CubeMX project configuration files ( .ioc
) which are used to generate the low-level firmware ( Hardware Abstraction Layer (HAL) ).
contains a set of tools used for development.
when developing on Klangstrom libraries it is advised to symlink the libraries in klangstrom-libraries
directly into the Arduino libraries folder. although possible it is discouraged to change code in klangstrom-arduino/libraries
directly. code in klangstrom-arduino/libraries
should only be updated via git e.g with the script ./klangstrom-tools/update-klangstrom-arduino-repositories.sh
( the same advice is true for Klangstrom libraries in klangstrom-hardware
in klangstrom-hardware/KLST_PANDA/firmware/Middlewares/klangstrom-libraries
).
- design board ( maybe based on Klangstrom board, subractive hardware design ) in KiCad
- configure STM32CubeMX project configuration files (
.ioc
) - generate low-level firmware ( HAL )
- implement BSP Klangstrom API functions
- update variant files in STM32duino