/extempore

An audiovisual livecoding environment

Primary LanguageScheme

Extempore is a new live-coding environment which borrows a core foundation from the Impromptu environment (http://impromptu.moso.com.au).  Extempore is named as a nod to the Impromptu project from which it was seeded. 

At this early stage in the project Extempore exists as a "developers" project and is not suitable for end-users.  Binaries will be made available when the project reaches a more *useable* state.  So if you are keen to join in at the ground level, please jump on in, but don't expect to be writing symphonies anytime soon!


Current Status:

At this initial release point Extempore is a very small project representing a small core largely taken from the Impromptu project.  In essence this means that the Impromptu language runtime (both the interpreter and the llvm compiler) are working, the task scheduler is in place and network comms are available (both the multi-user interpreter and Open Sound Control).  And that is ALL that is currently available.  To put this into some perspective - Impromptu currently has around 2000 public FFI bindings and Extempore currently has less than 40!

What this means in practice is:

(a) you can start an Extempore server and telnet in passing R5RS expressions for evaluation (and get a result).
(b) callback and now are defined allowing you to schedule the execution of functions (i.e. temporal recursion works)
(c) you can compile using definec.
(d) you can send and receive OSC messages.
(e) there is a basic extempore-mode for emacs.

Additionally there is rudimentary support for creating an opengl context and connecting to the default audio-device. This support is only in place to support rudimentary audiovisual programming using the compiler.  These additions mean that you can do some basic DSP and OpenGL programming using the compiler. They are provided as a base for future design and discussion.

And that is all that you can do at the present! In short, if I haven't mentioned it, Extempore can't yet do it.  The examples directory will give you an idea of some of the things that you *can* currently do.


Future Direction:

Who knows??

The purpose of this early release is to provide the most minimal - but working - baseline.  Much of the codebase was stripped from Impromptu and is currently *unclean* in the sense that it has been hacked into place without due regard to (a) good coding practice (b) clarity (c) documentation or (d) safety (exception handling, proper cleaning up and alike).  My purpose was to provide a minimal base from which future design and development could proceed - but always from a working baseline!  My hope is that by keeping the code base so small, and by deferring as many design decisions as possible, contributing developers will be able to easily assimilate the project as it currently stands and help to contribute more substantially to its future direction.  So now is a great time to jump onboard!


Open Source - Open Platform:

Extempore currently builds on both OSX and Linux platforms and should easily port to any UNIX environment.  The project intends to also extend to the Windows platform at some point in the not to distant future.

The project is released under a BSD style licence.

The source is available on GITHUB: http://github.com/digego/extempore


Community:

Please jump on in - there is loads to do - even if you're not a C/C++ developer!

I have started a google group called "Extempore" http://groups.google.com/group/extemporelang.  Joining this group is probably your best first step in getting involved.

Here is a list of just a few of the things off the top of my head that would be VERY useful short term contributions for people to make. 

1) Developer documentation.  Doco describing the overall layout of the system, the task scheduling system, the various FFI interfaces, any build requirements etc.. Of course I'm happy to help with this but it would be really great if someone could make a start on this *as they learn the system*.  That way the doco would be a practical guide from someone who is also going through the motions of learning their way around.  (also a good opportunity to clean up the code!)

2) End user documentation repo.  From experience with the Impromptu project it would be great if someone could start working on end-user documentation (particularly function documentation) right from the outset.  This means doco can be added as the system grows rather than tagging it on as an after thought.  I would be great to integrate the doco repository directly into the language infrastructure this time around.

3) At this stage Emacs is the only *supported* editor.  However, this support is extremely rudimentary.  It would be excellent if someone with some emacs hacking skills could ramp up the extempore.el.  It would be nice to have some of the features of impromptu's editor (better support for keyword highlighting, context sensitive tie in to the help system, tab-completion and alike)

4) Clean the code base.  As previously mentioned I've hacked this together quickly, the code is messy and really needs a significant *clean* - both a superficial one (tabs, spaces, layout etc.) and a more serious one (exception handling, resource handling etc.).  I'll do this over time but any help would be greatly appreciated.  If you're not a C/C++ wizard there is also lots of Scheme code that needs cleaning up!!  The Scheme code base is almost as large as the C/C++ one.  The source code is of course all available from GITHUB: http://github.com/digego/extempore

5) A proper build system - autoconf support etc..

6) Extempore will need new example files and screencasts.

7) Port to Windows.  Should be reasonably straight forward at the moment.

8) It would be great to get some kind of basic web site in place.

9) Most importantly there are many decisions to make in terms of development ideas and priorities so join the google group and get your hands dirty.


Finally:

Please remember that Extempore is currently a "development project" is is not a practical end-user project at the present time.