Impromptu is a freeware Mac OS X
programming environment for composers, sound
artists, VJs and graphic artists with an interest in
live or interactive programming. Impromptu is a
Scheme language environment, a member of the Lisp
family of languages.
New Additions in 2.1:
- Clock: Impromptu now
supports a (clock) function that returns
real-world time *now* from the system clock. Two
additional functions convert to and from
impromptu's standard sample time
(clock->samples) and (samples->clock). clock
returns the time in seconds and parts of seconds
since Jan 1 2001.
- Spaces: Spaces is a new
implementation of Tuple Spaces for impromptu.
The idea of tuple spaces originated with the
Linda language in the mid 1980s and provides a
mechanism for a distributed, associative, shared
memory. Spaces provides a mechanism for sharing
memory and synchronized concurrency control
across processes and remote hosts. There is a
new example file 58_spaces.scm that outlines
spaces in much more detail. Spaces lives in the
pseudo namespaces spaces. Spaces is particularly
well suited, and was implemented primarily for,
the purposes of sharing state between multiple
performers during a livecoding performance.
- TCP: Much improved TCP
support with the ability to now build custom TCP
server/client code much more easily. See help
io:tcp for more details.
- IPC: Interprocess
communication has been tidied up with some
significant bug fixing and feature improvements.
In particular the IPC mechanism now supports
synchronous messaging by default, returning a
value to the caller. IPC is now a top level
pseudo namespace - ipc:. ipc:call now defaults
to synchronous behavior waiting for a returned
result just as any normal scheme call would.
ipc:call-async now provides the asynchronous
version (that does not wait for a result). IPC
can still not send Objective-C objects natively
- however, you can now serialize objc objects to
strings which can be sent over IPC.
Additionally, a bug fix, (ipc:new-process) now
blocks until it is properly initialized.
- "Event" Logging: You can
now receive a callback for every evaluated
expression. This allows you to (a) record a log
of activity for future playback or (b) pass all
expressions through IPC for evaluation in
another process (potentially on a remote machine
Other Changes and Additions:
- Improved access for programmatic changes to
the text buffer through sys:get-text-buffer and
- The log now displays the code context in
which the error occurred (or TOPLEVEL if the
error did not occur within the context of a
closure). A stop gap until Impromptu grows up
and gains proper debug support. Hopefully the
additional code context which now gets printed
on error conditions will provide some additional
help when debugging.
- io:midi-in can now operate within any
available process but must be registered before
it will start receiving messages. You must now
register before impromptu's input ports (both
virtual and standard) start listening for
events. (io:midi-register-events [process name])
process name is optional (defaults to "primary
process". See example_05 for more details.
- A regular expression predicate is now
available (regex-match string regex-str).
- gl:draw-ciimage provides a mechanism for
drawing ciimages directly into an opengl
- There have been a couple of OSC changes. osc
namespace io:osc:send io:osc:receive etc. io:osc-register-events
has now changed to io:osc:start-server. By
default impromptu has always sent integers and
real values as 32bit numbers. You can now change
default behavior to send 64bit version by
setting (io:osc:set-integer-64bit?) and
- objc:release now returns the first object in
its argument list. The time to release is now an
optional argument which defaults to 40000
samples. There is also a shortcut to
objc:release named objc:r. All of this means
that you can now write code like this (let
((frame (objc:r (gfx:get-movie-frame movie
time)))) and the returned frame will be
automatically released in 40000 samples. See
help for details.
- atan now accepts an optional second
Major Fixes v2.1:
- Removed ugly network polling.
- ipc:new-process now blocks until it is
- Fixed a subtle continuations bug.
- Fixed nasty GC bug.
- Fixed some buggy text stuff.
- Fixed nil's in list printing bug.
- Added critical section for REPL writes.
- Some fixes to gfx:load-image.
- ipc:new-process now blocks such that you can
be sure it has loaded all of it's libraries when
- Hopefully fixed gfx:get-image-size.