Ingen: A Meta-Modular Plugin Environment

Ingen: A Meta-Modular Plugin Environment
David Robillard
School of Computer Science
Carleton University
April 10, 2015
Introduction
Design
Applications
The Glorious Future
Overview
“Ingen”
I
Nobody? Nothing?
I
That company from Jurassic Park?
I
...
I
Instrument Generator, “engine”
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Overview
What is Ingen?
I
Ingen is a modular synth, effects processor, mixer, router,
MIDI processor, cheese grater, chain degreaser. . .
I
. . . a “modular”
I
Designed around LV2 plugins
I
Usable in many different contexts
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Overview
Features
I
Polyphonic
I
Recursive (graphs within graphs)
I
Many data types (including events like MIDI)
Strict client/server architecture
I
I
I
Real-time editable
Flexible deployment
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Philosophy
Philosophy
I
Do one thing and do it well
I
Integrate with the surrounding environment
I
Make use of existing facilities
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Philosophy
Existing Facilities?
I
Plugins!
I
Internals Considered Harmful
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Philosophy
Surrounding Environment
In the Lignux audio world, there are several choices:
I
JACK application
I
LV2 plugin
I
Network service
I
Physical device (e.g. MOD)
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Philosophy
Philausophy
I
Do one thing and do it well and do it with real-time safety
I
Keep GUIs at arm’s length
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Terminology
Terminology
Ingen contains:
I
Graphs
I
Blocks
I
Ports
I
Arcs
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Terminology
A Graph
ℝ̰
Note
Input
Frequency
ℝ̤ Number
ℝ̤ Velocity
ℝ̤
𝕄̤
Control
Gate
☐̤ Trigger
☐̤
ℝ̤
ℝ̤
𝕄̤
Bender
Pressure
Control
LPF
~ Input
~ Output
Exp FM
Lin FM
ℝ̰
ℝ̰
FM
Exp FM
ℝ̰
Sync
Octave
ℝ Tune
ℝ̰
Resonance Mod
ℤ
ℝ Input gain
ℝ̰
𝕄̤
Saw VCO
~ Output
Frequency
ℝ̰
ℝ Exp FM
ℝ Lin FM
ℝ Frequency
gain
gain
ℝ LP filter
ℝ Exp FM
ℝ Resonance
ℤ
Env
ℝ̰ Gate
ℝ̰ Trigger
gain
ℝ Resonance
gain
Filter poles
ℝ Output gain
ℝ̰
ℝ̰
Product
Multiplicand
Multiplier
ℝ̰ Product
~ Audio Out 1
ℝ Attack
Time
ℝ Decay Time
ℝ Sustain Level
ℝ Release
ℝ̰
David Robillard
Ingen: A Meta-Modular Plugin Environment
Time
Envelope Out
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Data Model / Protocol
Data Model
Everything is described in a simple data model:
I
All objects have a path, e.g. /amp/gain
I
Objects are a dictionary of properties (key:value)
I
Inherently extensible: keys can be added without breakage
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Data Model / Protocol
Data Model Example
A snippet of an Ingen graph:
</osc>
a
lv2:prototype
ingen:canvasX
ingen:canvasY
ingen:Block ;
<urn:someplugin> ;
42.0 ;
24.0 .
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Data Model / Protocol
Protocol
Ingen is controlled by manipulating the model:
I
I
Changes are based on property manipulation
Everything done with a few generic methods: get, set, put, . . .
I
I
Vaguely HTTP-like
No special “commands” for specific objects
I
I
No: block.move to(42, 0)
Instead: set block.x = 42, block.y = 0
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Data Model / Protocol
Simple Message Example
Moving a block on the canvas:
[
a
patch:subject
patch:property
patch:value
patch:Set ;
</osc> ;
ingen:canvasX ;
42.0 ;
]
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Data Model / Protocol
Slightly Less Simple Message Example
To add, or put, a new block:
[
a
patch:Put ;
patch:subject </osc> ;
patch:body [
a
ingen:Block ;
lv2:prototype <urn:someplugin> ;
ingen:canvasX 42.0 ;
ingen:canvasY 24.0 ;
]
]
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Data Model / Protocol
Who Cares?
I
Elegant correspondence between protocol and data model
I
Identical syntax used on the wire and in saved files
I
Conceptually simple
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Uses
No, really... who other than you cares?
I
I
Allows flexible deployment:
Ingen as server, network controlled from a different machine
I
I
Dump text protocol for a plain text log of activity
Run Ingen as an LV2 plugin, control via LV2 ports
I
I
I
Protocol in binary (LV2 atoms, native float, etc)
No shady underhanded communication
GUI talks to engine via ports like any LV2 plugin
I
Extensible, properties can be added freely
I
A few methods are capable of everything
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Uses
Scenarios
I
Need to put some non-linear in another host (e.g. Ardour
mixer strip)
I
Remote-controllable “glue” for a headless JACK box
Want to publish a plugin but can’t or don’t want to code
I
I
I
I
Ingen graphs are LV2 plugins
. . . literally. No special export, no compilation; the one and
only save format is LV2 compatible
Save to LV2 PATH (typically ~/.lv2) and graphs will be visible
in any LV2 host
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Graphs Whose Key Feature Is Fitting On One Slide
A Synth
ℝ̰
Note
Input
Frequency
ℝ̤ Number
ℝ̤ Velocity
ℝ̤
𝕄̤
Control
Gate
☐̤ Trigger
☐̤
ℝ̤
ℝ̤
𝕄̤
Bender
Pressure
Control
LPF
~ Input
~ Output
Exp FM
Lin FM
ℝ̰
ℝ̰
FM
Exp FM
ℝ̰
Sync
Octave
ℝ Tune
ℝ̰
Resonance Mod
ℤ
ℝ Input gain
ℝ̰
𝕄̤
Saw VCO
~ Output
Frequency
ℝ̰
ℝ Exp FM
ℝ Lin FM
ℝ Frequency
gain
gain
ℝ LP filter
ℝ Exp FM
ℝ Resonance
ℤ
Env
ℝ̰ Gate
ℝ̰ Trigger
gain
ℝ Resonance
gain
Filter poles
ℝ Output gain
ℝ̰
ℝ̰
Product
Multiplicand
Multiplier
ℝ̰ Product
~ Audio Out 1
ℝ Attack
Time
ℝ Decay Time
ℝ Sustain Level
ℝ Release
ℝ̰
David Robillard
Ingen: A Meta-Modular Plugin Environment
Time
Envelope Out
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Graphs Whose Key Feature Is Fitting On One Slide
Flexible I/O (Sidechains)
SC3
time (ms)
ℝ Release time (ms)
ℝ Attack
Amplifier
Gain
~ Input
ℝ̰
~ Sidechain
~ Output
ℝ Threshold level (dB)
ℝ Ratio (1:n)
ℝ Knee
radius (dB)
ℝ Makeup gain (dB)
𝕄̤
*̤
Control
Control
Synth
Control
~ Left Out
𝕄̤
~ Right Out
ℝ Chain balance
~ Sidechain
~ Left input
~ Right input
~ Left Out
~ Left output
~ Right output
~ Right Out
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Graphs Whose Key Feature Is Fitting On One Slide
MIDI Filtering
MDA DX10
MIDI Chord
MDA ePiano
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Things drobilla would rather be doing than what he gets paid to do
Mundane Improvements
I
Performance / memory consumption improvements
I
Better state/preset support
I
Stability, more rigorous testing
I
GUI polish
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University
Introduction
Design
Applications
The Glorious Future
Things drobilla would rather be doing than what he gets paid to do
Whiz-Bang
I
Control panel building (presentation mode)
I
Novel presentation of patching canvas? (Pies?)
I
Integrated online patch repository (MOD?)
I
Dynamic ports when running as LV2 plugin
I
Design plugin suite for message-based programming
I
Make it as simple as possible for users to publish “plugins”
David Robillard
Ingen: A Meta-Modular Plugin Environment
School of Computer Science Carleton University