Skip to content
Lightweight Nonlinear LV2 Plugin Container
C C++ Objective-C Meson Python Makefile Other
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app idisp: trigger first render immediatley after init. Aug 1, 2019
ardour.lv2 conceptualize inline display implementation. Oct 4, 2016
bin
bundle meson: use configure_file instead of cp/clone. Jul 31, 2019
canvas.lv2 Merge commit '867288e35dbe7e8ddc848fa8332a87522565d228' Apr 7, 2019
cross_clock Merge commit 'd482d40ca94d8470023770d7a5ffe90f2771ccfb' Jan 5, 2018
data date: update application icon. Jun 4, 2018
ext_ui.lv2 remove eo_ui.lv2 helper. Apr 3, 2016
include app: spin up all cores after an Xrun. Jul 31, 2019
jackey Add 'jackey/' from commit 'c1561917f9850206ff208c529234273623ebbefa' Mar 26, 2016
lfrtm Merge commit '4ebde8ef7da74b5d1fff5773f5fc740c39b8fea8' Apr 3, 2019
mapper.lv2 Merge commit 'd72a06b5b96d9d6a2d9f34a0a07ed86372031ff4' Apr 3, 2019
netatom.lv2 Merge commit '865fccc7ad41570995b0f8f6f7dc11bb16f0f809' Apr 3, 2019
nk_pugl Merge commit '8d4286fa5c1d6d0870319d15117fb6ae17853697' into meson Apr 11, 2018
nsmc bin: deprecate JACK session, add NSM switch-mode. Jul 28, 2019
nuklear Merge commit '7e5ebc1d9d4144ea9f1a5e02cb98a5794bd4d2db' Mar 25, 2018
osc.lv2 Merge commit '41a576e7bb3206333fdfbd7f9220c6c4bede2c13' Apr 3, 2019
plugins nk: give UI IPC 1s before subscribing to ports. Sep 12, 2019
props.lv2 Merge commit '0eba5d0e4f6b1346c48d05bfb65ec4f4cb8cfdac' Apr 12, 2019
pugl
sandbox_ui.lv2 nk: give UI IPC 1s before subscribing to ports. Sep 12, 2019
screenshots update readme. Apr 2, 2019
subprojects/d2tk Merge commit 'feae659b9fb4960e8280fe2bd978dfb9c5be2aea' Aug 9, 2019
varchunk Merge commit 'bead8c66f99ff0995696665a5e6f2bcf7d9dd654' Apr 3, 2019
xpress.lv2 Merge commit '092fcceae12e1bcd1b38159a38add4ae36b7078d' Apr 12, 2019
.gitignore implement synthpod_alsa and commonize code. Sep 11, 2015
.gitlab-ci.yml gitlab: add missing libraries. Jul 23, 2019
API.md
COPYING Squashed 'subprojects/d2tk/' content from commit e055e67a Jul 22, 2019
README.md bin: deprecate JACK session, add NSM switch-mode. Jul 28, 2019
VERSION nk: give UI IPC 1s before subscribing to ports. Sep 12, 2019
meson.build meson: add lv2_validate/lv2lint test targets. Jul 31, 2019
meson_options.txt meson: prepare for d2tk inclusion. Jul 22, 2019
stoat.whitelist

README.md

Synthpod

Lightweight Nonlinear LV2 Plugin Container

Build status

build status

Binaries

For GNU/Linux (64-bit, 32-bit, armv7), Windows (64-bit, 32-bit) and MacOS (64/32-bit univeral).

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.

Synthpod screenshot

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(). No won't, ever
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. No won't, ever
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

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 (dev@open-music-kontrollers.ch)

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 (dev@open-music-kontrollers.ch)

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/.

You can’t perform that action at this time.