Skip to content
A Just-in-time FAUST embedded in an LV2 plugin
C Python Objective-C C++ Meson CSS Other
Branch: master
Clone or download
Latest commit b4f5551 Jan 15, 2020
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
props.lv2 Merge commit '352b14a7447b88ccf5048110e249ae306ff408ea' Jun 19, 2019
screenshots readme: update dependencies and add screenshot. Jan 15, 2020
ser_atom.lv2 Merge commit 'a81ef84edcc18632075c0fbd1b727df261adf785' as 'ser_atom.… Mar 2, 2019
subprojects/d2tk Merge commit '5c7479fbe7202851171f17e2850787f962a24734' Jan 15, 2020
timely.lv2 Merge commit 'b3dbac4fbdd4cce853ecbd96631d8a16746fc62f' as 'timely.lv2' Jul 3, 2019
varchunk Merge commit '5b510382d88437f3b24347dc9377314585f4bdb0' Apr 3, 2019
.gitlab-ci.yml gitlab-ci: fix missing libfaust symlink. Jan 14, 2020
COPYING Squashed 'subprojects/d2tk/' content from commit 21dd749 Jan 12, 2020
ChangeLog release-0.6.0. Jan 15, 2020
FiraCode-Bold.ttf ui: start migration to d2tk ui. Nov 6, 2019
FiraCode-Light.ttf ui: start migration to d2tk ui. Nov 6, 2019
FiraCode-Medium.ttf ui: start migration to d2tk ui. Nov 6, 2019
FiraCode-Regular.ttf ui: start migration to d2tk ui. Nov 6, 2019
README.md readme: fix typo. Jan 15, 2020
VERSION readme: fix typo. Jan 15, 2020
bank-filter_gain.dsp dsp: update presets. Jan 15, 2020
bank-filter_through.dsp oursource FAUST DSP code into separate files. Jul 9, 2019
bank-instrument_osc.dsp release-0.6.0. Jan 15, 2020
bank-time_lfo.dsp dsp: update presets. Jan 15, 2020
libre-gui-exclamation-circle.png ui: add panic icon. Jan 14, 2020
lv2_external_ui.h initial commit. Mar 2, 2019
manifest.ttl.in update copyright years. Jan 14, 2020
mephisto.c dsp: separately handle 2 and 3 byte MIDI messages. Jan 14, 2020
mephisto.h update copyright years. Jan 14, 2020
mephisto.ttl.in update copyright years. Jan 14, 2020
mephisto_ui.c ui: support scaling for hi-DPI displays. Jan 15, 2020
mephisto_ui.ttl update copyright years. Jan 14, 2020
meson.build meson: remove superfluous dependencies. Jan 15, 2020
meson_options.txt ui: start migration to d2tk ui. Nov 6, 2019
presets.ttl.in update copyright years. Jan 14, 2020
private_ui.h update copyright years. Jan 14, 2020

README.md

Mephisto

a Just-in-Time FAUST compiler embedded in an LV2 plugin

Write LV2 audio/cv instruments/filters directly in your host in FAUST DSP language without any need to restart/reload host or plugin upon code changes.

Use it for one-off instruments/filters, prototyping, experimenting or glueing stuff together.

Note: This is an early release, it may thus have rough edges and will need a fairly recent libFAUST and/or bleeding edge GNU/Linux distribution.

Note: libFAUST 2.20.2 has a broken LLVM C-API and thus will be non-functional with this plugin.

Build status

build status

Binaries

For GNU/Linux (64-bit, 32-bit).

To install the plugin bundle on your system, simply copy the mephisto.lv2 folder out of the platform folder of the downloaded package into your LV2 path.

Stable release

Unstable (nightly) release

Sources

Stable release

Git repository

Packages

Bugs and feature requests

Plugins

Screenshot

Audio 1x1

1x1 Audio version of the plugin.

Prototype new audio filters and instruments in FAUST directly in your favorite running host, without the need to restart the latter after code changes.

Audio 2x2

2x2 Audio version of the plugin.

Prototype new audio filters and instruments in FAUST directly in your favorite running host, without the need to restart the latter after code changes.

Audio 4x4

4x4 Audio version of the plugin.

Prototype new audio filters and instruments in FAUST directly in your favorite running host, without the need to restart the latter after code changes.

Audio 8x8

8x8 Audio version of the plugin.

Prototype new audio filters and instruments in FAUST directly in your favorite running host, without the need to restart the latter after code changes.

CV 1x1

1x1 CV version of the plugin.

Prototype new CV filters and instruments in FAUST directly in your favorite running host, without the need to restart the latter after code changes.

CV 2x2

2x2 CV version of the plugin.

Prototype new CV filters and instruments in FAUST directly in your favorite running host, without the need to restart the latter after code changes.

CV 4x4

4x4 CV version of the plugin.

Prototype new CV filters and instruments in FAUST directly in your favorite running host, without the need to restart the latter after code changes.

CV 8x8

8x8 CV version of the plugin.

Prototype new CV filters and instruments in FAUST directly in your favorite running host, without the need to restart the latter after code changes.

Dependencies

  • LV2 (LV2 Plugin Standard)
  • FAUST (Faust Programming Language >=2.14.4)
  • OpenGl (OpenGl)
  • GLEW (GLEW)
  • VTERM (Virtual terminal emulator)

Build / install

git clone https://git.open-music-kontrollers.ch/lv2/mephisto.lv2
cd mephisto.lv2
meson build
cd build
ninja -j4
ninja test
sudo ninja install

UI

This plugin features a native LV2 plugin UI which embeds a terminal emulator which can run your favorite terminal editor to edit the plugin's FAUST source.

Currently, the editor has to be defined via the environment variable EDITOR:

export EDITOR='vim'
export EDITOR='emacs'

If no environment variable is defined, the default fallback editor is 'vi', as it must be part of every POSIX system.

Whenever you save the FAUST source, the plugin will try to just-in-time compile and inject it. Potential warnings and errors are reported in the plugin host's log and the UI itself.

On hi-DPI displays, the UI scales automatically if you have set the correct DPI in your ~/.Xresources.

Xft.dpi: 200

If not, you can manually set your DPI via environmental variable D2TK_SCALE:

export D2TK_SCALE=200

Controls

The plugin supports up to 16 controls implemented as LV2 Parameters. To have access to them, simply use one of FAUST's active control structures with ordering indexes (monitonically rising starting from 0) in their labels in your DSP code:

cntrl1 = hslider("[0]Control 0", 500.0, 10.0, 1000.0, 1.0);
cntrl2 = hslider("[1]Control 1", 5.0, 1.0, 10.0, 1.0);
cntrl3 = hslider("[2]Control 2", 0.5, 0.0, 1.0, 0.1);

MIDI and polyphony

The plugin supports building instruments with MIDI polyphony. For this to work you have to enable the MIDI option and declare amount of polyphony (maximum polyphony is 64).

The plugin automatically derives the 3 control signals:

  • gate (NoteOn vs NoteOff)
  • freq (NoteOn-note + PitchBend), honouring PitchBend range RPN 0/0
  • gain (NoteOn-velocity)
  • pressure (NotePressure aka polyphonic aftertouch)

Additionally, the following MIDI ControlChanges are supported:

  • SustainPedal
  • AllNotesOff
  • AllSoundsOff

Other MIDI events are not supported as of today and thus should be automated via the plugin host to one of the 16 control slots.

declare options("[midi:on][nvoices:32]");

freq = hslider("freq", 0, 0, 1, 0.1);
gain = hslider("gain", 0, 0, 1, 0.1);
gate = button("gate");
pressure = button("gate");
pressure = hslider("pressure", 0.0, 0.0, 1.0, 0.1);

cntrl1 = hslider("[0]Control 0", 500.0, 10.0, 1000.0, 1.0);
cntrl2 = hslider("[1]Control 1", 5.0, 1.0, 10.0, 1.0);
cntrl3 = hslider("[2]Control 2", 0.5, 0.0, 1.0, 0.1);

OSC

OSC events are not supported as of today and thus should be automated via the plugin host to one of the 16 control slots.

Time

The plugin supports LV2 time position events. To have access to them, simply use one of FAUST's active control structures with the corresponding time metadata in their labels in your DPS code and additionally enable the time option:

declare options("[time:on]");

barBeat = hslider("barBeat[time:barBeat]", 0.0, 0.0, 32.0, 1.0);
bar = hslider("bar[time:bar]", 0.0, 0.0, 400.0, 1.0);
beatUnit = hslider("beatUnit[time:beatUnit]", 1.0, 1.0, 32.0, 1.0);
beatsPerBar = hslider("beatsPerBar[time:beatsPerBar]", 1.0, 1.0, 32.0, 1.0);
beatsPerMinute = hslider("beatsPerMinute[time:beatsPerMinute]", 1.0, 1.0, 400.0, 1.0);
frame = hslider("frame[time:frame]", 1.0, 1.0, 400.0, 1.0);
framesPerSecond = hslider("framesPerSecond[time:framesPerSecond]", 1.0, 1.0, 96000.0, 1.0);
speed = button("speed[time:speed]");

License

Copyright (c) 2019-2020 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.

You can’t perform that action at this time.