My  one-th  lispy gopher show aired! It was scrappy and half
the time slot,  and I was very slightly  going to pieces the
hour before I just listened to it in com with everyone  else
but it happened.

One challenge  with  my show is that I don't use high  level
software,  which bewilders  usual advice about what software
is easy to use.  Well, I'm still relying  on ffmpeg but most
of that I can replace with my libsndfile  lisp post, and the
rest should  just be using libmp3lame  to achieve  the right
encoding. Here I will document what I worked with this time.

In order to make asyncronous  shell calls, I used ecl's
#'ext:run-program which is like

(setq *ext-proc*
(nth-value 2
(ext:run-program "./foo.exe"
       '("--args" "--to" "--foo")
:output *standard-output*
       :wait nil)))

The  #'nth-value   2 is because  the multiple   returns   of
#'ext:run-program   are (values two-way-stream   status-code
ext-process).  The interesting  thing is :wait nil, which is
like adding an & after a command in a shell.

So to asyncronously  record  from my mic, which is snd/1,  I
can use openbsd aucat(1)

(setq *ext-proc* (nth-value 2
(ext:run-program "aucat"
       '("-f" "snd/1" "-o" "rec.wav")
       :wait nil)))

But I don't  really want the external process,  I want a way
of  stopping  aucat,  so instead  I return  a closure   that
terminates the process:

(setq *killer*
(let ((ext-proc (nth-value 2 (ext:run-program  "aucat" '
       ("-f" "snd/1" "-o" "out.wav")
       :wait nil))))
(lambda ()
(ext:terminate-process ext-proc)
(ext:external-process-wait ext-proc))))

So I can end recording with (funcall *killer*) (and the same
for playing  with aucat(1) -i).  Similarly,  system sound is
the same  but my device  is snd/mon  (see some  post  I made
before).

That's  about it technically.   I put my pre-recorded   show
together, and converted it to mp3 using ffmpeg, though I can
write this out:

```combine.txt
file 'foo.wav'
file 'bar.wav'
```

ffmpeg -f concat -safe 0 -i combine.txt -c copy cat.wav

And lame compression with ffmpeg:

ffmpeg -i cat.wav -ar 44100 -b:a 192k cat.mp3

For portability, ecl's #'ext:run-program  should be replaced
with the compatibility  package  uiop's  #'uiop:run-program,
though it's noticeably different.

Proximal goals:  Figure out live icecast2 streaming so I can
sbr and have my hour live.  4-5 more songs to round  out the
hour.   Try and use my sound-playback  and rec abilities  to
form recognisable music. I think it could be fun to just try
to  recreate  small  phrases  from a track  using  my  lispy
libsndfile.

Thank you to everyone  on anonradio,  com, gopher,  DJs  and
miscellaneous other damgud cyberchatters.