Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf ·...

23
Ingen: A Meta-Modular Plugin Environment David Robillard School of Computer Science Carleton University April 10, 2015

Transcript of Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf ·...

Page 1: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Ingen: A Meta-Modular Plugin Environment

David Robillard

School of Computer ScienceCarleton University

April 10, 2015

Page 2: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Overview

“Ingen”

I Nobody? Nothing?

I That company from Jurassic Park?

I . . .

I Instrument Generator, “engine”

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 3: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

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 School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 4: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Overview

Features

I Polyphonic

I Recursive (graphs within graphs)

I Many data types (including events like MIDI)I Strict client/server architecture

I Real-time editableI Flexible deployment

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 5: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

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 School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 6: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Philosophy

Existing Facilities?

I Plugins!

I Internals Considered Harmful

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 7: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

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 School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 8: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

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 School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 9: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Terminology

Terminology

Ingen contains:

I Graphs

I Blocks

I Ports

I Arcs

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 10: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Terminology

A Graph

NoteInput�̤�

Frequencyℝ̤

Numberℝ̤

Velocityℝ̤

Gate☐̤

Trigger☐̤

Benderℝ̤

Pressureℝ̤ EnvGateℝ̰

Triggerℝ̰

Attack Timeℝ

Decay Timeℝ

Sustain Levelℝ

Release Timeℝ

Envelope Outℝ̰

LPFInput~

Output~

FMℝ̰

Exp FMℝ̰

Resonance Modℝ̰

Input gainℝ

Frequencyℝ

Exp FM gainℝ

Resonanceℝ

Resonance gainℝ

Filter polesℤ

Output gainℝProduct

Multiplicandℝ̰

Multiplierℝ̰

Productℝ̰

Saw VCOOutput~

Frequencyℝ̰

Exp FMℝ̰

Lin FMℝ̰

Syncℝ̰

Octaveℤ

Tuneℝ

Exp FM gainℝ

Lin FM gainℝ

LP filterℝControl�̤�

Control�̤�

Audio Out 1~

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 11: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

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 School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 12: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Data Model / Protocol

Data Model Example

A snippet of an Ingen graph:

</osc>

a ingen:Block ;

lv2:prototype <urn:someplugin> ;

ingen:canvasX 42.0 ;

ingen:canvasY 24.0 .

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 13: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Data Model / Protocol

Protocol

Ingen is controlled by manipulating the model:

I Changes are based on property manipulationI Everything done with a few generic methods: get, set, put, . . .

I Vaguely HTTP-like

I No special “commands” for specific objectsI No: block.move to(42, 0)I Instead: set block.x = 42, block.y = 0

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 14: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Data Model / Protocol

Simple Message Example

Moving a block on the canvas:

[

a patch:Set ;

patch:subject </osc> ;

patch:property ingen:canvasX ;

patch:value 42.0 ;

]

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 15: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

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 School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 16: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

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 School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 17: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Uses

No, really... who other than you cares?

I Allows flexible deployment:I Ingen as server, network controlled from a different machine

I Dump text protocol for a plain text log of activity

I Run Ingen as an LV2 plugin, control via LV2 portsI Protocol in binary (LV2 atoms, native float, etc)I No shady underhanded communicationI 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 School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 18: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Uses

Scenarios

I Need to put some non-linear in another host (e.g. Ardourmixer strip)

I Remote-controllable “glue” for a headless JACK boxI Want to publish a plugin but can’t or don’t want to code

I Ingen graphs are LV2 pluginsI . . . literally. No special export, no compilation; the one and

only save format is LV2 compatibleI Save to LV2 PATH (typically ~/.lv2) and graphs will be visible

in any LV2 host

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 19: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Graphs Whose Key Feature Is Fitting On One Slide

A Synth

NoteInput�̤�

Frequencyℝ̤

Numberℝ̤

Velocityℝ̤

Gate☐̤

Trigger☐̤

Benderℝ̤

Pressureℝ̤ EnvGateℝ̰

Triggerℝ̰

Attack Timeℝ

Decay Timeℝ

Sustain Levelℝ

Release Timeℝ

Envelope Outℝ̰

LPFInput~

Output~

FMℝ̰

Exp FMℝ̰

Resonance Modℝ̰

Input gainℝ

Frequencyℝ

Exp FM gainℝ

Resonanceℝ

Resonance gainℝ

Filter polesℤ

Output gainℝProduct

Multiplicandℝ̰

Multiplierℝ̰

Productℝ̰

Saw VCOOutput~

Frequencyℝ̰

Exp FMℝ̰

Lin FMℝ̰

Syncℝ̰

Octaveℤ

Tuneℝ

Exp FM gainℝ

Lin FM gainℝ

LP filterℝControl�̤�

Control�̤�

Audio Out 1~

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 20: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Graphs Whose Key Feature Is Fitting On One Slide

Flexible I/O (Sidechains)

AmplifierGainℝ̰

Input~

Output~

SC3Attack time (ms)ℝ

Release time (ms)ℝ

Threshold level (dB)ℝ

Ratio (1:n)ℝ

Knee radius (dB)ℝ

Makeup gain (dB)ℝ

Chain balanceℝ

Sidechain~

Left input~

Right input~

Left output~

Right output~

SynthControl�̤�

Left Out~

Right Out~

Control�̤�

Control*̤

Sidechain~

Left Out~

Right Out~

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 21: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

Introduction Design Applications The Glorious Future

Graphs Whose Key Feature Is Fitting On One Slide

MIDI Filtering

MDA DX10

MDA ePiano

MIDI Chord

David Robillard School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 22: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

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 School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment

Page 23: Ingen: A Meta-Modular Plugin Environmentlac.linuxaudio.org/.../lac2015_ingen_presentation.pdf · 2015-04-10 · In the Lignux audio world, there are several choices: I JACK application

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 School of Computer Science Carleton University

Ingen: A Meta-Modular Plugin Environment