From: Daniel S. <dv...@ea...> - 2009-11-24 15:33:42
|
Sam, Perhaps a dumb question. I should probably have learned this in some obvious reverence. I wrote a sound-generation program that makes .AIF files. I write the sound samples sequentionally into the file with this ... (defmacro write-integer (n outfil &optional (nbytes 2) &aux stash) (dotimes (i (1- nbytes)) (push (list 'ash n (* -8 (1+ i))) stash)) `(progn ,@(mapcar (lambda (x) `(write-byte (logand ,x 255) ,outfil)) (reverse (cons n stash))))) It writes integers of nbytes into a binary file. In order to do rescaling, I want to write binary files of floating-point numbers, ... and fast. Put differently, I want to #'logand and #'ash the bits of floating-point numbers. The CL floating-point conversion functions don’t quite do the job. They will break it up into <sign exponent mantissa>. I want something like #'float-as-integer, and then something to undo that on reading it back in. -- devious dan |