Extempore Docs

This blog contains a bunch of posts and tutorials covering Extempore, a programming environment for live coding of multimedia and real-time systems (among other things). If you're here to learn/find out more about Extempore, then here's an overview of all the documentation and some suggestions about where to start. This list is hand-curated to provide the best 'journey' through the concepts necessary to begin using Extempore in anger.

Alternately, there's an automatically-generated tags page which also allows you to browse by category.

If anything isn't clear, or you have suggestions/corrections, then drop me a line at benjamin.j.swift@gmail.com.

Getting started

Here's some help to get you up and running with Extempore, right from the beginning steps.

xtlang reference material

xtlang is a strongly-typed programming language with a Lisp syntax which is JIT-compiled into high-performance native machine code by the Extempore compiler (with the help of LLVM). xtlang is in many ways Extempore's 'secret sauce', and most of the code examples in this documentation will be in xtlang.

Audio

Extempore is a great environment for audio DSP and number-crunching, particularly in a dynamic, interactive, 'live' coding context. It supports low-level, sample-based DSP as well as soft-synths and samplers (written in xtlang) which can be played like virtual MIDI instruments. Both types of audio processing can also be used together—in fact this is encouraged :)

Relevant examples

  • examples/core/audio_101.xtm
  • examples/core/polysynth.xtm
  • examples/core/fmsynth.xtm
  • examples/external/electrofunk.xtm
  • examples/external/audio_player.xtm
  • examples/external/convolution_reverb.xtm

Graphics

Extempore supports working with graphics at several different levels of abstraction. You can use low-leve OpenGL calls, or you can use the higher-level 2D or 3D graphics libraries. And again, because everything's in xtlang, you can mix-and-match!

2D

2D graphics primitives (like Quartz, Processing or Cairo) can be found in libs/external/openvg.xtm. For an example of this stuff in action, check out examples/external/openvg.xtm.

3D

Extempore has a 3D drawing pipeline written in xtlang, which supports blender models, lighting (and other custom shaders) and scene-graph type rendering. And because it's all written in xtlang, the whole pipeline itself is dynamic and tweakable on the fly.

The best place to see the 3D rendering pipeline in action is in the xtmrender examples in examples/external/.

  • OpenGL basics
  • 2D drawing with cairo
  • 3D rendering and meshes with Horde3D
  • Image processing with GLSL shaders

Getting help

The mailing list and google group are good places to start, or you could see if we're on the #extempore freenode channel.