1

我想在 CL/CCL 中为 mpg123 控制台 mp3 播放器编写一个简单的包装器,并想知道如何写入作为衍生进程存在的 mpg123:

(let* ((p (run-program "mpg123" '("-R") :input :stream :output :stream :wait nil))
       (s (external-process-input-stream p)))

  (write "LOAD /path/to/file.mp3" :stream s)
  (write-char #\return s))

但是这段代码不起作用,我有点卡住了。有任何想法吗?

4

1 回答 1

3

注意事项:我手边没有 Clozure 实例,我假设这run-program来自 CCL 扩展。

不过,几乎可以肯定的是,mpg123可能“还没有”接收到您的输出,因为在所有主流系统上,I/O (默认情况下)都是缓冲的,直到您达到某个缓冲区大小限制为止。添加一个(finish-output s)after#'write-char可能会成功。

请参阅http://clhs.lisp.se/Body/f_finish.htm -force-output如果您不担心立即阅读任何回复(例如,如果您在循环中排队长播放列表),则可能更合适,但在练习,它们在某种程度上可以互换。

于 2016-06-21T14:36:02.740 回答