Synthpod
Lightweight Nonlinear LV2 Plugin Container
Build status
Binaries
For GNU/Linux (64-bit, 32-bit, armv7)
To install the plugin bundle on your system, simply copy the synthpod folder out of the platform folder of the downloaded package into your LV2 path.
Unstable (nightly) release
Sources
Git repository
Packages
Bugs and feature requests
About
Synthpod is an LV2 host. It can be run as a standalone app and be used as a tool for live performances or general audio and event filtering.
It was conceptualized to fill the gap between pure textual (e.g. SuperCollider) and pure visual flow (e.g. Pure Data) audio programming paradigms.
Potential fields of application may include:
- Live audio synthesis
- Real-time event scripting
- Non-linear signal routing
- Advanced control automation
- Advanced event filtering
- Live mixing
- Live coding
- Algorithmic composition
- Interfacing to expressive controllers
The standalone host saves its state in the same format as an LV2 plugin instance,
It may be run on top of an audio system (JACK or ALSA) and on top of an event system (MIDI and OSC). It can be run with a GUI or headless. You can e.g. prepare a patch on your desktop machine and then transfer it to a wearable synth.
Synthpod takes a totally modular approach whereby it provides only the minimal necessary host infrastructure expected by a given plugin.
All additional, non strictly necessary glue shall be implemented with plugins. Synthpod e.g. can be extended with OSC via Eteroj. Sequencing and looping may be added via plugins from the Orbit bundle. When paired with realtime scripting via Moony, it turns Synthpod into a versatile realtime programmable, remote controllable LV2 host framework.
LV2 specifications support status
As Synthpod tries to be a lightweight LV2 host, it may not (fully) support the more exotic extensions. Get an up-to-date overview of current extensions support for Synthpod in the table below.
The full LV2 specification is located at http://lv2plug.in/ns/.
Specification | API | Description | Support status | Notes |
---|---|---|---|---|
Atom | atom | A generic value container and several data types. | Yes | |
Buf Size | buf-size | Access to, and restrictions on, buffer sizes. | Yes | |
Data Access | data-access | Provides access to LV2_Descriptor::extension_data(). | Yes | X11UI only |
Dynamic Manifest | dynmanifest | Support for dynamic data generation. | No | |
Event | event | A port-based real-time generic event interface. | Yes | |
Instance Access | instance-access | Provides access to the LV2_Handle of a plugin. | Yes | X11UI only |
Log | log | A feature for writing log messages. | Yes | |
LV2 | lv2core | An audio plugin interface specification. | Yes | |
MIDI | midi | A normalised definition of raw MIDI. | Yes | |
Morph | morph | Ports that can dynamically change type. | No | |
Options | options | Instantiation time options. | Yes | |
Parameters | parameters | Common parameters for audio processing. | data-only | |
Patch | patch | Messages for accessing and manipulating properties. | Yes | |
Port Groups | port-groups | Multi-channel groups of LV2 ports. | Yes | |
Port Properties | port-props | Various port properties. | data-only | |
Presets | presets | Presets for LV2 plugins. | Yes | |
Resize Port | resize-port | Dynamically sized LV2 port buffers. | Partial | no dynamic resize |
State | state | An interface for LV2 plugins to save and restore state. | Yes | |
Time | time | Properties for describing time. | Yes | |
UI | ui | LV2 plugin UIs of any type. | Yes | X11UI, Gt2kUI, Gtk3UI, Qt4UI, Qt5UI, Show/Idle-Interface, external-ui |
Units | units | Units for LV2 values. | Yes | |
URI Map | uri-map | A feature for mapping URIs to integers. | Yes | |
URID | urid | Features for mapping URIs to and from integers. | Yes | |
Worker | worker | Support for a non-realtime plugin worker method. | Yes |
Hosts
Currently the following hosts are contained in this software bundle:
- JACK
- ALSA
- DUMMY
JACK
Synthpod as host built on top of JACK with support for native JACK audio, MIDI, OSC and CV in/out ports. The right choice on GNU/Linux for modular setups.
This standalone host supports NON session management to neatly integrate into modular setups.
ALSA
Synthpod as host built on top of ALSA with support for native ALSA audio and MIDI sequencer in/out ports. The right choice on GNU/Linux for live setups, embedded devices or when you don't need audio routing to other apps.
This standalone host supports NON session management to neatly integrate into modular setups.
DUMMY
Synthpod as host built on top of a dummy driver, mainly useful for debugging purposes.
This standalone host supports NON session management to neatly integrate into modular setups.
Plugins
Control to CV
Convert between Control Voltage and control ports.
CV to Control
Convert between Control Voltage and control ports.
Heavyload
Just burn CPU cycles away for debugging.
Keyboard
A rudimentary graphical keyboard with a 2 octave range, mainly meant for simple test cases.
MIDI splitter
Split MIDI events based on their channel.
Panic
Silence MIDI downstream plugins upon panic.
Stereo
The Synthpod LV2 non-linear plugin container run as a plugin itself in an other host or itself. It features stereo audio in/out ports, atom event in/out ports and 4 control in/out ports.
Use this to add support for non-linear plugin routing in a strictly linear host.
Usage
Server - client
Synthpod comes as server - client combo, e.g. the server doing the DSP side of things runs in its own process and the client showing the GUI side of things runs in its own process.
By default, synthpod just runs the server. There's a command line argument to automatically run the GUI, if you want. Please consult the manual page to find out more.
GUI
Mouse actions
-
Plugin actions:
- Mouse-over: show connections
- Right-click: toggle selection
- Left-click-down: start connecting
- Left-click-up: end connecting
-
Connection matrix actions:
- Mouse-over: show connections
- Right-click: toggle selection
- Left-click: toggle connection
- Mouse-wheel: toggle connection
Key actions
- a: (de)select all nodes
- b: start drawing selection box
- g: start moving selected nodes
- v: toggle plugin GUIs of selected nodes
- x: remove selected nodes
- i: reinstantiate selected nodes
Mandatory dependencies
- LV2 (LV2 plugin specification)
- lilv (LV2 plugin host library)
- sratom (LV2 atom serialization library)
Optional dependencies for JACK backend
- JACK (JACK audio connection kit)
Optional dependencies for ALSA backend
- ALSA (Advanced Linux Sound Architecture)
- zita-alsa-pcmi (ALSA PCM high-level API)
Optional dependencies for plugin UIs
- libxcb (X protocol C-language Binding)
- Gtk2 (cross-platform UI toolkit)
- Gtk3 (cross-platform UI toolkit)
- Qt4 (cross-platform UI toolkit)
- Qt5 (cross-platform UI toolkit)
Build / install
git clone https://git.open-music-kontrollers.ch/lv2/synthpod
cd synthpod
meson build
cd build
ninja -j4
sudo ninja install
License (everything but synthpod_alsa)
Copyright (c) 2015-2016 Hanspeter Portner ([email protected])
This is free software: you can redistribute it and/or modify it under the terms of the Artistic License 2.0 as published by The Perl Foundation.
This source is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Artistic License 2.0 for more details.
You should have received a copy of the Artistic License 2.0 along the source as a COPYING file. If not, obtain it from http://www.perlfoundation.org/artistic_license_2_0.
License (synthpod_alsa only)
Copyright (c) 2015-2016 Hanspeter Portner ([email protected])
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.