Экспериментирую я тут с espeak:
(defmacro with-espeak-process ((&rest args)
&body code)
`(let ((*espeak-process*
(uiop:launch-program '("espeak" ,@args)
:input :stream
:output :stream)))
(unwind-protect
(progn ,@code)
(uiop:close-streams *esrap-process*)
(uiop:terminate-process *esrap-process*))))
Но espeak после такой сессии не подыхает и может дальше принимать текст на озвучку и озвучивать его. Как его убить с не вдаваясь в специфичные функции sbcl?
SBCL