Become a member
Become a member

or
Log in
Log in

or
News

Impromptu Updated to v2.1

Agrandir
Add this product to
  • My former gear
  • My current gear
  • My wishlist
Impromptu Audio Impromptu v2
Images
1/1
News Impromptu Audio Impromptu v2

Other Music Software from Impromptu Audio

Write a user review or Ask for a user review
Reviews
Price engine
Classified Ads
Forums

Impromptu has been updated to v2.1.

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 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.

Be the first to post a comment about this news item

    Viewers of this article also read...

    cookies
    We are using cookies!

    Yes, Audiofanzine is using cookies. Since the last thing that we want is disturbing your diet with too much fat or too much sugar, you'll be glad to learn that we made them ourselves with fresh, organic and fair ingredients, and with a perfect nutritional balance. What this means is that the data we store in them is used to enhance your use of our website as well as improve your user experience on our pages and show you personalised ads (learn more). To configure your cookie preferences, click here.

    We did not wait for a law to make us respect our members and visitors' privacy. The cookies that we use are only meant to improve your experience on our website.

    Our cookies
    Cookies not subject to consent
    These are cookies that guarantee the proper functioning of Audiofanzine and allow its optimization. The website cannot function properly without these cookies. Example: cookies that help you stay logged in from page to page or that help customizing your usage of the website (dark mode or filters).
    Google Analytics
    We are using Google Analytics in order to better understand the use that our visitors make of our website in an attempt to improve it.
    Advertising
    This information allows us to show you personalized advertisements thanks to which Audiofanzine is financed. By unchecking this box you will still have advertisements but they may be less interesting :) We are using Google Ad Manager to display part of our ads, or tools integrated to our own CMS for the rest. We are likely to display advertisements from our own platform, from Google Advertising Products or from Adform.

    We did not wait for a law to make us respect our members and visitors' privacy. The cookies that we use are only meant to improve your experience on our website.

    Our cookies
    Cookies not subject to consent

    These are cookies that guarantee the proper functioning of Audiofanzine. The website cannot function properly without these cookies. Examples: cookies that help you stay logged in from page to page or that help customizing your usage of the website (dark mode or filters).

    Google Analytics

    We are using Google Analytics in order to better understand the use that our visitors make of our website in an attempt to improve it. When this parameter is activated, no personal information is sent to Google and the IP addresses are anonymized.

    Advertising

    This information allows us to show you personalized advertisements thanks to which Audiofanzine is financed. By unchecking this box you will still have advertisements but they may be less interesting :) We are using Google Ad Manager to display part of our ads, or tools integrated to our own CMS for the rest. We are likely to display advertisements from our own platform, from Google Advertising Products or from Adform.


    You can find more details on data protection in our privacy policy.
    You can also find information about how Google uses personal data by following this link.