Impromptu Updated to v2.1
Impromptu has been updated to v2.1.
New Additions in 2.1:
Other Changes and Additions:
Major Fixes v2.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 for example).
Other Changes and Additions:
- Improved access for programmatic changes to the text buffer through sys:get-text-buffer and syset-text-buffer.
- 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 context.
- There have been a couple of OSC changes. osc namespace io:oscend io:osc:receive etc. io:osc-register-events has now changed to io:osctart-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:oscet-integer-64bit?) and (io:oscet-real-64bit?).
- 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 argument.
Major Fixes v2.1:
- Removed ugly network polling.
- ipc:new-process now blocks until it is properly initialized.
- 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 it returns.
- Hopefully fixed gfx:get-image-size.
Viewers of this article also read...
- FatLoud Pro Series Urban Synths Urban Synths ia s collection of 105 synth loops plus 13 one-shot chords/hits, custom programmed and played on instruments like Access Virus, Novation X-Station, Korg M3, and more.
- Le Lotus Bleu Nec Plus Ultra Sound Designers Peter Schelfhout and LotuZia have united their forces to offer different sound design approaches, including Keys, Basses, Leads, Pads, Atmos, ARPs, Percussions, Plucks as well as the usual subcategories like Brass, Strings, EPs and Organs, Clavinet, Stabs etc.
- Prodyon Livemachine Prodyon has announced Livemachine, which is described as a unique "realtime looping sequencer" that can be used to create songs, remixes and loops on the fly.