Welcome!
You’ve reached Albert Gräf’s presence on Github. I’m a computer scientist and mathematician working at the Johannes Gutenberg University (JGU) at Mainz, Germany. Here you can find pointers to the source code and documentation of my functional programming language Pure and some related projects, as well as some other 3rd party projects I’m involved in, most notably Jonathan Wilkes’ Purr Data. In particular, there’s also some software for Faust, Grame’s functional dsp programming language, Lua, PUC Rio’s nifty little script language, Pd, Miller Puckette’s graphical computer music and multimedia environment, and Dave Robillard’s LV2, the new audio and MIDI plugin standard for Linux and other Unix systems.
Please note that this site is in a perpetual state of construction, and also serves as a grab bag for various other side projects. I will hopefully turn it into a full website some time, but for the time being, here’s a brief overview of the available projects. (Most of my projects are on Github these days, but some of the older stuff is still hosted on Bitbucket.)
The Pure programming language
This is one of my flagship projects, a functional programming language based on term rewriting featuring an LLVM JIT compiler backend and a fairly extensive collection of add-on modules. The project has been somewhat dormant in the past few years, as I’ve been working on other things, and it requires the old LLVM 3.5 version, but it’s still perfectly usable. I’d say that there’s nothing else quite like it in the crowded space of modern programming languages, so give it a try!
-
The pure-lang source code repository has the source code of the Pure programming language interpreter and various addon modules. In particular, there are the pd-pure and pd-faust modules which let you run Pure and Faust programs as Pd externals.
-
For beginners, I recommend the Pure Quick Reference guide which provides a (relatively) quick overview of the language. Also, the Pure Language and Library Documentation is available in html and pdf format.
-
sublime-pure provides Pure language support for the Sublime Text editor.
-
The pygments-lexer-pure addon lets you highlight Pure syntax using Pygments.
Purr Data
Another flagship project that I contribute to is Jonathan Wilkes’ Purr Data, which is a flavor of Miller Puckette’s venerable Pd with a modern GUI and lots of bundled externals. Purr Data is a cross-platform version of Ico Bukvic’s Pd-l2ork, which in turn was forked from Hans-Christoph Steiner’s (popular, but discontinued) Pd-extended.
If you have been looking for a modern successor to Pd-extended, this is it. I’ve been using Purr Data in pretty much all my university courses since 2016, contributed a few bits and pieces over the years, and serve as co-developer, release master and Linux package maintainer in the project.
My Purr Data Github mirror provides a one-stop shop to make it easy for you to get your hands on the latest source and the available releases, including pre-built packages for Linux (maintained on the OBS), macOS, and Windows.
The computer music and multimedia corner
Most of the software you’ll find here is still written in Pure and/or C/C++. Recently I also started porting old and writing new software in the Lua language, which has a lighter runtime and is easier for beginners than Pure. Please note that with such a diverse software portfolio, the burden of maintenance becomes substantial, and thus I can’t possibly keep these updated at all times. If you find any issues with any of my projects, please submit a bug report (or, preferably, a pull request).
- New: algodrum is an algorithmic drum machine based on Clarence Barlow’s theory of meter and rhythm. It is implemented as a Pd patch, and includes some externals written in Lua, so you’ll need Pd and Pd-Lua (0.11 or later).
- New: apcmini is a Pd external written in Lua which facilitates programming the AKAI APC mini. It works with both the original version and the mk2 version of the device, and handles most of the required plumbing for the softkey and fader functionality, as well as the grid button colors on the device. Two applications are included: ardour-clip-launcher.pd, an Ardour clip launcher; and koala-sampler.pd, a control surface for Marek Bereza’s popular Koala Sampler application.
- New: ardour-lua is a collection of Lua scripts to be used with Ardour. In particular, it contains some arpeggiator plugins, including an Ardour implementation of Raptor (also see the Raptor package below).
- faust-lv2 is my latest and greatest version of the LV2 plugin architecture for the Faust programming language. This gives you a convenient way to create LV2 effect and instrument plugins from Faust programs.
- New: joyosc-pd, a cross-platform solution for interfacing to game controllers via Pd’s OSC interface. Requires either Dan Wilcox’ joyosc program or hexler’s TouchOSC to handle the gamepad to OSC conversion. Also needs pd-lua for the joystick visualization in the main patch.
- New: koala-launchpad, two other control surfaces for Koala Sampler in Pd patch form, this interfaces to the Novation Launchpad Pro (mk3) and the Launch Control XL (mk2) controllers.
- mdnsbrowser is a Zeroconf external for Pd written in Lua+C, which lets you discover and publish services in the local network, so that your Pd patches can establish network connections in an automatic fashion. This is an update for my (outdated) pd-mdnsbrowser package which was written in Pure. The new version is now written in Lua for easier installation, and thus requires pd-lua to run (see below). Prebuilt binaries for ARM/Intel Macs and Windows are available.
- midizap translates Jack MIDI input to X11 keyboard and mouse events as well as MIDI output, so that you can use it to operate your favorite multimedia applications such as audio and video editors and DAW software. Note that midizap requires X11 and thus some kind of Unix system. It is a much enhanced version of my own fork of Eric Messick’s ShuttlePRO program (see the “Grab Bag” below) which provides similar functionality for the Contour Design Shuttle devices. An Arch PKGBUILD is available in the AUR.
- myblocks is a simple C+Lua interface and Pd external for the BLOCKS SDK. This module lets you manage and control the Roli BLOCKS devices in Linux. The Pd external is written in Lua and thus requires Pd-Lua (see below). The build system currently targets Linux and requires gcc and GNU make, but the code should work on any platform supported by JUCE and thus porting to Mac or Windows should be a piece of cake.
- pd-faustgen2 or, as we call it, the “Faust compiler in a box”, is an extensive update of Pierre Guillot’s pd-faustgen which brings its feature set up to par with pd-faust as well as Grame’s faustgen for Max. This is an alternative Faust plugin for Pd which offers some important advantages over pd-faust, most notably JIT compilation of Faust programs using Faust’s LLVM backend, and support for recent LLVM versions. If you’re starting out with using Faust in Pd, this is the plugin we recommend.
- pd-jacktime is a Pd external written in Lua which provides a basic interface to the Jack transport client API. This lets you sync your Pd patches to Jack time masters such as Ardour and Hydrogen. Requires pd-lua (and Jack, of course). An Arch PKGBUILD is available in the AUR.
- pd-lua is a fork of umlaeute’s repository, which in turn is based on Claude Heiland-Allen’s original version. This lets you program Pd externals in the Lua scripting language. Our version is still backward-compatible with earlier pd-lua versions, but is actively maintained, supports Lua 5.3 and 5.4, and offers various new features and bugfixes. An Arch PKGBUILD is available in the AUR, and official Arch packages are in the Arch community repository (thanks, David!). Included in Purr Data as of version 2.5. Prebuilt binaries for ARM/Intel Macs and Windows are available for use with vanilla Pd. Moreover, this version is now also available in Deken (Pd’s package manager) thanks to Ben Wesh.
- pd-lv2plugin is an LV2 plugin host for Pd, written in Pure. It provides a Pd external
lv2plugin~
which lets you run LV2 audio and MIDI plugins in Pd. - New: pd-remote lets you control your Pd patches remotely using Emacs. This is a simplified and unified version of the Pd remote control helpers that I’ve been distributing with various Pd externals over the years. It has built-in support for pd-faustgen2 (using Emacs faust-mode) and pd-lua (using lua-mode), adding various convenient keybindings for reloading programs and scripts, and other useful messages to be sent from Emacs to Pd. NB: If you’re not into Emacs, do not despair! Baris Altun has come to the rescue and created a VS Code extension which can be used in lieu of the Emacs support.
- pd-smmf: Documentation and examples for the Pd “Simple MIDI Message Format”, a symbolic MIDI representation in Pd message format. This is used by most of my Pd externals using MIDI in some way, but is useful in its own right if you need to pass around MIDI data in Pd. Two abstractions midi-input.pd and midi-output.pd are included to translate between Pd’s built-in MIDI I/O and SMMF. (These abstractions are just plain Pd patches which require no additional software to work, but the other examples included in the package require either pd-lua or pd-pure.)
- pd-touchosc is a TouchOSC MIDI bridge written in Pure. This is a collection of Pd externals and patches which make it easy to interface Pd to TouchOSC, an OSC and MIDI control surface for Android and iOS devices. Please note that this has mostly been superseded by Spencer Jackson’s osc2midi and my osc2midi-utils package (see the “Grab Bag” below).
- The Pure LAC09 examples are back! You can also download them as a tarball or a zip archive again. These are the accompanying materials for my presentation “Signal Processing in the Pure Programming Language” at the Linux Audio Conference 2009 at Parma, with some minor touches for compatibility with present-day Pure. They were originally on Pure’s GoogleCode page, but got lost when GC closed its doors. Since the paper and the accompanying materials are still valid and may still be useful for Pure users, they have found a new home on Github now.
- Raptor: An aleatoric arpeggiator and real-time algorithmic composition program based on the mathematical music theories of the contemporary composer and pioneer of computer music Clarence Barlow. Now at version 7, which is the most recent Lua-based version. (The program is implemented as a Pd patch, but the algorithmic composition core is written in Lua, so you’ll need pd-lua to run the patch.) NOTE: An Ardour implementation of Raptor is now also available, please check the ardour-lua package above.
- Scale is my graphical musical scale visualization and rationalization program. Like the Raptor patch from above, it is based on Barlow’s theories, and written in Lua. (Unlike Raptor, however, this program also needs a bunch of 3rpd party dependencies and is only known to run on Linux at present.) The program reads and writes files in Manuel Op de Coul’s Scala format, and like the sclsyx program discussed below it can export scales as sysex files in the MIDI Tuning Standard (MTS) format, which can be used to tune MTS-compatible synthesizers such as Fluidsynth.
- sclsyx is a little Pure script which helps you create MIDI Tuning Standard (MTS) sysex or MIDI files from musical tunings in Manuel Op de Coul’s Scala format. It can also print the sysex messages in a human-readable format on the terminal, from where you can copy and paste the data into DAWs which support manual entry of sysex messages. This program is also available as a Pd external in the pd-smmf package, see above.
- xwiimote-lua is a Pd external written in Lua which provides easy access to the Wii Remote on Linux, using the xwiimote library. (The package also includes a little Lua wrapper of libxwiimote which may be useful to Lua programmers who don’t run Pd but are looking for a way to access the Wii Remote from Lua.)
The Grab Bag
Here are some other related ports and utilities, as well as links to 3rd party software which you may find useful.
-
apcmini-ardour: These are my Ardour bindings for the AKAI APCmini controller which turn the APCmini into a useful DAW controller. There’s a little pdf manual available. (This is now largely obsolete with the advent of the midizap program which also includes a Mackie emulation for the APCmini, see above.)
-
EZ-AG is a Pd patch which aims to make it easier to use Yamaha’s “learning guitar”, the Yamaha EZ-AG, as a MIDI controller. Also works with the Jamstik. Best used with Purr Data.
-
Peter G. Baum’s Gnocl provides GTK+ and Gnome version 2 bindings for Tcl. This is an older 3rd party project, but still extremely useful. I link to this here because I often use Gnocl for my graphical applications, so it’s needed as a dependency. Since Gnocl binaries can be hard to find these days, I also maintain packages in the AUR (Arch User Repositories) and the OBS (Open Build Service). There you can find Arch and Debian/Ubuntu packages for Gnocl itself, as well as the Gnocl Builder, Canvas, and GConf add-on modules. (Note that some of the required system libraries are no longer supported on recent Debian and Ubuntu releases, hence some of the Gnocl add-on modules might not be available on these systems. The core Gnocl package should always be available, though, and this will be enough for most Gnocl applications.)
-
New: Marek Bereza’s Koala Sampler is easily one of the niftiest and most popular Android and iOS sampler apps of the past few years, and various alpha and beta versions exist for Linux, Mac, and Windows. Koala is easy to use while offering advanced functionality on par with (much more expensive) hardware samplers. Recently, while playing around with it, I’ve created a few Pd controller patches which let you control Koala with various controllers from AKAI and Novation (see the apcmini and koala-launchpad projects above).
-
lua-octave and lua-tk are ports of my corresponding Pure modules, providing Lua bindings for Octave and Tcl/Tk. Octave has an extensive numeric library which lets you do scientific computations with ease. Tcl/Tk is great for knocking out graphical user interfaces, and can also be used to create good-looking GTK+ GUIs using Gnocl, see above. I did these modules to facilitate porting applications from Pure to Lua. Both modules can be installed using either luarocks or a plain old
make install
. Lua examples are included in the source. I couldn’t find any similar Lua modules in the usual places, so if you’re a Lua programmer then you may find these as useful as I do. -
osc2midi-utils is a collection of utilities to deal with TouchOSC layouts and osc2midi map files. Currently it offers a converter from TouchOSC layouts to osc2midi map files and a graphical frontend to the osc2midi program, Spencer Jackson’s configurable OSC-(Jack)MIDI bridge written in C. Requires Pure, as well as Tcl/Tk and Gnocl (see above).
-
rigkontrol is a Pd patch which translates control signals from Native Instrument’s Guitar Rig Kontrol foot switch to MIDI CC. You’ll find this patch useful if you have a Rig Kontrol device lying around which you want to put to good use by hooking it up to your DAW or other MIDI-capable hard- and software. No special externals or addons are required, so the patch should work with any Pd flavor out there. Only the Rig Kontrol 1 (the original blue one) is supported right now, but adjusting the patch to later GR Kontrol versions should be a piece of cake. :)
-
ShuttlePRO is a user program for interpreting input from a Contour Design Shuttle device. This is a fork of nanosyzygy’s original version which adds many enhancements such as Jack MIDI support, so that the device can also be used as a MIDI controller. An Arch PKGBUILD is available in the AUR.
-
VTK by Kitware is a powerful software library for 3D computer graphics, image processing, and scientific visualization. Like Gnocl, it is used in some of my programs, and so I provide ready-made packages for Arch in the AUR, and for Debian/Ubuntu at the OBS. The version provided there is the older 6.3 version, which still includes the full set of VTK Tcl libraries. These are needed to use VTK in programming environments which are not directly supported by VTK, but have their own Tcl interface, such as Lua and Pure. The package can be installed alongside other VTK versions if needed.
Notes
The Faust-related software has been tested and is known to work with recent Faust versions available in the Faust git repository. For the Lua modules and externals we recommend Lua 5.3 or later (some of them such as pd-lua may also still work with Lua 5.2, but no guarantees). The Pd externals have been tested and work with both vanilla Pd and with the pd-extended, pd-l2ork and purr-data distributions. (A few of the newer patches may require the latest and greatest purr-data to work properly, but this is mentioned on the corresponding project pages.)
Source tarballs and binary packages for Pure and related projects can be found on the Download page of the Pure project.