Very excited for NEC (ugh, web link)

http://anonradio.net/code-battle-zone/

which I believe our underground poet gef is hosting on Christmas,
UTC. NEC = Noise, Electronics and Code; three things close to my heart
and fingertips.

My travel laptop wasn't intended for much other than browsing gopher
and lispy gopher show recordings! I have portable access to a raw
audio device through mpv like this:

mpv --demuxer=rawaudio \\
    --demuxer-rawaudio-format=u8 \\
    --demuxer-rawaudio-rate=44100

mpv knows about this linux, and can ask it for sound configuration and
then just pass through raw bytes. (on this device pragmatically raw
bytes are in fact raw bytes but could be s24le or the default s16le).

I can fork and exec mpv to configure and pass through audio in ecl
like this:

(setf (symbol-function 'out) (multiple-value-bind (streams ret
    process) (ext:run-program "mpv" '("--demuxer=rawaudio"
    "--demuxer-rawaudio-format=u8" "--demuxer-rawaudio-rate=44100"
    "-") :wait nil) (lambda () (two-way-stream-output-stream
    streams))))

after which a call to the closure (out) returns a useful output
stream.

I also need somewhere for data:

(setq *io* (open ,file :direction :io))

Common lisp doesn't provide in-memory bivalent streams, so a buffer is
used (in a higher performance context I think that buffer could sit in
a ramdisk or something).

I packaged that along with a frequency -> closure and closure composer
at

gopher://gopher.club/0/users/tfw/ecl-mpv.lisp

If you don't have access to anything except mpv and ecl like me this
is a bare-bones way to drive raw audio from a single (seekable)
bivalent stream and raw output stream!

If you are less resource-starved lots of damgud cyberchatters (gef,
ldbeth, froggyme, arf, gerbilfat, unimagine, iiogama, mhcat, and many
more) can help with puredata, orca, cl-music and lots of things I
don't know. zdrmonster knows the retro [lib-] adlib.

I've been doing about 15k a day with 600m up/down in my spare time
which got me behind on the graphviz control flow I was working on, and
this doubly so! We had to plow through some Tradescantia to get out of
a gully and fortunately didn't get bitten by snakes, but we did get
covered in australian 2-jawed land leeches, which are deeply surreal
little monsters.