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
© Copyright 2024