All Projects → OpenMusicKontrollers → synthpod

OpenMusicKontrollers / synthpod

Licence: Artistic-2.0 License
Lightweight Nonlinear LV2 Plugin Container

Programming Languages

c
50402 projects - #5 most used programming language
C++
36643 projects - #6 most used programming language
objective c
16641 projects - #2 most used programming language
Meson
512 projects
python
139335 projects - #7 most used programming language
Makefile
30231 projects

Synthpod

Lightweight Nonlinear LV2 Plugin Container

Build status

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.

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(). 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

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].