To illustrate how Elk Audio OS and its additional components fit together, we will describe their typical use in an example product. However, as Elk Audio OS is highly customizable, your tech stack might look different from this. If you have any questions about customization or Elk Audio OS in general, please reach out to us at info@elk.audio.
the hardware.
Main SOC: The main IC contains the CPU and many other peripherals (e.g., USB and serial controllers, GPUs). Elk runs on common general-purpose SOCs such as Broadcom BCM2711 (Raspberry Pi 4), NXP i.MX8M Mini/Nano, and most Intel SOCs.
MicroController (MCU): The purpose of adding an optional MCU to an Elk system is to ease communication with the audio codec(s) and to interface with General-Purpose Input/Output (GPIO) pins or ADCs used for sensing potentiometers, etc. Elk can run with different MCUs such as XMOS, Cortex-M4/M7, or tiny CPLDs, depending on requirements for I/O and price.
the software.
Kernel: Elk Audio OS runs a customized version of the Linux Kernel using EVL Core (Xenomai project), which can achieve extremely low hard real-time performance. It is often described as a dual-kernel architecture because a small real-time kernel runs in the same memory space as the traditional Linux kernel.
Sushi: Elk’s dedicated core audio engine and Elk’s plugin host. Sushi is developed with strict real-time requirements and supports unlimited parallel channels, each with mono, stereo, or up to 64 audio channels, and as many VST and LV2 plugins as the CPU can handle.Sushi allows multichannel tracks to have multiple stereo outputs, each with individual gain and panning controls. These outputs can be routed to any audio output, useful for multi-bus plugins. Sushi also includes aux sends and return tracks for effects processing.
Read more
Raspa & Twine: Sushi integrates with lower-level drivers and subsystems through two dedicated libraries: Raspa, for interfacing with the custom audio driver, and Twine, to offer a high-level API into common real-time functions such as managing multiple real-time threads for multicore processing and accurate timers.
Custom Audio and Sensor Drivers: These drivers interface directly with hardware components (such as codecs, MCUs, etc.) included on the board selected for your specific product. To achieve the lowest possible latency, we avoid using standard Linux infrastructures in favor of custom drivers.
Elk Distribution: Obtaining an industrial-strength embedded Linux distribution can be challenging, especially if you want a system that is easily upgradeable, robust to random power-offs, and integrated with modern CI/CD tools. We have addressed all these aspects by developing our own custom distribution, leveraging modern tools from the Yocto Project to simplify these issues for you.
what you need to add.
Main Application: This is what connects all components in a specific device. For example, the logic for operations like “choose a different sound” or “use the LEDs on the front panel to display a VU Meter.” Since gRPC is supported by several languages, it’s possible to write this application in Python, JavaScript, Lua, etc., in addition to the conventional choice of C/C++.
Audio Plugins: Elk runs common audio formats (in SUSHI) such as VST2, VST3 & LV2, and the Elk Audio OS SDK allows existing software to be simply re-compiled for Elk.
Display UI: Elk does not provide a specific GUI framework to handle, e.g., a touchscreen display, but there are many popular and well-maintained solutions for this purpose. For example, Qt is a popular choice in many embedded devices