It is still problematic with the help file bundled in 1.4<div><br></div><div>Using the search box in the help window crashes the help viewer. The search field in the help menu (menu bar at the top) can&#39;t find anything besides the generic OS X apps menu items.</div>

<div>In the function reference page, you have to click the section titles twice to reach them</div><div>Crosslinks in function pages don&#39;t work (one of them once crashed Impromptu 1.34)</div><div><br></div><div>Cheers,</div>

<div>Pierre-Yves</div><div>_______________________<br>Pierre-Yves Gérardy, MD<br>Headache Research Unit<br>University of Liege<br>Citadelle Hospital (University dept. of Neurology),<br>Boulevard du XIIe de Ligne, 1<br>B4000 Liège, Belgium<br>

Phone : +32 (0) 4 225 71 41<br>Mobile : +32 (0) 472 543 727<br>Fax : +32 (0) 4 223 88 07<br>Department Secretary : Ms Groven : +32 (0) 4 225 63 91<br>
<br><br><div class="gmail_quote">2009/3/30 Pierre-Yves Gérardy <span dir="ltr">&lt;<a href="mailto:pygy79@gmail.com">pygy79@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hi,<div><br></div><div>I couldn&#39;t test 1.4 yet since I&#39;m at work, but there is a problem with the help menu in 1.3n versions. Using the search function or clicking in cross-links between function descriptions (see also sections) causes the help window to crash.</div>


<div><br></div><div>Cheers, and thanks for this version the new features will make things easier for me :-)</div><div>Pierre-Yves<br clear="all">_______________________<br>Pierre-Yves Gérardy, MD<br>Headache Research Unit<br>


University of Liege<br>Citadelle Hospital (University dept. of Neurology),<br>Boulevard du XIIe de Ligne, 1<br>B4000 Liège, Belgium<br>Phone : +32 (0) 4 225 71 41<br>Mobile : +32 (0) 472 543 727<br>Fax : +32 (0) 4 223 88 07<br>


Department Secretary : Ms Groven : +32 (0) 4 225 63 91<br>
<br><br><div class="gmail_quote">2009/3/28 Andrew Sorensen <span dir="ltr">&lt;<a href="mailto:andrew@moso.com.au" target="_blank">andrew@moso.com.au</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div></div><div class="h5">
Hi All,<br>
<br>
There are some reasonably large changes in version 1.4 and I would really appreciate your help to test the new release.  Hopefully everything works OK but as the system grows it&#39;s getting harder and harder for me to test everything fully before making new releases.  If you could give the beta a bit of a thrash test I would be very grateful.  Please let me know if you find any problems (including erroneous or out of date documentation).<br>



<br>
A complete listing of impromptu functions as at v1.4 is attached as a PDF.<br>
<br>
You can download the beta from:<br>
<a href="http://impromptu.moso.com.au/extras/impromptu_1.4b.dmg" target="_blank">http://impromptu.moso.com.au/extras/impromptu_1.4b.dmg</a><br>
<br>
<br>
-- IMPROMPTU 1.4 Release Notes --<br>
<br>
Major Additions:<br>
<br>
Upwards of 200 new user functions.<br>
<br>
* Over 150 new vDSP,vImage and veclib functions for direct data processing<br>
* New functions for interoperating with binary data more easily and efficiently (objc:data:*)<br>
* Movie performance has been improved and now supports all QT formats.<br>
* iChat Theater support for remote AV performance (simply drag and drop impromptu into your ichat session for live AV streaming).<br>
* Improved CoreImage filter support (gfx:make-filter gfx:apply-filter and gfx:set-filter-param).<br>
* New opengl functionality<br>
* New text rendering support<br>
<br>
Major Bug Fixes:<br>
<br>
* Multi-channel audio fixes<br>
* Scheme string port fixes<br>
* Added OSC timestamp support (also added NTP support which can be used with OSC)<br>
* Kore Player instantiation fix<br>
<br>
---------------------------------------------------------<br>
<br>
<br>
Thanks very much everyone for your help!  Happy Hacking!<br>
<br>
Cheers,<br>
Andrew.<br>
<br>
<br>
p.s. Some example code demonstrating the use of the new objc:data, vDSP and veclib libraries<br>
<br>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
;;<br>
;; Some examples using the new vdsp: and veclib: functions<br>
;;<br>
;; C arrays are very useful because (a) they&#39;re fast a (b) many libraries use them.<br>
;; The easiest way to interact with C arrays in Impromptu is to use NSData/NSMutableData objects.<br>
;; Basically NSData/NSMutableData objects are wrappers for malloc&#39;d memory.<br>
;;<br>
;; Calling (objc:data:make 512) allocates 512 bytes of memory<br>
;; and returns this &quot;memory&quot; as an objc object.  When the objc object goes out of scope<br>
;; the memory is automatically released (i.e. you don&#39;t need to do anything special).<br>
;;<br>
;; Many impromptu functions expect nsdata/nsmutabledata objects as arguments. in particular<br>
;; the new vector libraries vdsp: and veclib: expect nsdata/nsmutabledata objects.<br>
;; In this example file any reference to a &#39;vector&#39; actually means NSData or NSMutableData<br>
;; NOT a scheme vector.<br>
;;<br>
;; For a full list of functions tab complete on vDSP: or veclib:<br>
;;<br>
;; Note that when creating nsmutabledata objects all lengths are in bytes (think malloc)<br>
;; but the vdsp and veclib functions take length and count arguments in number of<br>
;; elements (think array access). The examples below should give you a reasonable idea about<br>
;; how all this fits together<br>
;;<br>
;; WARNING: working with these functions (indeed any impromptu functions using nsdata) means<br>
;; directly manipulating memory.  For efficiency reasons I&#39;m not checking everything you do<br>
;; so be careful with your lengths counts strides etc..<br>
;; In other words - don&#39;t access elements in NSData objects beyond your allocated memory!!<br>
;;<br>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
<br>
;; a couple of utility functions that we&#39;ll use later<br>
(define print-vectorsd<br>
   (lambda args<br>
      (print &#39;------------------)<br>
      (let ((size (/ (objc:call (car args) &quot;length&quot;) 8)))<br>
         (dotimes (i size)<br>
            (map (lambda (v)<br>
                    (print (objc:data:get-double v i)))<br>
                 args)))))<br>
<br>
(define print-vectorsf<br>
   (lambda args<br>
      (print &#39;------------------)<br>
      (let ((size (/ (objc:call (car args) &quot;length&quot;) 4)))<br>
         (dotimes (i size)<br>
            (map (lambda (v)<br>
                    (print (objc:data:get-float v i)))<br>
                 args)))))<br>
<br>
<br>
;; create a vector (i.e. NSMutableData object) of double precision floats (i.e. Float64) zeroed out<br>
(define v1 (objc:data:make (* 10 8)))<br>
;; create a vector (i.e. NSMutableData object) of single precision floats (i.e. Float32) zeroed out<br>
(define v2 (objc:data:make (* 10 4)))<br>
;; create a vector of single precision floats (i.e. Float32) zeroed out<br>
(define v3 (objc:data:make (* 10 4)))<br>
;; create a vector of single precision floats (i.e. Float32) zeroed out<br>
(define v4 (objc:data:make (* 10 4)))<br>
<br>
<br>
;; assign random values (0.0-1.0) to every 2nd element in v1<br>
(vdsp:vrandd v1 2 10)<br>
(print-vectorsd v1)<br>
;; reverse v1<br>
(vdsp:vrvrsd v1 1 10)<br>
(print-vectorsd v1)<br>
<br>
;; assign the value 5.125 to each element of v2<br>
(vdsp:vfill 5.125 v2 1 10)<br>
(print-vectorsf v2)<br>
;; assign a series starting at 0 incrementing by pi to v3<br>
(vdsp:vramp 0.0 3.141592 v3 1 10)<br>
(print-vectorsf v3)<br>
;; assign random numbers (0.0-1.0) to v4<br>
(vdsp:vrand v4 1 10)<br>
(print-vectorsf v4)<br>
;; scale v4 by 256.0 and put result in v2<br>
(vdsp:vsmul v4 1 256.0 v2 1 10)<br>
(print-vectorsf v2)<br>
;; sum v2<br>
(print &#39;sum-of-v2 (vdsp:sve v2 1 10))<br>
<br>
<br>
;; let&#39;s see how fast this stuff is.  one million float32 elements<br>
(define v5 (objc:data:make (* 1000000 4)))<br>
;; lets ramp from 0.0 to 999999.0<br>
(let ((t (now)))<br>
   (vdsp:vramp 0.0 1.0 v5 1 1000000)<br>
   (print &#39;time-taken: (- (now) t)))<br>
<br>
;; the answer is VERY FAST<br>
;; don&#39;t print the whole vector because that will take FOREVER!<br>
;; instead we&#39;ll print the first, last and a random internal element<br>
(print (objc:data:get-float v5 0)<br>
       (objc:data:get-float v5 409193)<br>
       (objc:data:get-float v5 999999))<br>
<br>
;; now let&#39;s do something cool - like convolution!<br>
;; first create a 4 tap filter [4 3 2 1]<br>
(define v-filter (objc:data:make (* 4 4)))<br>
(vdsp:vramp 4.0 -1.0 v-filter 1 4)<br>
;; then create a constant signal<br>
(define v-signal (objc:data:make (* 4 16)))<br>
(vdsp:vfill 1.0 v-signal 1 16)<br>
(vdsp:vfill 0.0 v-signal 1 4)<br>
;; now convolve the signal with the filter dumping the result into output<br>
(define v-output (objc:data:make (* 4 16)))<br>
(vdsp:conv v-signal 1 v-filter -1 v-output 1 16 4)<br>
;; and print<br>
(print-vectorsf v-output)<br>
<br>
;; You can also create a reference into a data object.<br>
;; This can be useful for working on subsections of a vector<br>
;; note that this is a ref not a copy so you MUST NOT let the original fall out of scope<br>
;; you can however let the refence fall out of scope without danger.<br>
(define original-v (objc:data:make (* 9 4)))<br>
;; subrange ref takes an offset in bytes and a length in bytes<br>
;; and returns an NSData reference to the original<br>
(define reference-v (objc:data:subref original-v (* 3 4) (* 3 4)))<br>
(print-vectorsf original-v)<br>
(print-vectorsf reference-v)<br>
(vdsp:vfill 1.0 original-v 1 9)<br>
(vdsp:vfill 2.0 reference-v 1 3)<br>
(print-vectorsf original-v)<br>
(print-vectorsf reference-v)<br>
<br>
;; dont&#39; forget the veclib: functions<br>
(define new-sqrt-data (objc:data:make (* 9 4)))<br>
(veclib:vvsqrtf new-sqrt-data original-v 9)<br>
(print-vectorsf new-sqrt-data)<br>
<br>
;; Note that we can get and set individual elements of vectors (i.e. NSMutableData objects)<br>
;; but we must use the correct type (i.e. float uint8 uint32 double etc..)<br>
;; however, bare in mind that this is slow - try to use the vdsp and veclib functions<br>
(print (objc:data:get-float original-v 0))<br>
(objc:data:set-float original-v 0 22.125)<br>
(objc:data:set-float original-v 8 22.125)<br>
(print (objc:data:get-float original-v 8))<br>
(print-vectorsf original-v)<br>
<br>
<br>
<br>
<br><br>
<br>
<br>
<br>
<br>
<br></div></div>_______________________________________________<br>
Impromptu mailing list<br>
<a href="mailto:Impromptu@lists.moso.com.au" target="_blank">Impromptu@lists.moso.com.au</a><br>
<a href="http://lists.moso.com.au/mailman/listinfo/impromptu" target="_blank">http://lists.moso.com.au/mailman/listinfo/impromptu</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>