I was listening to smj do strange and excellent glitching of
the  clash   on  anon  radio   as my  energy   to  do  inane
email-sending  tasks waned. It got me in mind of how I could
form some cyber-appendage capable of grasping the stream.

I think actually-doing-it probably could look kind of like

1.      Dump     my    stream    into    a     wave     file
2.    Streamingly    convert    wave  file   to   mp3   file
3. Stream that to stream

(If you know better than the seat of my pants, do say. Maybe
there's a tut.)

So actually-doing-what.   I've sorely neglected  my sometime
life centre of streaming. Laplace (I like to rhyme this with
hapless) transforms  create discrete signals from continuous
signals  and then inverse the inverse.  A popular one is the
Fourier transform, converting  between frequency dirac delta
spikes  and  sinc  sounds  (etc).   The dirac delta function
is 0 when it's argument is not 0, and has an integral of 1.

The  discrete  Fourier  transform  takes  surprisingly   few
operations/has   a  low complexity  to do called   the  Fast
Fourier  Transform,  originally known to Euler.  Larger Fast
Fourier  Transforms  are built up recursively,   related  to
possible  factorisations  of the input's size.  In practice,
terminating small fast fourier transforms are below size 53,
because above that numbers other than 0 or 1 show up in part
of a split-nesting  approach,  and numbers other than 0 or 1
suck.

Anyway,  I want to stream these.   My thinking  is to stream
through       butterflies      of      little       discrete
decimation-in-frequency    ffts  [whence  to   anon   radio,
eventually].   The key bit of streaming  here is that  after
some lead time, output has to start leaving  exactly as fast
as new inputs arrive.

It is also fast to compute  prime  sized  discrete   Fourier
transforms;  you can use a fast fourier transform  to do the
maths of a prime sized discrete  fourier  transform,  so the
prime   one can be fast as well.   It's  not known  how many
operations it takes in the best case in general.

Let's do the simple definition  of plus and minus-i discrete
fourier transforms.

(defun naieve-i (v)
(make-array (length v) :initial-contents
           (loop for k below (length  v) collecting
                (loop for n below (length  v) summing
                     (* (aref v n)
                       (exp (/ (* #c(0  -1) 2 pi k n)
                           (length v))))))))

and its undoing (or vice versa), the +i

(defun naieve-i (v)
(make-array (length v) :initial-contents
           (loop for k below (length  v) collecting
                (loop for n below (length  v) summing
                     (* (aref v n)
                       (exp (/ (* #c(0  +1) 2 pi k n)
                           (length v))))))))

For  a given smallish  prime number,  we can calculate   the
Winograd fft, whose attractive properties I am going to fail
to use here.

(defun  win-5 (v) \"Today brought  to you be the number 5 and
letter   nu\"
(let*   ((t0  (+ (aref  v 1)  (aref   v  4)))
         (t1 (+ (aref v 2) (aref  v 3)))
         (a4 (- (aref  v 3) (aref v 2)))
         (a5 (- (aref v 1) (aref  v 4)))
         (a1 (+ t0 t1))
         (a2 (- t0 t1))
         (a3 (+ a4 a5))
         (a0 (+ (aref  v 0) a1))
         (th (/ (* 2 pi)  5))
         (b0 (* 1 a0))
         (b1 (* a1 (1- (* 1/2 (+ (cos  th) (cos (* 2 th)))))))
         (b2 (* a2 1/2 (- (cos th) (cos  (* 2 th)))))
         (b3 (* a3 (sin th)))
         (b4 (* a4 (+ (sin  th) (sin (* 2 th)))))
         (b5 (* a5 (- (sin (* 2 th)) (sin  th))))
         (v0 b0)
         (*t0 (+ b0 b1))
         (*t1 (- b3 b4))
         (*t2 (+ b3 b5))
         (*t3 (+ *t0 b2))
         (*t4 (- *t0 b2))
         (v1 (- *t3 (* #c(0  1) *t1)))
         (v2 (- *t4 (* #c(0  1) *t1)))
         (v3 (+ *t3 (* #c(0  1) *t1)))
         (v4 (+ *t4 (* #c(0  1) *t1))))
 (values (make-array (length v) :initial-contents
                    (list v0 v1 v2 v3 v4)))))

Now hooooopefully

(win-5 #(1 1 0 1 2))
and
(naieve-i #(1 1 0 1 2))
and some print function* give us

5.00 + 0.00j
1.12 + 1.54j
-1.12 + -0.36j
-1.12 + 0.36j
1.12 + -1.54j

and following naieve+i ..

5.00 + 0.00j
5.00 + 0.00j
0.00 + 0.00j
5.00 + 0.00j
10.00 + 0.00j

Since every two transforms  the size scales by the length of
the transform.  Believe me the Fourier transform version  of
this will be good to listen to.